Минимум памяти

zugni
Offline
Зарегистрирован: 14.06.2015

при удачной загруски скетча пишет вот такую строчку: Минимум памяти, стабильность могут возникнуть проблемы.

исходник

#include <dht11.h>

#include <DHT.h>
#define DHTPIN 7 
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];
extern uint8_t term[];
extern uint8_t grad[];
extern uint8_t hum[];
extern uint8_t proc[];

#include <DS1302.h>
DS1302 rtc(2,3,4);
Time t;

int x = 0;

void setup() {
  myOLED.begin();
  rtc.halt(false);
  //rtc.setDOW(FRIDAY);
  //rtc.setTime(18, 36, 0);
  //rtc.setDate(20, 8, 2015);
}

void loop() {
  if (x >= 10) {
    temp();
    dht11();
    x=0;
  }
  else
  {
    watch();
  }
  x++;
}
void watch() {
  myOLED.setFont(RusFont);
  t = rtc.getTime();
  switch (t.dow)
  {
    case 1:     myOLED.print("GJYTLTKMYBR", CENTER, 0);    break;
    case 2:     myOLED.print("DNJHYBR", CENTER, 0);        break;
    case 3:     myOLED.print("CHTLF", CENTER, 0);          break;
    case 4:     myOLED.print("XTNDTHU", CENTER, 0);        break;
    case 5:     myOLED.print("GZNYBWF", CENTER, 0);        break;
    case 6:     myOLED.print("CE<<JNF", CENTER, 0);        break;
    case 7:     myOLED.print("DJCRHTCTYMT", CENTER, 0);    break;
  }
  String stringOne = rtc.getTimeStr();
  myOLED.setFont(MegaNumbers);
  myOLED.print(stringOne.substring(0, 2), 4, 12);
  myOLED.print("/", 51, 12);
  myOLED.print(stringOne.substring(3, 5), 75, 12);
  myOLED.setFont(RusFont);
  switch (t.mon)
  {
    case 1:
      myOLED.print(String(t.date), 30, 57);
      myOLED.print("ZYDFHZ", CENTER, 57);
      myOLED.print(String(t.year), 88, 57);
      break;
    case 2:
      myOLED.print(String(t.date), 26, 57);
      myOLED.print("ATDHFKZ", CENTER, 57);
      myOLED.print(String(t.year), 92, 57);
      break;
    case 3:
      myOLED.print(String(t.date), 30, 57);
      myOLED.print("VFHNF", CENTER, 57);
      myOLED.print(String(t.year), 88, 57);
      break;
    case 4:
      myOLED.print(String(t.date), 30, 57);
      myOLED.print("FGHTKZ", CENTER, 57);
      myOLED.print(String(t.year), 88, 57);
      break;
    case 5:
      myOLED.print(String(t.date), 36, 57);
      myOLED.print("VFZ", CENTER, 57);
      myOLED.print(String(t.year), 82, 57);
      break;
    case 6:
      myOLED.print(String(t.date), 35, 57);
      myOLED.print("B>YZ", CENTER, 57);
      myOLED.print(String(t.year), 81, 57);
      break;
    case 7:
      myOLED.print(String(t.date), 35, 57);
      myOLED.print("B>KZ", CENTER, 57);
      myOLED.print(String(t.year), 81, 57);
      break;
    case 8:
      myOLED.print(String(t.date), 28, 57);
      myOLED.print("FDUECNF", CENTER, 57);
      myOLED.print(String(t.year), 90, 57);
      break;
    case 9:
      myOLED.print(String(t.date), 24, 57);
      myOLED.print("CTYNZ<HZ", CENTER, 57);
      myOLED.print(String(t.year), 94, 57);
      break;
    case 10:
      myOLED.print(String(t.date), 26, 57);
      myOLED.print("JRNZ<HZ", CENTER, 57);
      myOLED.print(String(t.year), 92, 57);
      break;
    case 11:
      myOLED.print(String(t.date), 28, 57);
      myOLED.print("YJZ<HZ", CENTER, 57);
      myOLED.print(String(t.year), 90, 57);
      break;
    case 12:
      myOLED.print(String(t.date), 26, 57);
      myOLED.print("LTRF<HZ", CENTER, 57);
      myOLED.print(String(t.year), 92, 57);
      break;
  }
  myOLED.update();
  delay(450);
  myOLED.setFont(MegaNumbers);
  myOLED.print("-", 51, 12);
  myOLED.update();
  delay(450);
}

