Условие принудительного выключения
- Войдите на сайт для отправки комментариев
Вс, 23/08/2015 - 12:44
Доброго времени суток!
Есть стандартный код на включение\выключение диода командами. Суть в том чтобы диод включался\выключался командами, но если команда LOW не поступала принудительно, то выключить по истечению 1 минуты. Функция delay () блокирует все, поэтому не могу разобраться... Подскажите пожалуйста что можно сделать?
int led = 10;
int val;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.available()) {
val = Serial.read();
if (val == 'H') {
digitalWrite(led, HIGH),Serial.println(" Led ON ");
}
if (val == 'L') {
digitalWrite(led, LOW),Serial.println(" Led OFF ");
}
}
}
почитайте
http://arduino.ru/tutorials/BlinkWithoutDelay
что можно сделать?
Сесть и почитать про функцию millis() или про установку перываний от таймера.
#define timelimit (60000) int led = 10; int val; unsigned long timestamp=millis(); void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { if (Serial.available()) { val = Serial.read(); if (val == 'H') { digitalWrite(led, HIGH); Serial.println(" Led ON "); } if (val == 'L') { digitalWrite(led, LOW); Serial.println(" Led OFF "); } } if(millis()-timestamp>=timelimit){ digitalWrite(led, LOW); Serial.println(" Led OFF "); } }Я хочу COG 1602 экран. Пожалуйте 18 юаней на QIWI +79145891987. Это в российских рублях около пары сотен.
All, думаю, это честно.
Согласен, но после разового включения, а затем выключения, функция millis () все равно посылает бесконечные команды на остановку, тем самым забивая все что можно.
Согласен, но после разового включения, а затем выключения, функция millis () все равно посылает бесконечные команды на остановку, тем самым забивая все что можно.
Тут Вам уже двое советовали почитать - так почитайте. Там нет ничего, в чём не мог бы разобраться любой, имеющий такое желание от пятикласника и старше.
Кстати, исправить код std можно добавлением одной единственной строки. Почитайте и разберитесь.
Согласен, но после разового включения, а затем выключения, функция millis () все равно посылает бесконечные команды на остановку, тем самым забивая все что можно.
Тут Вам уже двое советовали почитать - так почитайте. Там нет ничего, в чём не мог бы разобраться любой, имеющий такое желание от пятикласника и старше.
Кстати, исправить код std можно добавлением одной единственной строки. Почитайте и разберитесь.
Читать не хочу, думать не хочу, юаня тоже давать не хочу, халява хочу.
Проблема остается даже с той самой строчкой
#define timelimit (60000) int led = 10; int val; unsigned long timestamp=millis(); void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { if (Serial.available()) { val = Serial.read(); if (val == 'H') { digitalWrite(led, HIGH); Serial.println(" Led ON "); timestamp = millis(); } if (val == 'L') { digitalWrite(led, LOW); Serial.println(" Led OFF "); timestamp = 0; // to keep the timer from printing upmteen Led OFF messages } } if ( timestamp > 0 ){ if(millis()-timestamp>=timelimit){ digitalWrite(led, LOW); Serial.println(" Led OFF "); } } }P.s. больше троллей хочу
exface
Вам таки раз в минуту выключать?
if(millis()-timestamp>=timelimit){ digitalWrite(led, LOW); Serial.println(" Led OFF "); timestamp=millis(); }Или чтобы после посылания H проработало не меньше минуты?
#define timelimit (60000) int led = 10; int val; unsigned long timestamp=millis(); boolean bOnState=false; void setup(){ Serial.begin(9600); pinMode(led, OUTPUT); } void loop(){ if (Serial.available()) { val = Serial.read(); if (val == 'H' && !bOnState) changeState(true); if (val == 'L' && bOnState) changeState(false); } if(millis()-timestamp>=timelimit && bOnState) changeState(false); } void changeState(boolean newState){ if(newState==bOnState) return; bOnState=newState; if(bOnState){ digitalWrite(led, HIGH); Serial.println(" Led ON "); timestamp = millis(); }else{ digitalWrite(led, LOW); Serial.println(" Led OFF "); timestamp=millis(); } }Немножко не то, но я уже понял принцип работы millis(), всем огроменное спасибо - кто помогал.
All, думаю, это честно.
Получил свои 10 серебрянников?
JollyBiber, ждёмс
Шо, юаня нэма?
#define timelimit (60000) int led = 10; int val; unsigned long timestamp=millis(); void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { if (Serial.available()) { val = Serial.read(); if (val == 'H') { digitalWrite(led, HIGH); Serial.println(" Led ON "); } if (val == 'L') { digitalWrite(led, LOW); Serial.println(" Led OFF "); } } if(millis()-timestamp>=timelimit){ digitalWrite(led, LOW); Serial.println(" Led OFF "); } }Я хочу COG 1602 экран. Пожалуйте 18 юаней на QIWI +79145891987. Это в российских рублях около пары сотен.
All, думаю, это честно.
Насчет юаней это шутка или серьезно?
А почему бы и несерьезно? Пост №6