Serial соединение и blink
- Войдите на сайт для отправки комментариев
Ср, 30/05/2012 - 16:30
Кто подскажет? Требуется зажигать светодиод (три состояния: светится/не светится и мигает) через ком-порт. Не пойму с do..while, какое условие должно быть?
int led_pin=11;
int value=0;
void led_mix() //функция мигания св.диода
{
do
{
digitalWrite(led_pin, HIGH);
delay(200);
digitalWrite(led_pin, LOW);
delay(200);
}
while (какое условие здесь должно быть???);
}
void setup()
{
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
}
void loop()
{
value=Serial.read();
switch (value)
{
case 'H': digitalWrite(led_pin, HIGH); break;
case 'L': digitalWrite(led_pin, LOW); break;
case 'M': led_mix(); break;
}
}
Для того, что бы не насиловать сериал-соединение - не читать пустой буфер нужно использовать Serial.available() и тогда для мигания вы сможете ислользовать основной цикл:
int led_pin=11; int value=0; void led_mix() //функция мигания св.диода { digitalWrite(led_pin, HIGH); delay(200); digitalWrite(led_pin, LOW); delay(200); } void setup() { Serial.begin(9600); pinMode(led_pin, OUTPUT); } void loop() { if(Serial.available()){ delay(2); value=Serial.read(); } switch (value) { case 'H': digitalWrite(led_pin, HIGH); break; case 'L': digitalWrite(led_pin, LOW); break; case 'M': led_mix(); break; } }но можно пойти и по вашему пути - цикл пока буфер пуст:
int led_pin=11; int value=0; void led_mix() //функция мигания св.диода { do { digitalWrite(led_pin, HIGH); delay(200); digitalWrite(led_pin, LOW); delay(200); } while (!Serial.available()); } void setup() { Serial.begin(9600); pinMode(led_pin, OUTPUT); } void loop() { value=Serial.read(); switch (value) { case 'H': digitalWrite(led_pin, HIGH); break; case 'L': digitalWrite(led_pin, LOW); break; case 'M': led_mix(); break; } }Или все вместе
int led_pin=11; int value=0; void led_mix() //функция мигания св.диода { do { digitalWrite(led_pin, HIGH); delay(200); digitalWrite(led_pin, LOW); delay(200); } while (!Serial.available()); } void setup() { Serial.begin(9600); pinMode(led_pin, OUTPUT); } void loop() { if(Serial.available()){ delay(2); value=Serial.read(); switch (value) { case 'H': digitalWrite(led_pin, HIGH); break; case 'L': digitalWrite(led_pin, LOW); break; case 'M': led_mix(); break; } } }где-то ошибка, светодиод после посыла "М" моргает один раз и гаснет... Во всех скетчах.
странно, проверил на putty всё работает, а через ардуино иде не работает) тема закрыта, maksim спасибо