Переменная Arduino становится пустой после первого прохода - PullRequest
0 голосов
/ 27 декабря 2010

У меня есть Эскиз Arduino , который требует времени, и когда этот момент времени равен текущему времени, он устанавливает новый момент времени как timet + 2.

Например:

 char* convert(char* x, String y)
 {
     int hour;
     int minute;

     sscanf(x, "%d:%d", &hour, &minute);

     char buf[6];

     if (y == "6")
     {
         if (hour > 17)
         {
             hour = (hour+6)%24;
             snprintf(buf, 10, "%d:%d", hour, minute );
         }
         else
             if (hour < 18)
             {
                 //hour = hour + 6;
                 minute = (minute + 2);
                 snprintf(buf, 10, "%d:%d", hour, minute);
             }
     }

     if (y == "12")
     {
         if (hour > 11)
         {
             hour = (hour+12)%24;
             snprintf(buf, 10, "%d:%d", hour, minute );
         }
         else
             if (hour < 12)
             {
                   hour = hour + 12;
                   snprintf(buf, 10, "%d:%d", hour, minute);
             }
     }

     if (y == "24")
     {
         hour = (hour+24)%24;
         snprintf(buf, 10, "%d:%d", hour, minute );
     }
     return buf;
}

Эскиз начинается, например, в 1:00 утра. timet установлено на 1:02, в системное время 1:02 timet равно системному времени.

Мои петли выглядят так:

if (timet == currenttime)
{
    timet = convert(timet)
}

Всякий раз, когда я проверяю значение timet, оно должно равняться 1:04, однако я получаю правильное значение при первом запуске после выполнения преобразования, однако каждый раз после этого мое значение timet пустое.

Я попытался изменить код вместо использования цикла if. Я запускаю функцию конвертирования только тогда, когда отправляю, например, через последовательный монитор. Это работает нормально и выдает правильное время после выполнения функции преобразования, поэтому я решил, что проблема в цикле if ...

Есть идеи?

Ответы [ 3 ]

1 голос
/ 27 декабря 2010

выглядит хитроумно ...

передать указатель?

уверен, что вы не имеете в виду * x = * x + 2

0 голосов
/ 27 декабря 2010
if (timet == currenttime){
   timet = convert(timet)
}

Это плохая идея.Либо timet хранит что-то в предварительно преобразованном формате, сопоставимом с текущим временем, либо сохраняет его в пост-преобразованном формате.

Поскольку вы сравниваете timet с currenttime, они должны быть одного типа и формата и быть чем-то, что может быть законно сопоставлено оператором '=='.

Возможно, вы хотите хранить внутреннее время в числовом формате (или в любом другом виде, в котором вы получаете необработанные показания времени из среды выполнения) и преобразовывать его при передаче в функцию вывода или преобразовывать в переменную формата строки (не называется timet, но что-то еще!) готовится к выходу.

0 голосов
/ 27 декабря 2010

вместо использования цикла if

Хм, какая петля? Там нет такого понятия, как "если цикл". Это будет выполняться ровно один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...