Функция для LCD

KoleS
Offline
Зарегистрирован: 31.07.2012

 Добрый день

нужно сделать  так что бы  у меня на LCD  подключенном  к ардуине выводились все переменные которые должны выводиться, сразу как они менятся, но при функция void loop   не должна в себе ничего содержать, т.е. как бы там основной код должен быть.. а допустим в функции ( допустим) void LCD  должно идти обновление экрана

maksim
Offline
Зарегистрирован: 12.02.2012

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

KoleS
Offline
Зарегистрирован: 31.07.2012

 Можно подробнее, с приером пожалуйста 

maksim
Offline
Зарегистрирован: 12.02.2012

 Качаете библиотеку, распаковываете ее в \arduino\libraries, вот примерно так будет выглядеть код:

#include <TimerOne.h>

void Display(){
 // Обработва дисплея
}

void setup() {
  Timer1.initialize(200000); // 200000 мкс = 200 млс = 0,2 секунды
  Timer1.attachInterrupt(Display);
}

void loop(){
 // Основной код
} 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 А я бы не заморачивался с таймером:

  1. Стремно что-то сложное в обработчики прерываний пихать. Грабли там растут буйным цветом.
  2. Таймер для чего-то более полезного может пригодится (или наоборот, начать конфликтовать с другими библами).

Если не критично работать с дисплее именно "раз в секунду", а достаточно "примерно раз в секунду". И если он вызовется на 100 миллисекунд позже ничего катастрофического не случится, то

unsigned long lastRepTime=0;
#define LCD_PERIOD 1000 // работаем с дислеем раз в 1000 милисекунд=1 сек.

void Display(){
 // Обработва дисплея
}

void setup() {

}

void loop(){
 if( (millis()-lastRepTime)>LCD_PERIOD){
   Display();
   lastRepTime=millis();
 }
 // Основной код
} 

Но естественно, про использование в основном коде какие-то существенных delay() - нужно забыть. Каждый такое delay() означает что вывод на экран "может запоздать".

Функция дисплей будет вызыватся каждый  LCD_PERIOD миллисекунд. Но может запаздывать. Максимальное возможное "опоздание" равно времени выполнения "Основной код" (поэтому и нужно что-бы он "проходил без задержек").

 

 

 

KoleS
Offline
Зарегистрирован: 31.07.2012

огромоное спасибо)

прочитал только сейчас)  пригодится в будущем, а сделал все по своему)