03-09-2018, 18:52
Witam
Udało mi się uruchomić cyfrowy termometr z dwoma czujnikami DS18B20 i wyświetlaczem OLED.
Napotkałem jednak kolejny problem. Mianowicie kod zajmuje zbyt dużo miejsca w pamięci kontrolera. O ile na Arduino UNO nie ma problemów z pamięcią o tyle na Arduino Nano (Atmega 168) brakuje pamięci. Czy jest jakaś możliwość zmniejszenia rozmiaru kodu? Usunięcie zbędnych danych z wykorzystanych bibliotek? Chciałbym, aby jakoś udało się zmieścić ten program na Arduino NANO, ponieważ z założenia miało to wszystko zostać zamknięte w jak najmniejszej obudowie. Jeżeli jednak zajdzie taka potrzeba, będę zmuszony zakupić Arduino NANO z Atmegą 328. Jednak warto spróbować zmniejszyć kod i czegoś się przy okazji nauczyć
W razie potrzeby zamieszczam kod:
Jedyne, co przychodzi mi do głowy, to możliwość usunięcia "logo" i przeniesienia go do biblioteki adafruit, chociaż wątpię, czy zmieni to rozmiar.
Za wszystkie pomocne odpowiedzi z góry dziękuję
Udało mi się uruchomić cyfrowy termometr z dwoma czujnikami DS18B20 i wyświetlaczem OLED.
Napotkałem jednak kolejny problem. Mianowicie kod zajmuje zbyt dużo miejsca w pamięci kontrolera. O ile na Arduino UNO nie ma problemów z pamięcią o tyle na Arduino Nano (Atmega 168) brakuje pamięci. Czy jest jakaś możliwość zmniejszenia rozmiaru kodu? Usunięcie zbędnych danych z wykorzystanych bibliotek? Chciałbym, aby jakoś udało się zmieścić ten program na Arduino NANO, ponieważ z założenia miało to wszystko zostać zamknięte w jak najmniejszej obudowie. Jeżeli jednak zajdzie taka potrzeba, będę zmuszony zakupić Arduino NANO z Atmegą 328. Jednak warto spróbować zmniejszyć kod i czegoś się przy okazji nauczyć

W razie potrzeby zamieszczam kod:
Kod:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DS18B20.h>
#define ONEWIRE_PIN 2
#define SENSORS_NUM 2
#define OLED_RESET LED_BUILTIN
const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xB1, 0x6D, 0xA1, 0x3, 0x0, 0x0, 0x11, ///////adres czujnika 1
0x28, 0x87, 0x6A, 0xA1, 0x3, 0x0, 0x0, 0x1F ///////adres czujnika 2
};
OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);
Adafruit_SSD1306 display(OLED_RESET);
const uint8_t logo [] PROGMEM = {
dane hex logo
};
const uint8_t ramka [] PROGMEM = {
dane hex ramki
};
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.drawBitmap(0, 0, logo, 128, 64, 1);
display.display();
delay(5000);
display.clearDisplay();
sensors.begin();
sensors.request();
}
void loop() {
if (sensors.available())
{
for (byte i=0; i<SENSORS_NUM; i++)
{
float temperature = sensors.readTemperature(FA(address[i]));
display.drawBitmap(0, 0, ramka, 128, 64, 1);
display.display();
display.setTextColor(WHITE);
display.setCursor(22,30);
display.println(temperature);
display.setTextColor(WHITE);
display.setCursor(73,30);
display.println(temperature);
}
}
sensors.request();
}
Jedyne, co przychodzi mi do głowy, to możliwość usunięcia "logo" i przeniesienia go do biblioteki adafruit, chociaż wątpię, czy zmieni to rozmiar.
Za wszystkie pomocne odpowiedzi z góry dziękuję
