Помогите с кодом кнопок и плавного включения ламп
- Войдите на сайт для отправки комментариев
Ребята, нужна Ваша помощь, так как в Arduino это моя первая работа, не получается довести код до ума.
Суть работы кода:
при нажатии на кнопку 1(А0) - происходит включение габаритных огней, при повторном нажатии выключение;
при нажатии на кнопку 2 (А1) - происходит включение ближнего света, при повторном нажатии выключение ближнего и включение дальнего света, при третьем нажатии происходит выключение дальнего света.
Индикацию работы выходов вывел через адресную ленту.
Кнопка 3(А2) отвечает за включение пульта управления гидравликой, в этой части вроде все работает.
Что я только не пробовал, не могу заставить лампы плавно включаться и плавно выключаться .....
И чтобы при удержании кнопки 2(А1) происходило выключение ближнего света без включения дальнего.
Буду признателен за помощь.
#include <Adafruit_NeoPixel.h> Adafruit_NeoPixel pixels_1 = Adafruit_NeoPixel(8, 12, NEO_GRB + NEO_KHZ800); int butt_two = 1; // включение ближний - дальний int flag_butt_two = 0; int butt_one = 1; // включение габаритов int flag_butt_one = 0; int butt_three = 1; // включение пульта int flag_butt_three=0; long last_press; #define butt_1 A0; void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12,OUTPUT); pixels_1.begin(); pixels_1.setBrightness(70); pixels_1.setPixelColor(8-1, pixels_1.Color(255,0,0)); } void loop() { // включение ближний - дальний pixels_1.show(); if(digitalRead(A1)==HIGH&&flag_butt_two==0 && millis() - last_press > 200) { butt_two++; flag_butt_two=1; if(butt_two>3){ butt_two=1;} } if(digitalRead(A1)==LOW&&flag_butt_two==1 && millis() - last_press > 200){ flag_butt_two=0; } if(butt_two==1){ digitalWrite(5,LOW); digitalWrite(6,LOW); pixels_1.setPixelColor(2-1, pixels_1.Color(0,0,0)); pixels_1.setPixelColor(3-1, pixels_1.Color(0,0,0)); } if(butt_two==2){ digitalWrite(5,HIGH); digitalWrite(6,LOW); pixels_1.setPixelColor(2-1, pixels_1.Color(9,189,0)); pixels_1.setPixelColor(3-1, pixels_1.Color(0,0,0)); } if(butt_two==3){ digitalWrite(5,LOW); digitalWrite(6,HIGH); pixels_1.setPixelColor(2-1, pixels_1.Color(0,0,0)); pixels_1.setPixelColor(3-1, pixels_1.Color(0,66,255)); } // включение габаритов if(digitalRead(A0)==HIGH&&flag_butt_one==0 && millis() - last_press > 200) { butt_one++; flag_butt_one=1; if(butt_one>2){ butt_one=1; } } if(digitalRead(A0)==LOW&&flag_butt_one==1 && millis() - last_press > 200){ flag_butt_one=0; } if(butt_one==1 && millis() - last_press > 100){ digitalWrite(3,LOW); pixels_1.setPixelColor(1-1, pixels_1.Color(0,0,0)); } if(butt_one==2 && millis() - last_press > 100) { // delay(50); digitalWrite(3,HIGH); pixels_1.setPixelColor(1-1, pixels_1.Color(252,237,0)); } // включение пульта if(digitalRead(A2)==HIGH&&flag_butt_three==0 && millis() - last_press > 200) { delay(50); butt_three++; flag_butt_three=1; if(butt_three>2){ delay(50); butt_three=1; } } if(digitalRead(A2)==LOW&&flag_butt_three==1){ flag_butt_three=0; } if(butt_three==1){ pixels_1.setPixelColor(4-1, pixels_1.Color(0,0,0)); } if(butt_three==2) { delay(50); pixels_1.setPixelColor(4-1, pixels_1.Color(255,0,0)); // настройка пульта if (analogRead(A4) < 150) { if (analogRead(A5) > 500) { if (analogRead(A5) < 600) { digitalWrite(8,HIGH); } } } else { digitalWrite(8,LOW); } if (analogRead(A4) > 900) { if (analogRead(A5) > 500) { if (analogRead(A5) < 600) { digitalWrite(9,HIGH); } } } else { digitalWrite(9,LOW); } if (analogRead(A5) < 150) { if (analogRead(A4) > 450) { if (analogRead(A4) < 550) { digitalWrite(10,HIGH); } } } else { digitalWrite(10,LOW); } if (analogRead(A5) > 900) { if (analogRead(A4) > 450) { if (analogRead(A4) < 550) { digitalWrite(11,HIGH); } } } else { digitalWrite(11,LOW); } } }
Так , а какая часть кода тут должна плавно это делать? Если у вас есть только high и low!
От строчки 39 до 69 включение ближний - дальний и от строчки 70 до 92 включение габаритов
А ваше авто умеет плавно включать/выключать свет? Или что вы имеете в виду под словом "плавно"?
Авто так не умеет пока ))) при включении кнопкой подается питание с плавным нарастанием выходного напряжения до 5В на транзисторный ключ , при плавном открытии транзистора нагрузка, которой будет лампочка, также будет плавно разгораться. При повторном нажатии на кнопку все в обратной последовательности.
и смотрите внимательно что вы делаете с одинокой last_press
Авто так не умеет пока ))) при включении кнопкой подается питание с плавным нарастанием выходного напряжения до 5В на транзисторный ключ , при плавном открытии транзистора нагрузка, которой будет лампочка, также будет плавно разгораться. При повторном нажатии на кнопку все в обратной последовательности.
так, а где функция analogWrite ? у вас есть только вкл и выкл.
Вообще-то это уже нарушение технического регламента, за такое можно нарваться на запрет эксплуатации ;) Да и блажь это, имхо, свет должен включаться быстро, а не задумчиво. От этого зависит ваша безопасность на дороге. Причем, не только лично ваша, но и безопасность для окружающих.
Плавное управление нагрузкой - это ШИМ, читайте даташиты, чтобы понять, на каких пинах оно есть.
Отслеживание длинного/короткого клика - это любая кнопочная библиотека умеет
analogWrite - пока был заменен обратно на digitalWrite, так как нечего кроме мигания ламп и зависания Arduino не удалось, не чего добиться
Кстати, ардуино в авто - это совсем не просто ;) - https://techno-mind.ru/elektronika-i-soft/pitanie-chuvstvitelnoj-elektroniki-ot-bortovoj-seti-legkovogo-avtomobilya.html
Это включение дополнительного освещения на грузовой машине, к включению основного автомобильного света это не имеет отношения.
ШИМ есть на тех выходах к которым подключено управление транзисторными ключами - 3, 5, 6.
analogWrite - пока был заменен обратно на digitalWrite, так как нечего кроме мигания ламп и зависания Arduino не удалось, не чего добиться
так и выложите код с которым проблема. чтоб было понимание где у вас непонимание.
да и вот это (
millis() - last_press > 200)
что делает и чему равноlast_press.?
Вот код который может работать с плавным включением/выключением отдельно, при попытке интегрировать его в мой код, нечего не получается.
Last_press - это пока не совсем удачная попытка избавиться от delay
Функция плавного включения, принимает номер пина, на котором нужно включить лампу
Выключение аналогично
При delay(20) включение/выключение будет занимать примерно 2,5 секунды, думаю, можно сильно уменьшить задержку
Я правильно Вас понял ???
Это бред какой-то ))))))
Только имейте в виду - включение/выключение будет занимать примерно 2,5 секунды, и в это время МК не будет ни на что реагировать. Поэтому задержку лучше уменьшить раз в пять - delay(4);
Это бред какой-то ))))))
это вы про это?
- конечно бред
От строчки 39 до 69 включение ближний - дальний и от строчки 70 до 92 включение габаритов
39-69 можно попробовать так
Fenicksnet, спасибо большое за помощь!
Буду разбираться дальше! Ваш код сработал так как нужно!
По примеру попробую переделать и для строчек кода 70-92.