Программирование LCD 5110

Ma4etePRO
Offline
Зарегистрирован: 04.08.2017

Друзья, помогите разобраться. Мне нужно, чтобы на экран 5110 выводилась разная информация c датчиков в зависимости от пройденного времени.Не могу разобраться с функцией millis (). Написал вот такой скетч и попробовал проследить как меняется переменная numb с монитора порта:

int numb = 0;
#define  INTERVAL  1000UL           
 
void setup() {
     
  Serial.begin (9600);
}
 
void loop()
{ 
  static unsigned long previousMillis = 0;        
  if(millis() - previousMillis > INTERVAL) {
       previousMillis = millis() - INTERVAL;  
 
    numb = 1;
  }
  else numb = 2;
  Serial.print (numb);
}

он работает не правильно. Необходимо сделать, чтобы выполнялось сначала первое действие, затем второе и так по кругу, т.е. на экран передавалась опреденная информация  на протяжении определенного периода времени. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
//-----------------------------
//--------Компановка---------------------
//--------main---------------------
void setup() {
  Serial.begin (9600);
}
void loop() {
  static unsigned long past = 0;
  static bool numb = 0;
  if (millis() - past >/*время обновления 1 сек*/1000) {
    past = millis();
    numb = !numb;
    if (numb)     Serial.println (1);
    else Serial.println (0);
  }
}
/*Скетч использует 1870 байт (5%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 191 байт (9%) динамической памяти, оставляя 1857 байт для локальных переменных. Максимум: 2048 байт.
*/

 

b707
Offline
Зарегистрирован: 26.05.2017

строка 13  неправильная

 

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

b707 пишет:
строка 13  неправильная
Чем? @^@

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
#define  INTERVAL  1000UL
 
void setup() {
Serial.begin (9600);
}

void loop() {
byte numb = ((millis() / INTERVAL) & 1) + 1;
Serial.print (numb);
}

 

Ma4etePRO
Offline
Зарегистрирован: 04.08.2017

Объясните, пожалуйста, 8 строчку. Почему снасла переменной присваивается значение 1, затем 2 и наоборот? Немного не понимаю... А можно сделать чтобы переменная numb имела значения 1, 2, 3 и т.д. , а  затем снова по кругу? Спасибо.

Ma4etePRO
Offline
Зарегистрирован: 04.08.2017

 А как сдлать, чтобы значение namb менялось не только на 0 и 1, а , например, на 1, 2, 3, затем счетчик обнуляется и снова по кругу 1, 2, 3?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
unsigned long mill;// переменая под millis()
//-----------------------------
//--------Компановка---------------------
unsigned long past = 0;
byte numb = 0;
//--------main---------------------
void setup() {
  Serial.begin (9600);
}
void loop() {
  mill = millis();
  if (mill - past >=/*время обновления 1 сек*/1000) {
    past = mill;
    Serial.println (numb);
    ++numb; if (numb > 2)numb = 0;
  }
}
/*Скетч использует 1704 байт (5%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 195 байт (9%) динамической памяти, оставляя 1853 байт для локальных переменных. Максимум: 2048 байт.
*/

 

Ma4etePRO
Offline
Зарегистрирован: 04.08.2017

Большое спасибо!