Кнопка светодиод
- Войдите на сайт для отправки комментариев
ВСЕМ ПРИВЕТ!!!
нужнана небольшая помощь в доработке )))
каждый светодиод включается своей кнопкой и зажигается только тогда когда другой не горит
вопрос: как сделать чтобы при включении одного светодиода, второй гас. т е горит один, не дожидаясь пока он потухнет включаем второй, а тот тухнет.
очень надо)) помогите пожалуйста
зарание спасибо
const int
button1Pin = 2;
const int button2Pin = 3;
const int led1Pin = 8;
const int led2Pin = 7;
void setup()
{
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button1Pin,INPUT);
pinMode(button2Pin,INPUT);
}
void loop()
{
if
(digitalRead(button1Pin) == HIGH)
{
digitalWrite(led1Pin,HIGH);
delay(3000);
digitalWrite(led1Pin,LOW);
}
if(digitalRead(button2Pin) == HIGH)
{
digitalWrite(led2Pin,HIGH);
delay(3000);
digitalWrite(led2Pin,LOW);
}
}
А если не вмешиваться в процесс ... так и должно остаться? Загараются при нажатии кнопки на 3 секунды.
Попробуй решить заменой Delay на millis.
Я так думаю ... Модератор переместит эту тему в другой раздел форума.
блин все уже облазил и примеры смотрел и уроки смотрел
целый день уже со вчерашнего вечера, хотя для познания ардуино это мгновение )))
но я ни как не могу грамотно заменить на millis
может хоть наведёте на мыслю )
а то как то и не удобно людей отлекать и просить о большем )
Тута посмотрите - может навеит чего. Ругани там много, но и здравые мысли есть.
Или тут https://www.youtube.com/watch?v=Ik7SwQ477mA&index=7&list=PLgAbBhxTglwmVxDDC5TSYUI91oZ0LZQMw
Причина в том, что delay вешает работу основного цикла на время указанное в нем и в этот промежуток времени ардуинка тупо отдыхает, ни чего не опрашивает, ни чего не меняет и т.п. Если вы хотите что бы контроль нажатия кнопок был постоянно - delay использовать не вариант... Для меня самый понятный пример по использованнию millis опубликован на главной странице http://arduino.ru/Reference а именно "Мигаем светодиодом без delay" - почитайте, код придется переписать, но за то получите, то что хотели...
Пацаны, вы крассавчики, с этим не поспоришь
я написал с помощью millis и всё получилось опупенно, слов нет, даже жену разбудил на радости, но не об этом
позже я понял что можно было использовать функцию switch/case но узнал поздно, да и изучать это поку не к чему
вот мой текст с millis
тут все работает как мне надо за одним исключением
Вот смотрите: я нажал тактовую кнопку и загорелся светодиод на 3 сек. и погас, если держу три сек. и отпускаю то он горит три сек. т. е. в сумме 6 сек. (с этим думаю понятно), а мне для идеальности надо реализовать так: не важно, нажал я кнопку один раз или держу её минуту, светодиод должен гореть три секунды и потухнуть даже если я кнопку не отпутил
я изучил команды ардуино и не нашел ни чего подходящего
Такое вообще вариант реализовать?
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
тысяча извинений и все разные )))
Например: cтрока 25 инструктирует засекать момент включения каждый проход loop(), при котором будет обнаружено активное состояние кнопки. Надо же сделать так, чтобы этот момент засекался один раз. Применяйте флажок button1NotPressed по аналогии с led1On.
Только учтите, что возвращать его состояние нужно тогда, когда кнопка перешла обратно в LOW. Т.е. добавить ещё по одному if()-у на кнопку.
нажал я кнопку один раз или держу её минуту, светодиод должен гореть три секунды и потухнуть даже если я кнопку не отпутил
В таком случае вам нужно отслеживать фронт изменения уровня на входе ;-) это направление для действия...
бошка уже устала, если можно немножко подробней, если я добовлю по одному if() на каждую кнопку
так, че то при дописании дополнительного if() ругаться начинает
я получается на каждую кнопку после 30 и 37 строки
или туплю ?
я изучил команды ардуино и не нашел ни чего подходящего
Основное здесь - логика: Вам нужно, чтобы действие (отсчет времени) запускалось не по состоянию кнопки, а по его изменению.
Другими словами: на каждом пргоходе запоминаете состояние кнопки, а на следующем проходе сравниваете с новым. Если изменилось с "ненажато" на "нажато", - запускаете отсчет времени.
Ну вот как бы моя логика, на железе не проверял, но кажется должна работать адекватно )))