Не совместимость мини кодов морганием светодиодов.
- Войдите на сайт для отправки комментариев
Чт, 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 строки - там уже все проверено.
Да и почему просто не написать
36digitalWite(Led2, HIGH);37delay(1000);38digitalWrite(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-ая) чем хуже?
Тут я принял за эстетство :)
Хотя проще по новой написать, чем ЭТО править