Изменение скетча, управление по ИК
- Войдите на сайт для отправки комментариев
Здравствуйте, в программировании не силён, точнее полный ноль. В железе и с законом Ома дружу. Есть скетч, почти всё в нём устраивает но скачать и залить слишком просто. Хочу научиться писать их сам. В итоге в данном скетче включается и выключается светодиод при помощи ПДУ от ТВ, так-же двумя другими кнопками регулируется яркость. При отключении питания ардуины и включении её снова, нужно по новой включить светодиот. При включении светодиода он загорается сразу на 100%.
#include <IRremote.h> int bright; int before; int out=9; //connect your LED to pin 9, куда подключен светодиод int steps=9; //dimmer steps, vary those to increase/decrease the steps between full brightness and turned off шаги диммера, измените их, чтобы увеличить / уменьшить шаги между полной яркостью и выключенным int RECV_PIN = 11; //data out of IR receiver connects to pin 11, куда подключен ик приёмник IRrecv irrecv(RECV_PIN); decode_results results; void setup(){ irrecv.enableIRIn(); // start the receiver, включить приёмник before=0; //LED is turned off, Светодиод выключен bright=255; //brightness value is at maximum (255), Максимальная яркость pinMode(out,OUTPUT); } void loop() { if (irrecv.decode(&results)) { if (results.value==0x52E9){ //Code to turn the LED ON/OFF, Код для включения / выключения светодиода if(before==0){ // if the LED was turned off, then we turn it on, если светодиод был выключен, то мы включаем его digitalWrite(out,HIGH); before=1; //LED is now turned on, Светодиод теперь включен } else{ digitalWrite(out,LOW); //if the LED was turned on, then we turn it off, если светодиод был включен, то мы его выключаем before=0; bright=255; }} if (results.value==0x32E9 && before==1){ //Code to decrease the brightness, уменьшение яркости if(bright-255/steps<0){ analogWrite(out,bright); } else{ bright=bright-255/steps; analogWrite(out,bright); }} if (results.value==0x72E9 && before==1){ //Code to increase the brightness,увеличения яркости if(bright+255/steps>255){ analogWrite(out,bright); } else{ bright=bright+255/steps; analogWrite(out,bright); }} irrecv.resume(); }}
Мне охота сделать по возможности плавную регулировку при удержании кнопки, но скорее всего не получиться т.к. использую кнопки телетекста на пульте, а у них сигнал идёт так:
а как понимаю должно быть так: (это сигнал регулировки звука)
Задача такая: Есть четыре кнопки две из них оставляем на регулировку яркости, две другие вкл и выкл нагрузку (реле) каждая свою. Ардуина всегда включена. Кнопка 1 вкл/выкл блок питания лед ленты, кнопка 2 и 3 регулировка яркости этой ленты. Кнопка 4 вкл/выкл второго реле. При подачи питания на ардуину либо блок питания лед ленты чтоб яркость изначально всегда была 50%.
И ещё забыл написать сразу, при включении реле кнопками 1 и 4 нужно вкл с каждым из них дополнительного светодиода (индикация их включения), т.е. нажимаю кнопку 1 сигнал появляется на двух выходах.
Вам наверное сразу программу хочется? Так это не сюда.
А так - посоветовать могу. Для включения БП использовать реле на 5В с контактами на 220В, подключенное к одному из пинов ардуинки. Для управления яркостью ШИМ (аnalogWrite()) и мосфет. Для проверки считанного значения пульта лучше использовать switch, а не if поскольку каждый раз приходит только одно число - зачем его во всех ифах проверять?
Так Вы хотите научится сам, или чтобы мы за Вас сделали?
Если первое, то в разделе "песочница" есть ссылки на литературу, читайте, учитесь. А если второе, то здесь есть платный раздел, там делают.
Так Вы хотите научится сам, или чтобы мы за Вас сделали?
Если первое, то в разделе "песочница" есть ссылки на литературу, читайте, учитесь. А если второе, то здесь есть платный раздел, там делают.
Литературу читаю, но на примере лучше запоминаю. Еслиб сразу мог разобраться и всё получилось то не просил бы помощи.
Вам наверное сразу программу хочется? Так это не сюда.
А так - посоветовать могу. Для включения БП использовать реле на 5В с контактами на 220В, подключенное к одному из пинов ардуинки. Для управления яркостью ШИМ (аnalogWrite()) и мосфет. Для проверки считанного значения пульта лучше использовать switch, а не if поскольку каждый раз приходит только одно число - зачем его во всех ифах проверять?
Да лед лента подключена через мосфет, реле использую твёрдотельные чтоб не щёлкали.
про switch сейчас почитаю.
А зачем читать аналоговое значение??? если у меня управление по сигналу с ИК пульта?
с пультом похоже тоже еще придется разобраться
А зачем читать аналоговое значение??? если у меня управление по сигналу с ИК пульта? А не по аналоговому датчику.
Да лед лента подключена через мосфет, реле использую твёрдотельные чтоб не щёлкали.
про switch сейчас почитаю.
Уважаемый, Вы наверное путаете аnalogWrite() с аnalogRead(), а это 4 большие разницы. Светодиодами в 90% случаев управляют широтно импульсной модуляцией (ШИМ). аnalogWrite() как раз и обеспечивает ШИМ на нескольких выходах ардуинки.
Прошу прощения, перепутал чтение и запись, про другие функции почитал, спасибо за подсказку. Как будет время попробую написать свой скетчь на снове первого с изменёнными if на switch ну и функционал под себя попробую изменить. Проверю на ошибки и жизнеспособность. В случае если не смогу до конца разобраться, можно будет снова обратиться к вам за указанием нужного направления для исправления ошибок?
mykaida, объявлять переменную нужно при помощи define? Или непосредственно swith?
к примеру 4 кнопки
Я правильно понял или нет?
перепутал чтение и запись
С прямым углом? :)))
перепутал чтение и запись
С прямым углом? :)))
Стебаться умеешь вижу, а вот сможеш ли дельный совет дать где и что посмотреть чтоб понять???
"асс" - это не то слово, которое может считаться комплиментом программисту.
"асс" - это не то слово, которое может считаться комплиментом программисту.
Это не наш, это американский. Смотри `ass`.
Ас, который `ace`, пишется в с одной 'c'
перепутал чтение и запись
С прямым углом? :)))
Стебаться умеешь вижу, а вот сможеш ли дельный совет дать где и что посмотреть чтоб понять???
Это не наш, это американский. Смотри `ass`.
Ас, который `ace`, пишется в с одной 'c'
mykaida, объявлять переменную нужно при помощи define? Или непосредственно swith?
к примеру 4 кнопки
Я правильно понял или нет?
С помощью #define переменных не назначают. Это команда предпроцессору обозначить что-то чем-то. Например #define Заяц Волк. Теперь в Вашей программе все зайцы будут заменены на волков.
Переменные объявляются типом и именем.
С switch () Вы правильно поняли, но не забывайте закрывать скобки }. Да и значения, если это числа, надо писать без ковычек.
А, вообще, почитайте про язык си для начинающих. И напишите программу с кнопочками и светодиодиками. К сожалению, Ваш уровень владения языком не позволяет мне объяснить Вам многие очень простые вещи.
Большое спасибо, да знания у меня отсутствуют. Постараюсь почитать, то что рекомендуете. Как прочту вернусь.
mykaida, объявлять переменную нужно при помощи define? Или непосредственно swith?
к примеру 4 кнопки
Я правильно понял или нет?
Правильно будет так:
Или, если верно предположение mykaida,