Импульс мозг кушает.
- Войдите на сайт для отправки комментариев
Чт, 09/01/2014 - 22:06
Нужно сделать импульс, регулируемый переменным резистором .
Читаю аналоговый вход где подключен резистор переменный.
Масштабирую его в миллисекунды и вывожу на дисплей.
Все работает как надо.
Светодиод загорается на заданный промежуток в миллисекундах и затем гаснет.
И после этого еле заметно продолжает вспыхивать, вспыхивает с частотой обновления экрана. Она у меня 600 миллисекунд. Меняю частоту обновления и меняется частота вспыхивания.
Как мне убрать это вспыхивание?
#include <LiquidCrystal.h>
LiquidCrystal lcd (12, 11, 5, 4, 3,2);
unsigned long previousMillis = 0;
unsigned long pMillis =0;
int v =0;
int led = 9;
int a = 0;
int e = 0;
void setup ()
{
lcd.begin (16, 12);
pinMode (A0, INPUT);
pinMode(led,1);
}
void loop ()
{
if (millis() - previousMillis >600)
{
previousMillis = millis();
lcd.clear ();
a = analogRead (A0);
lcd.setCursor (0,0);
lcd.print ( a);
lcd.setCursor (0, 1);
lcd.print (v);
v = analogRead(A0);
v = map(v,0,1023,0,3000);
digitalWrite(led,1);
if(millis() - pMillis > v)
{
digitalWrite(led,0);
}
}
}
У вас все обновляется каждые 600 миллисекунд, а не только дисплей, а вспыхивает светодиод от того что вы его включаете в 29 строке, а затем выключаете в 31.
А решить можно так:
if(millis() - pMillis > v) { digitalWrite(led,0); } else { digitalWrite(led,1); }maksim , еще раз спасибо! Да, действительно, все заработало как надо!
Еще один вопросик в догонку. Как можно записать так что бы обновлялся только LCD? А то ведь это вроде как бы не правильно когда все обновляется.
Вынесите то что не касается дисплея за фигурные скобки условия
if (millis() - previousMillis >600) { previousMillis = millis(); ..... } // сюда