Всем доброго времени суток!
Помогите пожалуйста начинающему в теме Arduino!
С помощью добрых людей создали каркас кода для 3-режимного фонарика. Но работает код как-то по рогульному как по мне
Описание работы кода:
- первое нажатие засвечивает лед на 100% яркость
- второе нажатие засвечивает лед на 50% яркость
- третье нажатие переводит лед в режим мигания SOS
- четвертое нажатие отключает лед
- хотелось бы зациклить выполнение нажатий по кругу
Какие проблемы у меня возникли на Arduino UNO:
- нажимать кнопку нужно специфически немного удерживая чтобы все работало правильно. это ужасно бесит(( немного не так нажмешь и перепрыгивает сработка на второе или третье нажатие кнопки. добавил задержку но все равно это особо не помогает.
в китайском фонарике при кратком нажатии все срабатывает четко. хотелось бы повторить такую логику.
Я так понимаю нужно устранить дребезг кнопки но как прикрутить это все к этому коду пока не пойму)) Строго не судите я этой темой занялся может недели 2 назад. - И самое что мне не понятно. Для того чтобы выключить лед при четвертом нажатии иногда нужно нажимать кнопку несколько раз или вовсе ее удерживать. Всегда срабатывает по разному. очень редко отключается лед и при одном нажатии.
Вместо режима SOS пока поставил вечный цикл мигания лед пока не разберусь с остальной частью кода.
Помогите пожалуйста доработать код правильно. Это мне поможет двигаться далее.
Буду очень благодарен за вашу помощь! Пока не критикуйте я еще очень слаб в коде
Если есть кто из вас кому не лень отвечать на мои вопросы желательно в телеграм то я буду очень вам признателен.
Также установил и Proteus 8 Pro если нужно могу там создать этот фонарик.
Также буду очень благодарен если подскажите на каком ресурсе бесплатном можно править код вдвоем онлайн?
Вот собственно сам код:
int ledPin = 11;
int buttonPin = 8;
int brightness = 255;
int mode = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
if (digitalRead(buttonPin) == HIGH) {
delay(150);
mode = (mode + 1) % 4;
switch (mode) {
case 0:
analogWrite(ledPin, brightness);
break;
case 1:
analogWrite(ledPin, brightness / 2);
delay(150);
break;
case 2:
blinkSOS();
break;
case 3:
analogWrite(ledPin, 0);
break;
}
}
}
void blinkSOS() {
delay(50);
// for (int i = 0; i <= 99999999; i++) {
while (1) { // --- создаем вечно замкнутый цикл
delay(50);
if (digitalRead(buttonPin) == HIGH) {
goto bailout;
// analogWrite(ledPin, 0);
}
else
analogWrite(ledPin, brightness);
delay(300);
analogWrite(ledPin, 255 /3);
delay(300);
analogWrite(ledPin, 0);
delay(300);
}
bailout:
analogWrite(ledPin, 0);
delay(1000);
}