Склероз ардуино.
- Войдите на сайт для отправки комментариев
Ср, 06/11/2019 - 12:32
Здравствуйте, товарищи! Возникла проблема, стал сбрасываться скетч на китайской уно. после отключения питания платы. То есть, при повторном включении загорается только "on" на плате и on" на rtc. Как решить данную проблему?
Ниже скетч. Немного мной измененный.
#include <DS3231.h> #include <Wire.h> #include "TM1637.h" // http://www.seeedstudio.com/wiki/File:DigitalTube.zip // 7сигментный индикатор #define CLK 6 #define DIO 7 #define MAX_BRIGHT 7 // яркость дисплея дневная (0 - 7) #define MIN_BRIGHT 1 // яркость дисплея ночная (0 - 7) #define NIGHT_START 23 // час перехода на ночную подсветку (MIN_BRIGHT) #define NIGHT_END 10 // яркость, от 0 до 7 // кнопки #define keyHor 5 #define keyMin 4 #define keyPL 3 TM1637 tm1637(CLK,DIO); #define DS3231_I2C_ADDRESS 0x68 volatile boolean flag; ///// часы .. byte decToBcd(byte val){ return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); } void setDateDs3231(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs3231(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } //void setINT(){ //включает выход SQW, который вроде выключен по умолчанию // Wire.beginTransmission(DS3231_I2C_ADDRESS); // Wire.write(0x0E); // Wire.write(0x0); // Wire.endTransmission(); //} // //void blink() { // digitalWrite(13, !digitalRead(13)); // flag = !flag; // tm1637.point(flag); //} void loop(){ // читаем время из модуля byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // забиваем массив значениями для отпарвки на экран int8_t TimeDisp[4]; TimeDisp[0] = hour / 10; TimeDisp[1] = hour % 10; TimeDisp[2] = minute / 10; TimeDisp[3] = minute % 10; if ( (hour >= NIGHT_START && hour <= 23) || (hour >= 0 && hour <= NIGHT_END) ) tm1637.set(MIN_BRIGHT); else tm1637.set(MAX_BRIGHT); if (hour == NIGHT_START) tm1637.set(MIN_BRIGHT); if (hour == NIGHT_END) tm1637.set(MAX_BRIGHT); // обработка кнопок if (!digitalRead(keyHor)){ // часы second = 0; // сбрасываем секунды hour++; // пребавляем единицу к часам if (hour > 23) hour = 0; // если вылезли за границы присваеваем 0 setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль delay(200); } if (!digitalRead(keyMin)){ // минуты second = 0; minute++; if (minute > 59) minute = 0; setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); delay(200); } // отправляем массив на экран tm1637.display(TimeDisp); } void setINT(){ //включает выход SQW, который вроде выключен по умолчанию Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x0E); Wire.write(0x0); Wire.endTransmission(); } void blink() { digitalWrite(13, !digitalRead(13)); flag = !flag; tm1637.point(flag); } void setup() { // Serial.begin(9600); Wire.begin(); pinMode(13, OUTPUT); pinMode(keyHor, INPUT_PULLUP); pinMode(keyMin, INPUT_PULLUP); pinMode(keyPL, INPUT_PULLUP); tm1637.init(); setINT(); attachInterrupt(0, blink, CHANGE); } //void loop(){ // // читаем время из модуля // byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // // забиваем массив значениями для отпарвки на экран // int8_t TimeDisp[4]; // // TimeDisp[0] = hour / 10; // TimeDisp[1] = hour % 10; // TimeDisp[2] = minute / 10; // TimeDisp[3] = minute % 10; // // // обработка кнопок // if (!digitalRead(keyHor)){ // часы // second = 0; // сбрасываем секунды // hour++; // пребавляем единицу к часам // if (hour > 23) hour = 0; // если вылезли за границы присваеваем 0 // setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль // delay(200); // } // if (!digitalRead(keyMin)){ // минуты // second = 0; // minute++; // if (minute > 59) minute = 0; // setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // delay(200); // } // // отправляем массив на экран // tm1637.display(TimeDisp); // // //}
Взять ардуину без склероза.
Хм, а это мысль. А какого производителя лучше, если выбирать из китайских? Сейчас у меня wavgat.
Я склонен доверять RobotDyn. WAVGAT - это подстава. Вверху строка поиска, вбейте туда слово "WAVGAT".
Может ещё из https://www.diymore.cc/collections/dm-strong-series что-нить присмотреть, наверное. По виду так ничегошные.
А какого производителя лучше, если выбирать из китайских? Сейчас у меня wavgat.
это вы как в лотерею выиграли, только с обратным знаком. Ардуину можно брать практически любую, лишь бы не Вавгат :)
Сейчас у меня wavgat.
Так надо было с этого и начинать! А то скрывали зачем-то, в первом посте писали
на китайской уно.
Нихарашо!
А какого производителя лучше, если выбирать из китайских? Сейчас у меня wavgat.
это вы как в лотерею выиграли, только с обратным знаком. Ардуину можно брать практически любую, лишь бы не Вавгат :)
Ну не знаю, пользуючь Вавгатовскими модулями(не только ардуинами) регулярно. На мой взгляд качество выше среднего.
Конечно не стоит брать (если специально не требуется) их модули на "совместимых" чипах, но о том что это не оригинальные чипы в описании честно, хотя и не очень внятно написаною
Вот у них обычная нана - https://ru.aliexpress.com/item/32531372300.html
А вот совместимая - https://ru.aliexpress.com/item/32868170637.html Эту лучше не брать. Хоть по некоторым параметрам она и лучше обычной, но потребубтся дополнительные пляски с бубном.