Не всегда обрабатывается конструкция switch-case

Нет ответов
User MTU
Offline
Зарегистрирован: 24.03.2012
#include <Wire.h>
#include <DS1307.h>

void setup()
{  
  Serial.begin(9600); 
  Wire.begin();
  delay(1000);
}

void write_RTC() {
  char value=0;
  char command=0;
  command = Serial.read();
  delay(50);				
  value=byte((Serial.read()-48)*10); 	
  delay(50);
  value+=byte((Serial.read()-48));		
  switch (command) {
  case 'h' :
    RTC.set(DS1307_HR,value);
    Serial.print("hours set to ");
    Serial.println(value,DEC);
    break;
  case 'm' :
    RTC.set(DS1307_MIN,value);
    Serial.print("minutes set to ");
    Serial.println(value,DEC);
    break;
  case 's' :
    RTC.set(DS1307_SEC,value);
    Serial.print("seconds set to ");
    Serial.println(value,DEC);
    break;
  case 'D' :
    RTC.set(DS1307_DATE,value);
    Serial.print("day of month set to ");
    Serial.println(value,DEC);
    break;
  case 'd' :
    RTC.set(DS1307_DOW,value);
    Serial.print("day of week set to ");
    Serial.println(value,DEC);
    break;
  case 'M' :
    RTC.set(DS1307_MTH,value);
    Serial.print("month set to ");
    Serial.println(value,DEC);
    break;
  case 'Y' :
    RTC.set(DS1307_YR,value);
    Serial.print("year set to ");
    Serial.println(value,DEC);
    break;
  case 'u' :
  case 'U' :
    use();
    break;
  case 'r' :
    RTC.stop();
    Serial.println("Clock stopped");
    break;
  case 'R' :
    RTC.start();
    Serial.println("Clock running");
    break;
  default :
    break;
  }
} 

void lister() 
{
  Serial.println();
  Serial.print("Time: ");
  Serial.print(RTC.get(DS1307_HR,true)); 
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));
  Serial.print(", Date: ");               
  Serial.print(RTC.get(DS1307_DATE,false));
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false)); 
/*тут еще есть опрос других датчиков*/
}

void loop()
{
  
  switch (RTC.get(DS1307_SEC,true)) 
  {
      case 58:
       lister(); 
       delay (1000);
       break;

      default:
       if (Serial.available()) { write_RTC(); }
  }

}

Это код моей программы. Собственно к меге2560 подключены часы, пара датчиков (один из которых висит вместе с часами).

Задумка такая - каждую 58-ю секунду надо выводить время, дату и значения датчиков.

То есть читаю из DS1307 секунды, если равно 58 то опрашиваю датчичи и часы, если нет, то слушаю СОМ-порт на наличие команд (управления DS1307).

На практике - данные выводтся не каждую 58-ю секунду (ну или каждую минуту), а каждую 58+58 секунду.

Пробовал убирать switch-case - скорости опроса хватает чтобы данные выводить 2-3 раза в секунду. Но это избыточно, надо каждую минуту...

Подскажите, в чем может быть проблема пропуска одной из минут?