Включение-выключение светодиода одной и той же кнопкой без фиксации.
- Войдите на сайт для отправки комментариев
Вс, 18/09/2011 - 16:09
Вобщем программить я толком еще не начал даже наверно :-) так, склеиваю куски примеров :-)
Вопрос такой: Ребят, помогите написать скетч по принципу:
есть 2 светодиода. изначальное состояние - LOW.
pin 2,3 пусть будут кнопки.
при нажатии pin2 загорается диод1, при повторном нажатии диод1 гаснет.
с pin3 и диодом2 картина та же. Работать они должны независимо.
Ну и плюс учесть дребезг контактов. Никак немогу определиться с алгоритмом (точнее просто немогу начать)
Кнопка без фиксации.
Первое что пришло в голову.
Возможно можно и уменьшить код или сделать его более красивым.
Если так то напишите. И мне интересно!
Взяли готовый код из соседней ветки, малость его перелопатили, взяли отдельно 2 кнопки на подтягивающих резисторах и вместо светодиодов взяли пару реле. Ну не суть :-)
int i = 0;
int k = 0;
int val = 0;
int k1 = 0;
int val1 = 0;
int state = 0;
int old_val = 0;
int state1 = 0;
int old_val1 = 0;
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(6, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
}
void loop(){
//digitalWrite(13, HIGH);
val = digitalRead(7);
val1 = digitalRead(8);
if ((val == HIGH) && (old_val == LOW)){
state = 1 - state;
k++;
delay(10);
}
if ((val1 == HIGH) && (old_val1 == LOW)){
state1 = 1 - state1;
k1++;
delay(10);
}
old_val = val; // val is now old, let's store it
old_val1 = val1; // val is now old, let's store it
if (state == 1) {
digitalWrite(6, HIGH); // turn LED ON
} else {
digitalWrite(6, LOW);
}
if (state1 == 1) {
digitalWrite(6, HIGH); // turn LED ON
} else {
digitalWrite(6, LOW);
}
//здесь все выполняеться корректно
switch (k) {
case 0:
digitalWrite(10, LOW);
break;
case 1:
digitalWrite(10, HIGH);
break;
delay(50);
digitalWrite(10, LOW);
break;
default:
k=0;
break;
}
switch (k1) {
case 0:
digitalWrite(9, LOW);
break;
case 1:
digitalWrite(9, HIGH);
break;
delay(50);
digitalWrite(9, LOW);
break;
default:
k1=0;
break;
}
// все бы хорошо.. но когда выполняеться 1 раз, все шикарно. Но когда по второму кругу идет то не смотря на то что в case 0 все пины выключены. горит аналогично case 1. case 2 выполняесться уже нормально.
// Serial.print("Knopka1= " );
// Serial.print(k);
// Serial.println("");
// Serial.print("Knopka2= " );
// Serial.print(k1);
// Serial.println("");
//digitalWrite(13, LOW);
delay(100);
}
Код еще не допилен, лишнее не убрано, но схема запустилась.
p.s. работали под пивом :-) С Дружбаном на пару )
LEVV2006 Ваш код завтра рассмотрю детально. В данный момент уже моск нехочет думать адекватно :-)
Это что у вас такое ?
Это зачем ?
Вот рабочая программа (на вскидку набросал).
Поймите общие принцыпы , они вам в будещем очень пригодяться.
От модератора: Поправил вывод кода. Пожалуйста пользуйтесь кнопкой вставки кода. Вторая кнопка наверху, рядом с кнопкой Источник. Так же легче читать код.
Пасибо, сейчас обязательно просмотрю этот скетч. именно на примерах и приходится учиться, ибо так понятнее )))
Привольно приму к сведению))))
Модератору. Читать легче а вот копипастить в IDE нет (приходится в ручную удалять номера строк).
Я кое что поправил ... в общем могут быть чисто "орфаграфические" ошибки (из - за невнимательности).
Модератору. Читать легче а вот копипастить в IDE нет (приходится в ручную удалять номера строк).
Если навести курсор на код, то справа на уровне первых строчек возникнет меню из четырех кнопок, вторая кнопка сохраняет весь код в буфер обмена без номеров строчек - очень удобно.
Модератору. Спасибо , не знал.
Вот нашел в стандартных примерах похожий код!!!!
http://witharduino.blogspot.com/2011/12/button-state-change.html
http://www.ladyada.net/learn/arduino/lesson5.html
http://youtu.be/wezPs_jxPQg вот мой принцып отыграл на протеусе работу скейча, одна кнопка и два светодиода , в скейче придусмотрен дребезг кнопки на ложное срабатывание , Порядок такой нажимаем кнопку загорается светодиод 1 и через заданное время он гаснет, нажимаем ещё раз - загорается второй светодио и гаснет через заданное время , всё прекрасно работает
Подскажите молодому, а то в глазах рябит.
К ардуино подключен приемник на 433 Мгц. При нажатии 1 раз кнопки на радиопульте - светодиод загорается. При повторном нажатии -светодиод выключается. Этот скетч имеется, тут я понял. Состояние пина инертируется с каждым нажатием. Так вот, если постоянно удерживать кнопку на радиопульте (приемник принимает код с периодичностью наверно 400-450мс) и светодиод постоянно мигает.
Вопрос, как сделать, что бы хоть при однократном нажатии, хоть при удержании любое время кнопки на радиопульте и последующем отпускании - светодиод загорелся, а при повторном нажатии этой же кнопки на радиопульте (либо удержании с последующим отпусканием) -выключился.
Доброго времмени суток! Подскажите пожалуйста,как написать подобный скетч(управлением 2-х реле от 2-х кнопок... каждая кнопка при одном нажатии включает и отключает одно реле,при этом не машает работе другой паре - реле и кнопка! порядок запуска реле должен быть не зависимым друг от друга).
maks_452 Ну где-то так. Полный скетч здесь https://yadi.sk/d/Kzqip-WK3Eoc7h
Головной файл посмотреть
Загружаю на ардуино пишет ошибка
в чем проблема?
мне нужно чтобы при замкнутой кнопке включялось реле, при разомкнутой отключялось
Кнопку подлючать земля вывод, без резистора.
Спасибо огромное
Ну скорее всего так надо
Ну скорее всего так надо
в предыдущем примере так-же, только у вас короче :) Вот только можно же напрямую с кнопки тогда включить нагрузку, без ардуино.
Как то так, стягивающий резистор на землю, для каждой кнопки свой
Надо задание сделать
шел бы ты отсюда... учиться. Тут тебе не обломится.
Какой ты добрый
Задание может и тебе сделают, но за то ты потом учителю не сдашь. Первый вопрос и посыпишься, как песочный замок. #7
Есть 3 кнопки и 3 диода.условие включения для красного светодиода одновременно включены 1 и 3 тумблер.условия включения желтого светодиода одновременно включен 2 и 3 тумблер.условия включения зеленого светодиода одновременно выключен 1 и 2 тумблер а также включен 3 тумблер..кнопки подключены на плате 8,7,6, а диоды 13,12,11.мне просто не понятно где писать setup или в loop
Код в setup выполняется один раз при старте, а код в loop выполняется постоянно (зациклено). Решай сам, где тебе писать.
Как примерно написать ?
Примерно как в этой теме выше.
Напиши пару строк как писать
Что писать в setup a что в loop
В сетуп пишется инициализация переферии, в луп алгоритм поведения переферии описаной в сетуп.
Все равно не понял
Вам в другой раздел: Ищу исполнителя
15 тыс рублей
boolean flag1=0;
boolean flag2=0;
boolean diod1=0;
boolean diod2=0;
#define knopka1 3
#define knopka2 4
void setup(){
pinMode(knopka1,INPUT_PULLUP);
pinMode(knopka2,INPUT_PULLUP);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
void loop(){
if(knopka1==0&&flag1==0){diod1=!diod1;flag1=1;}
if(knopka1==1){flag1=0;}
digitalWrite(5,diod1);
if(knopka2==0&&flag2==0){diod2=!diod2;flag2=1;}
if(knopka2==1){flag2=0;}
digitalWrite(6,diod2);
}
Kakmyc - и к чему вы это написали?
Во-первых, не соответствует ТЗ, во-вторых - код достаточно бредовый, работать (разумно) не будет.
Идите учитесь дальше.