Всем доброго времени суток! У меня есть: RobotDyn Mega (полный аналог Arduino Mega 2560); DHT11 (цифровой датчик температуры и влаги); TM1637 (дисплей часов); DS1307 (Часы реального времени). На часы я время залил. Спойлер: Код Код (C++): #include <dht.h> //Библиотека для датчика температуры и влажности #include "TM1637.h" //Библиотека для дисплея #include <Wire.h> // #include "RTClib.h" //Бибилтотека для часов реального времени #define CLK 48 //Синхросигнал для дисплея #define DIO 50 //данные для дисплея int vcc=52; //питание 5в для дисплея (у меня не проводков со штекерами, //поэтому я воткнул дисплей прямо в ардуинку =D) DHT sensor = DHT(); TM1637 disp(CLK,DIO); RTC_DS1307 rtc; int8_t TimeDisp[] = {0x00,0x00,0x00,0x00}; unsigned char ClockPoint = 1; int T=0; //для температуры int H=0; //для влажности int O=0; //для записи секунд void setup() { rtc.begin(); disp.init(); Serial.begin(9600); sensor.attach(40); //вывод DATA датчика DHT11 подключен к пину 40 pinMode(vcc, OUTPUT); // digitalWrite(vcc, HIGH); delay(1000); } void loop() { DateTime now = rtc.now(); //Получаем время из часов sensor.update(); // disp.set(0); //устанавливаем яркость дисплея //switch используется для выдачи данных с датчика //температуры и влаги на ком порт switch (sensor.getLastError()) { case DHT_ERROR_OK: char msg[128]; sprintf(msg, "Temperature = %dC, Humidity = %d%%", sensor.getTemperatureInt(), sensor.getHumidityInt()); Serial.println(msg); break; case DHT_ERROR_START_FAILED_1: Serial.println("Error: start failed (stage 1)"); break; case DHT_ERROR_START_FAILED_2: Serial.println("Error: start failed (stage 2)"); break; case DHT_ERROR_READ_TIMEOUT: Serial.println("Error: read timeout"); break; case DHT_ERROR_CHECKSUM_FAILURE: Serial.println("Error: checksum error"); break; } T=sensor.getTemperatureInt(); H=sensor.getHumidityInt(); //записываем температу и влажность в переменные, ClockPoint = (~ClockPoint) & 0x01; //это чтобы на дисплее две точки мигали O=now.second(); //записываем секунду if (O>0 && O<=10 or O>20 && O<=30 or O>40 && O<=50) //если секунда от 0 до 10, от 20 до 30, и от 40 до 50, то показываем время { if(ClockPoint)disp.point(POINT_ON); //включам две точки на дисплее else disp.point(POINT_OFF); //выключаем две точки на дисплее TimeDisp[0]=now.hour()/10; TimeDisp[1]=now.hour()%10; TimeDisp[2]=now.minute()/10; TimeDisp[3]=now.minute()%10; } if (O>10 && O<=15 or O>30 && O<=35 or O>50 && O<=55) //если секунда от 10 до 15, от 30 до 35, и от 50 до 55, то показываем температуру { disp.point(POINT_OFF); //выключаем две точки на дисплее TimeDisp[0]=T/10; TimeDisp[1]=T%10; TimeDisp[2]='$'; //+ TimeDisp[3]='$'; //$ } if (O>15 && O<=20 or O>35 && O<=40 or O>55 && O<=59) //если секунда от 15 до 20, от 35 до 40, и от 55 до 59, то показываем влажность { disp.point(POINT_OFF); //выключаем две точки на дисплее TimeDisp[0]='$'; TimeDisp[1]='$'; TimeDisp[2]=H/10; TimeDisp[3]=H%10; } disp.display(TimeDisp); // delay(1000); } Я не понимаю, что не так. Ардуинка через некоторое время просто зависает, но если отсоединить и снова присоединить дисплей, он продолжает работать, и через некоторое время опять зависает. Может быть какая-нибудь проблема с часами реального времени? Две ардуинки с двумя разными часами и разными кодами зависают, а третья ардуинка - работала без проблем. Правда третью ардуинку с февраля не использовал, поскольку на ней я сделал автоматическую гирлянду.
приветствую, у меня была такая же проблема с серво. Я подключил дополнительное питание через 220вольт на входе = 9В 3А на выходе, тогда она начала работать исправно
скорее всего, динамически распределяемая память наползает на стек. Из-за какой нибудь библиотеки. Пока спастить тебе можно только Вотчдогом. Решение временное, но сработает, пока опыта не наберешся.