Функция millis()

Amoiseev27
Offline
Зарегистрирован: 23.04.2017
Здравствуйте, есть LCD экран, и я хочу на него каждую секунду выводить сообщение вида i=i+1, т.е. что бы каждую секунду значение на экране увеличивалось на один. Но на экран один раз выводится 1 и ничего дальше не меняется. Подскажите, пожалуйста, где ошибка. Код прикладываю ниже.
 
if (millis()-time60>1000)
    {
      time60=millis();
      int i;
      i=i+1;
      lcd.print(i);
    }

 

 

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

Забыл сказать, что приведенный код лежит в теле loop.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Amoiseev27 пишет:
Подскажите, пожалуйста, где ошибка.

Понятно где ошибка сидит. Она за вашим компьютером сидит. 

void loop() {
  static uint32_t time60 = 0;
  static int i;
  if (millis() - time60 >= 1000) {
    time60 = millis();
    i = i + 1;
    lcd.print(i);
  }
}

 

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

qwone пишет:

Amoiseev27 пишет:
Подскажите, пожалуйста, где ошибка.

Понятно где ошибка сидит. Она за вашим компьютером сидит. 

void loop() {
  static uint32_t time60 = 0;
  static int i;
  if (millis() - time60 >= 1000) {
    time60 = millis();
    i = i + 1;
    lcd.print(i);
  }
}

 

А кроме сарказма чем Вы можете помочь?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Amoiseev27 пишет:
А кроме сарказма чем Вы можете помочь?

А что остается делать. Бить по рукам как у пианистов не получится. Вы далеко, не достану. А делать "детские"ошибки. Основы языка Си они для всех пишутся, а не только для профессионалов. 

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Amoiseev27 пишет:

Здравствуйте, есть LCD экран, и я хочу на него каждую секунду выводить сообщение вида i=i+1, т.е. что бы каждую секунду значение на экране увеличивалось на один. Но на экран один раз выводится 1 и ничего дальше не меняется. Подскажите, пожалуйста, где ошибка. Код прикладываю ниже.
 
if (millis()-time60>1000)
    {
      time60=millis();
      int i;
      i=i+1;
      lcd.print(i);
    } 

А что происходит, пока проверка условия ложно?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Amoiseev27 пишет:

А кроме сарказма чем Вы можете помочь?

А предложенного кода недостаточно? Вы слышали что-нибудь про область видимости переменных?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Jeka_M, по моему товарищ даже не догнал что код изменился :)

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

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

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

Jeka_M пишет:

А предложенного кода недостаточно? Вы слышали что-нибудь про область видимости переменных?

Нет, не слышал.

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

ulis пишет:

А что происходит, пока проверка условия ложно?

А ничего, или так нельзя?

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Можно, только поэтому вы ничего и не видите

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Amoiseev27 пишет:

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

Избить слабого - здесь так принято :) поэтому вы тоже кому-нить в глаз дайте, штоп не зарывались :)

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

ulis пишет:

Можно, только поэтому вы ничего и не видите

А подскажите, пожалуйста, как дополнить код?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Amoiseev27 пишет:
А подскажите, пожалуйста, как дополнить код?

Афтор жжет.

ПС:http://arduino.ru/Reference/Static

Ключевое слово static используется для создания переменной, которая видна только одной функции. Однако в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные остаются после вызова функции, сохраняя свои значения между её вызовами.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011
unsigned long time60 = millis();
int i = 0;

void setup()
{
  
}

void loop() {
  if (millis()-time60>1000)
     {
      time60 = millis();       
     }
     else
     {
       i++;
       lcd.print(i);
     }
}
5alex5
5alex5 аватар
Offline
Зарегистрирован: 10.04.2016

я так понял что он хочет видеть все выражение на дисплее, а значит надо преобразовать в строку данные - или мне показалось

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

qwone пишет:

Amoiseev27 пишет:
А подскажите, пожалуйста, как дополнить код?

Афтор жжет.

ПС:http://arduino.ru/Reference/Static

Ключевое слово static используется для создания переменной, которая видна только одной функции. Однако в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные остаются после вызова функции, сохраняя свои значения между её вызовами.

Спасибо!

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

ulis пишет:

unsigned long time60 = millis();
int i = 0;

void setup()
{
  
}

void loop() {
  if (millis()-time60>1000)
     {
      time60 = millis();       
     }
     else
     {
       i++;
       lcd.print(i);
     }
}

Спасибо большое :)

Amoiseev27
Offline
Зарегистрирован: 23.04.2017

5alex5 пишет:

я так понял что он хочет видеть все выражение на дисплее, а значит надо преобразовать в строку данные - или мне показалось

Нет, ничего преобразовывать не надо :)