Изменение скетча, управление по ИК

Mixus
Offline
Зарегистрирован: 13.01.2019

Здравствуйте, в программировании не силён, точнее полный ноль. В железе и с законом Ома дружу. Есть скетч, почти всё в нём устраивает но скачать и залить слишком просто. Хочу научиться писать их сам. В итоге в данном скетче включается и выключается светодиод при помощи ПДУ от ТВ, так-же двумя другими кнопками регулируется яркость. При отключении питания ардуины и включении её снова, нужно по новой включить светодиот. При включении светодиода он загорается сразу на 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%. 

Mixus
Offline
Зарегистрирован: 13.01.2019

И ещё забыл написать сразу, при включении реле кнопками 1 и 4 нужно вкл с каждым из них дополнительного светодиода (индикация их включения), т.е. нажимаю кнопку 1 сигнал появляется на двух выходах.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Вам наверное сразу программу хочется? Так это не сюда.

А так - посоветовать могу. Для включения БП использовать реле на 5В с контактами на 220В, подключенное к одному из пинов ардуинки. Для управления яркостью ШИМ (аnalogWrite()) и мосфет. Для проверки считанного значения пульта лучше использовать switch, а не if поскольку каждый раз приходит только одно число - зачем его во всех ифах проверять?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mixus пишет:
Хочу научиться писать их сам.

Так Вы хотите научится сам, или чтобы мы за Вас сделали?

Если первое, то в разделе "песочница" есть ссылки на литературу, читайте, учитесь. А если второе, то здесь есть платный раздел, там делают.

Mixus
Offline
Зарегистрирован: 13.01.2019

ЕвгенийП пишет:

Mixus пишет:
Хочу научиться писать их сам.

Так Вы хотите научится сам, или чтобы мы за Вас сделали?

Если первое, то в разделе "песочница" есть ссылки на литературу, читайте, учитесь. А если второе, то здесь есть платный раздел, там делают.

Литературу читаю, но на примере лучше запоминаю. Еслиб сразу мог разобраться и всё получилось то не просил бы помощи.

 

Mixus
Offline
Зарегистрирован: 13.01.2019

mykaida пишет:

Вам наверное сразу программу хочется? Так это не сюда.

А так - посоветовать могу. Для включения БП использовать реле на 5В с контактами на 220В, подключенное к одному из пинов ардуинки. Для управления яркостью ШИМ (аnalogWrite()) и мосфет. Для проверки считанного значения пульта лучше использовать switch, а не if поскольку каждый раз приходит только одно число - зачем его во всех ифах проверять?

 

А зачем читать аналоговое значение??? если у меня управление по сигналу с ИК пульта? А не по аналоговому датчику. 

Да лед лента подключена через мосфет, реле использую твёрдотельные чтоб не щёлкали.

про switch сейчас почитаю.

ВН
Offline
Зарегистрирован: 25.02.2016

Mixus пишет:

А зачем читать аналоговое значение??? если у меня управление по сигналу с ИК пульта?

 с пультом похоже тоже еще придется разобраться

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Mixus пишет:

А зачем читать аналоговое значение??? если у меня управление по сигналу с ИК пульта? А не по аналоговому датчику. 

Да лед лента подключена через мосфет, реле использую твёрдотельные чтоб не щёлкали.

про switch сейчас почитаю.

Уважаемый, Вы наверное путаете аnalogWrite() с аnalogRead(), а это 4 большие разницы. Светодиодами в 90% случаев управляют широтно импульсной модуляцией (ШИМ). аnalogWrite() как раз и обеспечивает ШИМ на нескольких выходах ардуинки.

Mixus
Offline
Зарегистрирован: 13.01.2019

Прошу прощения, перепутал чтение и запись, про другие функции почитал, спасибо за подсказку. Как будет время попробую написать свой скетчь на снове первого с изменёнными if на switch ну и функционал под себя попробую изменить. Проверю на ошибки и жизнеспособность. В случае если не смогу до конца разобраться, можно будет снова обратиться к вам за указанием нужного направления для исправления ошибок?

Mixus
Offline
Зарегистрирован: 13.01.2019

mykaida, объявлять переменную нужно при помощи define? Или непосредственно swith?

к примеру 4 кнопки

  switch (inByte) {
    case '1':    
      digitalWrite(1, HIGH);
      break;
    case '2':    
      digitalWrite(2, HIGH);
      break;
    case '3':   
      digitalWrite(3, HIGH);
      break; 
   case '4':   
      digitalWrite(4, HIGH);
      break; 

Я правильно понял или нет?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mixus пишет:

перепутал чтение и запись

С прямым углом? :)))

Mixus
Offline
Зарегистрирован: 13.01.2019

ЕвгенийП пишет:

