Не совместимость мини кодов морганием светодиодов.
- Войдите на сайт для отправки комментариев
Чт, 23/08/2018 - 16:40
Добрый день.
Была поставлена задача при долгом удержании кнопки (например 5 сек, в реальности больше) включить Led1 и одновременно моргнуть Led2 - 1 сек. При отпускании кнопки и повторном нажатии все повторяется. Есть два небольших подходящих скетча. Каждый из которых в железе работает нормально. Но при объединении в один, не работает скетч. Не моргают светодиоды.
#define IN1 A2 // Определяем номер вывода к которому подключёна кнопка #define Led1 11 #define Led2 9 int valBut = 0; // Задаем переменную, для счетчика unsigned long PsoTime = 0; // Зададим начальное значение для счетчика unsigned long TimePush = 5000; // Время нажатия на кнопку int Led1Pin = LOW; // устанавливаем начальное состояние светодиода int flag = 0; void setup() { pinMode(IN1, INPUT); pinMode(Led1, OUTPUT); pinMode(Led2, OUTPUT); } void loop() { //---------срабатывание Led1------------------ if (digitalRead(IN1) == LOW) digitalWrite(Led1, LOW); if (digitalRead(IN1) == HIGH) // если кнопка нажата { // if (millis() - PsoTime >= 1) // начинаем считать время нажатия используется как множитель для TimePush { // PsoTime = millis(); // valBut++; // с каждой миллисекундой увеличиваем значение valBut } } else // если кнопку отпустили, то valBut становится равным 0 { // это необходимо для защиты от срабатывания при частых valBut = 0; // многократных нажатиях } if (valBut >= TimePush) // как толькозначение valBut становится равным TimtPush { // digitalWrite(Led1, Led1Pin = ! Led1Pin); // то инвертируем состояние Led1 } //---------срабатывание Led2------------------ if (digitalRead(Led1) == HIGH && flag == 0) { digitalWrite(Led2, !digitalRead(Led2)); flag = 1; } if (digitalRead(Led1) == LOW && flag == 1) { flag = 0; } delay(1000); digitalWrite(Led2, LOW); }
Решил сделать две независимые кнопки. Первая часть Led1 не работает, вторая часть Led2 работает.
Если записать в arduino отдельными частями, каждая отдельно работает. Модуль Arduino Nano.
Если не трудно объясните что за ерунда с несовместимостью частей скетча морганиями светодиодов.
Спасибо.
#define IN1 A2 // Определяем номер вывода к которому подключёна кнопка #define IN2 A3 #define Led1 11 #define Led2 9 int valBut = 0; // Задаем переменную, для счетчика unsigned long PsoTime = 0; // Зададим начальное значение для счетчика unsigned long TimePush = 5000; // Время нажатия на кнопку int Led1Pin = LOW; // устанавливаем начальное состояние светодиода int flag = 0; void setup() { pinMode(IN1, INPUT); pinMode(IN2, INPUT); pinMode(Led1, OUTPUT); pinMode(Led2, OUTPUT); } void loop() { //---------срабатывание Led1------------------ if (digitalRead(IN1) == LOW) digitalWrite(Led1, LOW); if (digitalRead(IN1) == HIGH) // если кнопка нажата { // if (millis() - PsoTime >= 1) // начинаем считать время нажатия { // PsoTime = millis(); valBut++; // с каждой миллисекундой увеличиваем значение valBut } } else // если кнопку отпустили, то valBut становится равным 0 { // это необходимо для защиты от срабатывания при частых valBut = 0; // многократных нажатиях } if (valBut >= TimePush) // как толькозначение valBut становится равным TimtPush { // digitalWrite(Led1, Led1Pin = ! Led1Pin); // то инвертируем состояние Led1 } //---------срабатывание Led2------------------ if (digitalRead(IN2) == HIGH && flag == 0) { digitalWrite(Led2, !digitalRead(Led2)); flag = 1; } if (digitalRead(IN2) == LOW && flag == 1) { flag = 0; } delay(1000); digitalWrite(Led2, LOW); }
Уважаемый, рассмотрим 1 вариант. Начиная со строки 38 - бред. Вам надо мигнуть, так мигайте в if после 35 строки - там уже все проверено.
Да и почему просто не написать
36
digitalWite
(Led2, HIGH);37
delay(1000);
38
digitalWrite(Led2, LOW);
К чему такие сложности?
ПС:#5
Малость ошибся
20 строка: if
(digitalRead(IN1) == LOW) {
digitalWrite(Led1, LOW);
flag=0;
}
и 36 строка:
if(!flag)
digitalWite
(Led2, HIGH);flag=1
и т.д.
Начиная со строки 38 - бред.
Почему только с 38-ой?
А 23-я (в превом коде, вот втором она - 26-ая) чем хуже?
Почему только с 38-ой?
А 23-я (в превом коде, вот втором она - 26-ая) чем хуже?
Тут я принял за эстетство :)
Хотя проще по новой написать, чем ЭТО править