Здравствуйте. Писал писал я значит скетч вроде места впритык на ардуину уно: 91% обьем памяти и 75% переменных. Начал тестировать и через секунд десять дуня зависла(. Подозреваю обьем скетча ведь без кода часов все работает. Но проект должен быть с часами иначе никак. Опыта в оптимизации 0 поэтому прошу помочь. Скоро добавлю код он просто не влезает
Код (C++): #include "Adafruit_VEML6070.h" #include <SPI.h> #include "prescaler.h" #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(6, 5, 4, 3, 2); #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 Adafruit_VEML6070 uv = Adafruit_VEML6070(); // Setup a new OneButton on pin A2. int buttonState10 = 0; int buttonState8 = 0; int buttonState9 = 0; int buttonState6 = 0; int buttonState = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; #include <Wire.h>//уже есть в системе #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; long randNumber; int pres; int pres2; float temp; #include <SoftwareSerial.h> SoftwareSerial SIM800(8, 9); //#include <DS3231.h> это часть библиотек
далее идут массивы но они вообще на форум не влезают( Setup Код (C++): void setup() { while (!bmp.begin(BMP280_ADDRESS - 1)) { } // rtc.begin(); display.begin(); delay(1000); display.setContrast(47); display.clearDisplay(); testdrawrect(); display.display(); delay(2000); display.clearDisplay(); display.setTextSize(2); display.setCursor(0, 0); display.print("C."); display.setCursor(0, 16); display.print("O."); display.setCursor(0, 32); display.print("H."); display.display(); uv.begin(VEML6070_1_T); Serial.begin(9600); SIM800.begin(9600); delay(500); pinMode(A0, INPUT); pinMode(10, OUTPUT); randomSeed(analogRead(0)); pinMode(A1, INPUT_PULLUP); pinMode(A3, INPUT); pinMode(A2, INPUT_PULLUP); pinMode(11, INPUT_PULLUP); pinMode(A5, INPUT); pinMode(12, INPUT_PULLUP); pinMode(A0, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(13, INPUT_PULLUP); delay(500); display.drawBitmap(0, 0, smileBmp, 84, 48, BLACK); display.display(); delay(500); SIM800.println("AT+CLIP=1"); SIM800.println("ATS0=3"); delay(1500); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); pres2 = (bmp.readPressure() + 100 ) / 100; } :
loop: Код (C++): void loop() { if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial if (Serial.available()) // Ожидаем команды по Serial... SIM800.write(Serial.read()); buttonState = analogRead(A1); // если кнопка нажата, то её состояние HIGH: if (buttonState < 40) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); SIM800.println("ATA" ); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Online..."); display.drawBitmap(4, 16, smileBmP, 84, 33, BLACK); display.display(); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); pres2 = bmp.readPressure() / 133 ; } buttonState6 = digitalRead(12); if (buttonState6 == LOW) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); display.clearDisplay(); display.drawBitmap(0, 0, logo16_glcd_bmp, 16, 15, BLACK); display.drawBitmap(20, 8, logo16_glcd_bmp, 16, 15, BLACK); display.drawBitmap(0, 0, meteo, 84, 48, BLACK); display.display(); delay(1500); display.clearDisplay(); pres = bmp.readPressure() / 133 ; temp = bmp.readTemperature(); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.print("Pressure="); display.setCursor(55, 0); display.print(pres); display.print("m"); display.setCursor(0, 20); display.print("Temp="); display.setCursor(30, 20); display.print(temp); display.setCursor(60, 20); display.print("C"); display.setCursor(0, 10); display.println("UV="); display.setCursor(20, 10); display.println(uv.readUV()); display.setCursor(0, 30); display.print("Alt="); display.print(bmp.readAltitude(pres2) - 5.10); display.print(" m"); display.display(); delay(50); display.display(); float one = bmp.readAltitude(1000); delay (1000); float two = bmp.readAltitude(1000); display.setCursor(10, 40); display.println(one - two); display.setCursor(40, 40); display.println("m/c"); display.display(); } buttonState10 = analogRead(A0); if (buttonState10 < 40) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); delay(100); setClockPrescaler(CLOCK_PRESCALER_4); trueDelay(100); display.clearDisplay(); testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_WIDTH, LOGO16_GLCD_HEIGHT); } buttonState8 = digitalRead(7); if (buttonState8 == LOW) { setClockPrescaler(CLOCK_PRESCALER_1); display.clearDisplay(); delay(50); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); display.drawBitmap(0, 0, pama, 84, 48, BLACK); display.setTextSize(1); display.setCursor(20, 35); // display.print(rtc.getDateStr()); display.setTextSize(2); display.setCursor(5, 5); // display.println(rtc.getTimeStr()); display.display(); // Wait one second before repeating :) delay (100); } buttonState5 = analogRead(A5); if (buttonState5 < 40) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); SIM800.println("ATD+79177577864;" ); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Call Papa.. "); display.drawBitmap(0, 16, SmileBmp, 84, 33, BLACK); display.display(); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); } buttonState9 = digitalRead(13); if (buttonState9 == LOW) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); randNumber = random(5); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); } if (randNumber == 1) { display.clearDisplay(); display.drawBitmap(0, 0, PESHKA, 84, 38, BLACK); display.setCursor(8, 40); display.setTextSize(1); display.println("Yes"); display.display(); randNumber = random(10, 10); } if (randNumber == 2) { display.clearDisplay(); display.setTextSize(2); display.setCursor(0, 0); display.setCursor(8, 15); display.println("Eagle!"); display.setCursor(8, 40); display.setTextSize(1); display.println("No"); display.display(); randNumber = random(10, 10); } if (randNumber == 3) { display.clearDisplay(); display.drawBitmap(0, 0, PESHKA, 84, 38, BLACK); display.setCursor(8, 40); display.setTextSize(1); display.println("Other way?"); display.display(); randNumber = random(10, 10); } if (randNumber == 4) { display.clearDisplay(); display.setTextSize(2); display.setCursor(0, 0); display.setCursor(8, 15); display.println("Eagle!"); display.setCursor(8, 40); display.setTextSize(1); display.println("Think about"); display.display(); randNumber = random(10, 10); } buttonState2 = analogRead(A3); if (buttonState2 < 40) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); SIM800.println("ATD+79874785079;" ); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Call Andrey.."); display.drawBitmap(0, 16, SmileBmp, 84, 33, BLACK); display.display(); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); } buttonState3 = analogRead(A2); // если кнопка нажата, то её состояние HIGH: if (buttonState3 < 40) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); SIM800.println("ATH" ); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Reset call"); display.drawBitmap(4, 16, SmileBmP, 84, 33, BLACK); display.display(); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); } buttonState4 = digitalRead(11); if (buttonState4 == LOW) { setClockPrescaler(CLOCK_PRESCALER_1); delay(50); SIM800.println("ATD+79174131191;" ); display.clearDisplay(); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0, 0); display.println("Call MaMa.."); display.drawBitmap(0, 16, SmileBmp, 84, 33, BLACK); display.display(); tone(10, 400, 125); delay(70); tone(10, 200, 125); delay(50); noTone(10); } } void testdrawrect(void) { for (int16_t i = 0; i < display.height() / 2; i += 2) { display.drawRect(i, i, display.width() - 2 * i, display.height() - 2 * i, BLACK); display.display(); } } void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { uint8_t icons[NUMFLAKES][3]; randomSeed(666); // whatever seed // initialize for (uint8_t f = 0; f < NUMFLAKES; f++) { icons[f][XPOS] = random(display.width()); icons[f][YPOS] = 0; icons[f][DELTAY] = random(5) + 1; Serial.print("x: "); Serial.print(icons[f][XPOS], DEC); Serial.print(" y: "); Serial.print(icons[f][YPOS], DEC); Serial.print(" dy: "); Serial.println(icons[f][DELTAY], DEC); } while (1) { // draw each icon for (uint8_t f = 0; f < NUMFLAKES; f++) { display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); } display.display(); trueDelay(130); // then erase it + move it for (uint8_t f = 0; f < NUMFLAKES; f++) { display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); // move it icons[f][YPOS] += icons[f][DELTAY]; // if its gone, reinit if (icons[f][YPOS] > display.height()) { icons[f][XPOS] = random(display.width()); icons[f][YPOS] = 0; icons[f][DELTAY] = random(5) + 1; } } } }
Выложите код на ГитХабе, например, если не влезает на форум. Так есть вероятность, что кто-то посмотрит. На вскидку - вы хотите использовать часы DS3231 и при этом у вас в коде buttonState5 = analogRead(A5); Как так? Приложите схему подключения всех устройств.
Не знаю как так но с бмп280 такое прокатило. Схему рисовать не умею поэтому на словах: нокиа дисплей к 6,5,4,3,2 пину потом динамик на 10, кнопки все аналоговые заняли кроме А4 и еще 7, 13, 12 , 11 пины, сим 800 к 8,9 пину, бмп280 на А4 и А5 Вроде все да не они влезают нормально, это же шестнадцатеричные картинки
вы правда думаете. что кто-то захочет разбираться с вашей проблемой. если вам самому даже схему лень нарисовать?