Mixus пишет:

перепутал чтение и запись

С прямым углом? :)))

чем стебаться лучшеб подсказал, раз такой много знающий в программировании. 

Стебаться умеешь вижу, а вот сможеш ли дельный совет дать где и что посмотреть чтоб понять???

sadman41
Offline
Зарегистрирован: 19.10.2016

"асс" - это не то слово, которое может считаться комплиментом программисту.

Mixus
Offline
Зарегистрирован: 13.01.2019

sadman41 пишет:

"асс" - это не то слово, которое может считаться комплиментом программисту.

Извиняюсь, но я не знаю Вашего сленга.

sadman41
Offline
Зарегистрирован: 19.10.2016

Это не наш, это американский. Смотри `ass`.

Ас, который `ace`, пишется в с одной 'c'

Mixus
Offline
Зарегистрирован: 13.01.2019

Mixus пишет:

ЕвгенийП пишет:

Mixus пишет:

перепутал чтение и запись

С прямым углом? :)))

чем стебаться лучшеб подсказал, раз такой много знающий в программировании. 

Стебаться умеешь вижу, а вот сможеш ли дельный совет дать где и что посмотреть чтоб понять???

похоже что ...........

Mixus
Offline
Зарегистрирован: 13.01.2019

sadman41 пишет:

Это не наш, это американский. Смотри `ass`.

Ас, который `ace`, пишется в с одной 'c'

Ну да, я явно думал о другом)))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mixus пишет:
а вот сможеш ли дельный совет дать где и что посмотреть чтоб понять???
Нет, не смогу. Я уже дал в посте #3 - читать литературу и учиться, дельнее дать не могу, а это, похоже, не подходит. Ну, а как добиться, чтобы человек, не желающий читать и учиться что-то понял - этого я не знаю, так что сорри :(

Mixus
Offline
Зарегистрирован: 13.01.2019

ЕвгенийП пишет:

Mixus пишет:
а вот сможеш ли дельный совет дать где и что посмотреть чтоб понять???
Нет, не смогу. Я уже дал в посте #3 - читать литературу и учиться, дельнее дать не могу, а это, похоже, не подходит. Ну, а как добиться, чтобы человек, не желающий читать и учиться что-то понял - этого я не знаю, так что сорри :(

Я прошу не часть кода или код целиком, а тоько указать что мне нужно прочитать в данном случае вот mykaida сумел ведь подсказать. А ты что ? Так поразвлечся над новичками зашёл?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mixus пишет:
А ты что ?
А что я? Я посоветовал Вам что делать, дал ссылки,что почитать, но Вам мой совет не понравился. Бывает. А вообще, я не понял, у Вас ко мне каки-то претензии? Я Вам что-то должен? Ну, не понравился Вам мой совет читать книги по ссылкам, и что? Мне повеситься? В чём проблема-то?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Mixus пишет:

mykaida, объявлять переменную нужно при помощи define? Или непосредственно swith?

к примеру 4 кнопки

  switch (inByte) {
    case '1':    
      digitalWrite(1, HIGH);
      break;
    case '2':    
      digitalWrite(2, HIGH);
      break;
    case '3':   
      digitalWrite(3, HIGH);
      break; 
   case '4':   
      digitalWrite(4, HIGH);
      break; 

Я правильно понял или нет?

С помощью #define переменных не назначают. Это команда предпроцессору обозначить что-то чем-то. Например #define Заяц Волк. Теперь в Вашей программе все зайцы будут заменены на волков.

Переменные объявляются типом и именем.

С switch () Вы правильно поняли, но не забывайте закрывать скобки }. Да и значения, если это числа, надо писать без ковычек.

А, вообще, почитайте про язык си для начинающих. И напишите программу с кнопочками и светодиодиками. К сожалению, Ваш уровень владения языком не позволяет мне объяснить Вам многие очень простые вещи.

Mixus
Offline
Зарегистрирован: 13.01.2019

Большое спасибо, да знания у меня отсутствуют. Постараюсь почитать, то что рекомендуете. Как прочту вернусь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Mixus пишет:

mykaida, объявлять переменную нужно при помощи define? Или непосредственно swith?

Ни так, ни так.

Цитата:

к примеру 4 кнопки

  switch (inByte) {
    case '1':    
      digitalWrite(1, HIGH);
      break;
    case '2':    
      digitalWrite(2, HIGH);
      break;
    case '3':   
      digitalWrite(3, HIGH);
      break; 
   case '4':   
      digitalWrite(4, HIGH);
      break; 

Я правильно понял или нет?

Нет.

Правильно будет так: 

digitalWrite(inByte - '0', HIGH);

Или, если верно предположение mykaida,

digitalWrite(inByte, HIGH);