void temp() {  
  int temp = dht.readTemperature();
  String stringOne = rtc.getTimeStr();
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(stringOne.substring(0, 5), 98, 0);
  myOLED.print(rtc.getDateStr(), 0, 0);
  myOLED.setFont(RusFont);
  myOLED.print("NTVGTHFNEHF", CENTER, 57);
  myOLED.drawBitmap(4, 12, term, 19, 40);
  myOLED.setFont(MegaNumbers);
  myOLED.print(String(temp), CENTER, 12);
  myOLED.drawBitmap(92, 12, grad, 13, 12); 
  myOLED.update();
  delay(3000);
  myOLED.clrScr();
}

void dht11(){
  int h = dht.readHumidity();
  String stringOne = rtc.getTimeStr();
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(stringOne.substring(0, 5), 98, 0);
  myOLED.print(rtc.getDateStr(), 0, 0);
  myOLED.setFont(RusFont);
  myOLED.print("DKF:YJCNM", CENTER, 57);
  myOLED.drawBitmap(0, 12, hum, 28, 40);
  myOLED.setFont(MegaNumbers);
  myOLED.print(String(h), CENTER, 12);
  myOLED.drawBitmap(96, 12, proc, 28, 40); 
  myOLED.update();
  delay(3000);
  myOLED.clrScr();
}

 

Looka
Offline
Зарегистрирован: 24.04.2012

Предупреждает Вас  компилятор, что памяти много используете. 
Если заметите не адекватную работу,  или просто зависнит - значит  на эти грабли и наступили.

Или железку менять  или   прогу переписывать (оптимизировать,  строковые константы в флэш писать....)

zugni
Offline
Зарегистрирован: 14.06.2015

Looka пишет:

Предупреждает Вас  компилятор, что памяти много используете. 
Если заметите не адекватную работу,  или просто зависнит - значит  на эти грабли и наступили.

Или железку менять  или   прогу переписывать (оптимизировать,  строковые константы в флэш писать....)

Спасибо всю ночь роботали часики но сразу заметил что с пятницы на субботу не перешло часы тоже самое 00.55 и встали короче просто стал экран мигать.

Так что тогда за основу брать для этого проекта?. Уж раз взялся за чужой проект хотелось бы его повтарить .

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Избавляться от String, сообщения держать во флеше.

zugni
Offline
Зарегистрирован: 14.06.2015

kisoft пишет:
Избавляться от String, сообщения держать во флеше.

к примеру таких? 

Эскиз использует 15 554 байт (48%) из программы для хранения пространство. Максимальная составляет 32 256 байт.
Глобальные переменные использовать 1 595 байт (77%) из динамической памяти, оставляя 453 байт Для локальных переменных. Максимум 2 048 байт.
myOLED.begin();
  rtc.halt(false);
  rtc.setDOW(SATURDAY);
  rtc.setTime(7, 56, 0);
  rtc.setDate(22, 8, 2015);

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

zugni пишет:

kisoft пишет:
Избавляться от String, сообщения держать во флеше.

к примеру таких? 

Эскиз использует 15 554 байт (48%) из программы для хранения пространство. Максимальная составляет 32 256 байт.
Глобальные переменные использовать 1 595 байт (77%) из динамической памяти, оставляя 453 байт Для локальных переменных. Максимум 2 048 байт.
myOLED.begin();
  rtc.halt(false);
  rtc.setDOW(SATURDAY);
  rtc.setTime(7, 56, 0);
  rtc.setDate(22, 8, 2015);

 


Если слово String непонятно, то его можно поискать в скетче, затем в интернете

zugni
Offline
Зарегистрирован: 14.06.2015

я понял что нужно от String мне ибавится, но не как недойдет даже здесь читал раз 10        

может как новичку по скетчу набрасайте пример пожалуйста

 

http://arduino.ru/Reference/String

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Это вам в "Ищу исполнителя". Могу сказать только одно, не используйте String, если памяти мало. А у Вас он на каждом шагу.

 

zugni
Offline
Зарегистрирован: 14.06.2015

kisoft пишет:

Это вам в "Ищу исполнителя". Могу сказать только одно, не используйте String, если памяти мало. А у Вас он на каждом шагу.

 

Я и не использую просто нашел проект и хотел сделать по его меркам себе подобное, очень хорошо смотрелось бы у меня настоле письменном.А за назойливоть извените если что.

Спасибо за помощь))) 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Демагогия. В исходнике сплошные String. Как угодно. Удачи.