светофор
- Войдите на сайт для отправки комментариев
Втр, 21/10/2014 - 13:16
const int r = 7; const int y = 8; const int g = 9; int time; void setup(){ pinMode(r, OUTPUT); pinMode(y, OUTPUT); pinMode(g, OUTPUT); } void loop(){ int mil = millis(); if(mil - time == 0 ){ digitalWrite(r, HIGH);} if(mil - time == 5000 ){ digitalWrite(y, HIGH);} if(mil - time == 7000 ){ digitalWrite(r, LOW); digitalWrite(y, LOW); digitalWrite(g, HIGH);} if(mil - time == 10000 ){ digitalWrite(g, LOW);} if(mil - time == 10500 ){ digitalWrite(g, HIGH);} if(mil - time == 11000 ){ digitalWrite(g, LOW);} if(mil - time == 11500 ){ digitalWrite(g, HIGH);} if(mil - time == 12000 ){ digitalWrite(g, LOW); digitalWrite(y, HIGH);} if(mil - time == 14000){ digitalWrite(y, LOW); time = mil ;} }
Всем привет. Начинаю изучать arduino, да и программирование вообще. Написал вот такой простенький скетч для модели светофора. Хотелось бы получить оценку от гуру: на правильном ли я пути? Или это можно реализовать как-то попроще, или оптимизировать. Приветствуется любая конструктивная критика.
А если mil будет какое-нибудь неровное значение, например, 968. Код куда попадет? А какое значение будет у time на первой итерации и далее если код не попадет под условие
if
(mil - time == 14000)
millis может проскочить ваши 500 и т.д. точнее в вашем случае не может, но будь программа сложнее, тогда запросто
ОК, буду грызть гранит дальше. Кто-нибудь даст пинка в нужном направлении?
Либо учится на чужих ошибках по книгам и статьям, либо на своих методом тыка. лучше всего конечно комплексный подход
в Вашем конкретном случае достаточно заменить код типа
если а=1 то;
если а=10 то; на код типа
если а<10 то
иначе если а< 20
Как вариант, читайте:
Как вариант, читайте:
Спасибо, помогло
в Вашем конкретном случае достаточно заменить код типа
если а=1 то;
если а=10 то; на код типа
если а<10 то
иначе если а< 20
Сделал, в результате светодиоды переключаются рывками. Ну да ладно... А если вот такой вариант?
Сделал, в результате светодиоды переключаются рывками. Ну да ладно...
Я Вам дал лишь один из вариантов, что же Вы его не проанализировали и не исправили? надо было разобраться почему у Вас рывками переключается. Для общего развития, так сказать. Второй и последующие коды анализировать уже не интересно, работает и ладно, а светофор и на delay() сделать можно.
Цель в-общем то и не светофор, а как раз общее развитие. На delay сделал в первую очередь. В любом случае спасибо за подсказки, сейчас ковыряюсь над вашим вариантом.