Мои простейшие часы
- Войдите на сайт для отправки комментариев
Чт, 20/04/2017 - 22:39
#include <EEPROM.h>
long pm = 0;
long pm2 = 0;
#define red 5
#define blue 6
#define sp 8
int h=EEPROM.read(10);
int m=EEPROM.read(20);
int s=EEPROM.read(30);
void setup() {
//EEPROM.write(10, 20);//Часы
//EEPROM.write(20, 53);//Минуты
Serial.begin(9600);
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(sp, OUTPUT);
pinMode(12, INPUT_PULLUP);
}
void loop() {
if (micros() - pm > 999990 && (pm = micros()))
{
s++;
if (s >= 60)
{
s = 0;
digitalWrite(blue,1);
m++;
EEPROM.write(20, m);
}
if (m >= 60)
{
m = 0;
digitalWrite(red,1);
h++;
EEPROM.write(10, h);
}
if (h >= 24)
{
h = 0;
EEPROM.write(10, h);
}
if (h <10)
{
Serial.print("0");
}
Serial.print(h);
Serial.print(":");
if (m <10)
{
Serial.print("0");
}
Serial.print(m);
Serial.print(":");
if (s <10)
{
Serial.print("0");
}
Serial.println(s);
}
else
{
if(!digitalRead(12) == 1)
{
s++;
}
}
digitalWrite(blue,0);
digitalWrite(red,0);
}
Чёт Вы во всех темах отмечаетесь. Я там (в другой) уже спрашивал про строку 23: что это по-Вашему означает? Вы уверены, что Вы понимаете, что в этой строке написано. По-русски можете сказать?
Также обратите внимание на строку 32. Если запустить Ваши часы в работу, то срок жизни контроллера - одна неделя. Может чуть больше, может чуть меньше, но по документации производителя это строка должна убить EEPROM за одну неделю.
возможно убьет зато часы не слетают когда выключаешь
if(micros() - pm > 999990 && (pm = micros())) //чего непонятного? этот иф исполняется каждую секунду с какойто погрешностью с какой выясняю.if(micros() - pm > 999990 && (pm = micros())) //чего непонятного? этот иф исполняется каждую секунду с какойто погрешностью с какой выясняю.Вы можете словами сказать условие, которое там записано.
Я вот его понимаю так: "если микрос() - pm больше 999990 И ПРИ ЭТОМ микрос() не равно нулю"
А побочным эффектом проверки этого условия является изменения значения pm на текущее значение микрос()
Вы это имели в виду, когда писали?
часы не слетают когда выключаешь
Кто Вам сказал? Не верьте!
Выключите. а через полчаса включите - будет показывать прошлое. Или это машина времени? :)
Также обратите внимание на строку 32. Если запустить Ваши часы в работу, то срок жизни контроллера - одна неделя. Может чуть больше, может чуть меньше, но по документации производителя это строка должна убить EEPROM за одну неделю.
Страхуется производитель, тесты народ гонял, раз в 20-30 больше. Так что полгода почти гарантировано.)))
А что, нормальный подход, МК - расходный материал, поднимем продажи китая.))))
#include <EEPROM.h> long pm = 0; #define red 5 #define blue 6 #define sp 8 int h=EEPROM.read(10); int m=EEPROM.read(20); int s=0; void setup() { //EEPROM.write(10, 20);//Часы //EEPROM.write(20, 21);//Минуты Serial.begin(9600); pinMode(red, OUTPUT); pinMode(blue, OUTPUT); pinMode(sp, OUTPUT); pinMode(12, INPUT_PULLUP); } void loop() { if (millis()/1000 == pm && (pm++)) { s++; if (s > 59) {s = 0; digitalWrite(blue,1); m++; EEPROM.write(20, m);} if (m > 59) {m = 0; digitalWrite(red,1); h++; EEPROM.write(10, h);} if (h > 23) {h = 0; EEPROM.write(10, h);} if (h <10) Serial.print("0"); Serial.print(h); Serial.print(":"); if (m <10) Serial.print("0"); Serial.print(m); Serial.print(":"); if (s <10) Serial.print("0"); Serial.println(s); //if(!digitalRead(12) == 1) delay(30); s=0; delay(30); digitalWrite(blue,0); digitalWrite(red,0); } }Переделал
А что поменялось? В строке 25 иддёт запись в еепром раз в минуту - срок жизни еепрома - одна неделя.
Что же до строки 22. Вы упорно игнорируете мою просьбу объяснить словами, что там написано. Что Вы имеете в виду? Не хотите - не надо, конечно, это Ваше дело. По мне так там сейчас написана бессмыслица.
А что поменялось? В строке 25 иддёт запись в еепром раз в минуту - срок жизни еепрома - одна неделя.
Что же до строки 22. Вы упорно игнорируете мою просьбу объяснить словами, что там написано. Что Вы имеете в виду? Не хотите - не надо, конечно, это Ваше дело. По мне так там сейчас написана бессмыслица.
бессмысленный if выполнфемый каждую секунду с точностью до секунды на сколько точен millis() в ардуине
если вам так важно не писать в EEROM так уберите их из кода.
int pm = 0; if (millis()/1000 == pm) { pm++; }так больше смысла?
Откуда мне знать? Я уже дважды просил объяснить словами что именно Вы хотели сделать. Вы не объясняете? И как я догадаюсь?
если вам так важно не писать в EEROM так уберите их из кода.
Мне важно??????????????
Мне как-то казалось, что мы Ваш код обсуждаем. Но если Вам Ваш код не важен, то имею честь откланяться :)
Похоже вы меня тролите :))
Да, нет, совершенно искренне хотел помочь, объяснить что не так, но Вы вместо того чтобы слушать начали обороняться. расслабьтесь, на Вас никто не нападает. Мне как-то вообще без разницы, что у Вас там.