Мои простейшие часы

Zom
Offline
Зарегистрирован: 20.04.2017
#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); 
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Чёт Вы во всех темах отмечаетесь. Я там (в другой) уже спрашивал про строку 23: что это по-Вашему означает? Вы уверены, что Вы понимаете, что в этой строке написано. По-русски можете сказать? 

Также обратите внимание на строку 32. Если запустить Ваши часы в работу, то срок жизни контроллера - одна неделя. Может чуть больше, может чуть меньше, но по документации производителя это строка должна убить EEPROM за одну неделю.

Zom
Offline
Зарегистрирован: 20.04.2017

возможно убьет зато часы не слетают когда выключаешь

Zom
Offline
Зарегистрирован: 20.04.2017
if (micros() - pm > 999990 && (pm = micros())) //чего непонятного? этот иф исполняется каждую секунду с какойто погрешностью с какой выясняю.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Zom пишет:

if (micros() - pm > 999990 && (pm = micros())) //чего непонятного? этот иф исполняется каждую секунду с какойто погрешностью с какой выясняю.

Вы можете словами сказать условие, которое там записано.

Я вот его понимаю так: "если микрос() - pm больше 999990 И ПРИ ЭТОМ микрос() не равно нулю"

А побочным эффектом проверки этого условия является изменения значения pm на текущее значение микрос()

Вы это имели в виду, когда писали?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Zom пишет:

 часы не слетают когда выключаешь

Кто Вам сказал? Не верьте!

Выключите. а через полчаса включите - будет показывать прошлое. Или это машина времени? :)

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Также обратите внимание на строку 32. Если запустить Ваши часы в работу, то срок жизни контроллера - одна неделя. Может чуть больше, может чуть меньше, но по документации производителя это строка должна убить EEPROM за одну неделю.

Страхуется производитель, тесты народ гонял, раз в 20-30 больше. Так что полгода почти гарантировано.)))
А что, нормальный подход, МК - расходный материал, поднимем продажи китая.))))

Zom
Offline
Зарегистрирован: 20.04.2017
#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);
 }
}

Переделал

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что поменялось? В строке 25 иддёт запись в еепром раз в минуту - срок жизни еепрома - одна неделя.

Что же до строки 22. Вы упорно игнорируете мою просьбу объяснить словами, что там написано. Что Вы имеете в виду? Не хотите - не надо, конечно, это Ваше дело. По мне так там сейчас написана бессмыслица.

Zom
Offline
Зарегистрирован: 20.04.2017

ЕвгенийП пишет:

А что поменялось? В строке 25 иддёт запись в еепром раз в минуту - срок жизни еепрома - одна неделя.

Что же до строки 22. Вы упорно игнорируете мою просьбу объяснить словами, что там написано. Что Вы имеете в виду? Не хотите - не надо, конечно, это Ваше дело. По мне так там сейчас написана бессмыслица.

бессмысленный if выполнфемый каждую секунду с точностью до секунды на сколько точен millis() в ардуине

если вам так важно не писать в EEROM так уберите их из кода. 

Zom
Offline
Зарегистрирован: 20.04.2017
int pm = 0;
if (millis()/1000 == pm)
{
pm++;
}

так больше смысла?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Zom пишет:
так больше смысла?

Откуда мне знать? Я уже дважды просил объяснить словами что именно Вы хотели сделать. Вы не объясняете? И как я догадаюсь?

Zom пишет:

если вам так важно не писать в EEROM так уберите их из кода. 

Мне важно??????????????

Мне как-то казалось, что мы Ваш код обсуждаем. Но если Вам Ваш код не важен, то имею честь откланяться :)

Zom
Offline
Зарегистрирован: 20.04.2017

Похоже вы меня тролите :))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, нет, совершенно искренне хотел помочь, объяснить что не так, но Вы вместо того чтобы слушать начали обороняться. расслабьтесь, на Вас никто не нападает. Мне как-то вообще без разницы, что у Вас там.