Ad5206 и управление с ик пульта с помощью ардуино.

Тема в разделе "Arduino & Shields", создана пользователем bichko, 24 янв 2020.

  1. bichko

    bichko Нерд

    Здравствуйте уважаемые форумчане. Прошу прощение за возможно не правильное составление вопроса из за слабого владения программированием, точнее воовсе отсутствуют такие навыки.
    Есть микросхема ad5206 купленная в Китае конечно. Есть Ардуино Uno. Есть таковая задача. Управление всеми шестью переменными сопротивлениями на микросхеме AD5206 c помощью пульта по такой схеме: Нажал на пульте на пример еденичку (выбрал первый канал) добавление или уменьшение сопротивление этого канала происходит на пример кнопка + и - на пульте, далее нажал на пример двоечку на пульте(выбрал второй канал) и вновь добавление или уменьшение сопротивление этого канала происходит все теме же кнопками + и - на пульте.
    В данный момент есть такой код, но он не работает:
    Код (C++):
    #include <SPI.h>
    #include <IRremote.h>

    #define START_VOLUME 124  //стартовое значение громкости
    #define VOLUME_STEP 8  //шаг приращения громкости
    #define VOLP      0xFFA857    //кнопки пульт
    #define VOLM      0xFFE01F   //кнопки пульт
    #define CH1      0xFF30CF    //кнопки пульт канал 1
    int SS_pin = 10;  //SPI Slave Select
    int RECV_PIN = 9; //пин подключения IR приёмника
    IRrecv irrecv(RECV_PIN);
    decode_results results;

    byte volume = START_VOLUME;
    byte volumeOld = 0;
    unsigned long led1OnTime=0; // сам таймер первой кнопки путь это будет кномка гро
    unsigned long led2OnTime=0;
    int timer = 13;

    void setup()
    {
    Serial.begin(9600);
    pinMode(SS_pin, OUTPUT);
    SPI.begin();
    irrecv.enableIRIn();
    pinMode(timer, OUTPUT);
    }

    void setVolume(int reg, int level)
    {
      digitalWrite(SS_pin, LOW);
      SPI.transfer(reg);
      SPI.transfer(level);
      digitalWrite(SS_pin, HIGH);
    }


    void loop() {
    if(irrecv.decode(&results)){
      if (results.value == CH1) //если пришел сигнал с первого канала то....

    led1OnTime=millis(),digitalWrite(timer, HIGH);//запускаем таймер,и включаем таймерПИН //(timer, HIGH);
      //  Продолжительность работы таймера >100 миллисекунд. И ТаймерПИН выключаем //(timer, LOW)
      if(millis() -led1OnTime>6000) digitalWrite(timer, LOW); //,digitalWrite(BL_On_OFF, LOW);
    }

      if (irrecv.decode(&results))
      {
        if (results.value == CH1 && (digitalRead(timer) == HIGH))
        {
       //Serial.print("Key code - ");
       // Serial.println(results.value);
        results.value == VOLP, //Код кнопки (пусть это громкость плюс)
       
          volume = volume + VOLUME_STEP,
          Serial.println(volume);
         
               
        }
        if (results.value == VOLM) //Код 2 кнопки (пусть это громкость минус)
        {
          volume = volume -  VOLUME_STEP;
          Serial.println(volume);
         
        }

        irrecv.resume(); // Получаем следующее значение
      }

      if (volume != volumeOld)
      {
        for (int i = 3; i <= 3; i++)
        {
          setVolume(i, volume);
        }
        volumeOld = volume;
      }

    }

     
     
  2. KindMan

    KindMan Гуру

    Вы сами писали код?
     
    bichko нравится это.
  3. bichko

    bichko Нерд

    Частично. Пытался написать с примеров кое каких на просторах интернета и с советов, что такую задумку не сделать без millis(). Я попытался реализовать, но почему то, в таком коде сигнал с кнопки CH1 не улавливается, на него никак не реагирует ардуино.
     
  4. b707

    b707 Гуру

    bichko, мне жалко вас расстраивать. но код у вас совершенно нерабочий. И даже на конкретную ошибку трудно указать - настолько в нем все бестолково намешано. Например, таймер никогда не устанавливается в LOW, команда VOLP вообще потеряна... Из всего скетча имеет шанс вполнится только команда VOLM . но далеко не каждый раз, когда\ вы ее посылаете
     
    bichko нравится это.
  5. bichko

    bichko Нерд

    Да, я Вас понимаю и к критике абсолютно хорошо отношусь, но позволю заметить, что в первом своем сообщении я написал, что в программировании я совсем не ориентируюсь. Да по примерам я смогу сделать, что б каждой команде была своя кнопка, но это нужно будет задействовать 12 кнопок на пульте, что не удобно и не логично. Ведь реализовано в пультах к примеру телевизора и тп. такое подобное управление . Просто железо уже готово к которому это все будет применено, я не думал что на коде так застряну, и проект стопорнулся((
    digitalWrite(timer, LOW); это светодиод на ардуино на 13 пине, который сигнализирует что таймер запустился, но к сожалению это не происходит, таймер не запускается и да, Вы правы, VOLP совсем не работает, и я не могу понять почему, потому что знаний в этот сегменте нет
     
    Последнее редактирование: 24 янв 2020
  6. parovoZZ

    parovoZZ Гуру

    Значит, надо выучить синтаксис языка Си, чтобы хотя бы разбираться в чужих примерах и понимать заложенный в них алгоритм. Затем изучить особенности исполнения программы внутри микроконтроллера, чтобы самостоятельно составить рабочий алгоритм своей хотелки (любая программа - это алгоритм работы написанный на языке программирования, т.е. алгоритм первичен, код вторичен).
     
    DetSimen нравится это.
  7. DetSimen

    DetSimen Guest

    Мошт, надо сначала светлодиодиком помигать?
     
    parovoZZ нравится это.
  8. bichko

    bichko Нерд

    Можно и помигал. Но делу это не поможет. Я бы рад учится, если бы планировал и далее это развивать. Но есть проект, собственный проект, который потребовал задействовать микроконтроллер для управления цифровыми потенциометрами и реле. По другому, будет куча ручек, кнопок и переключателей, чего бы хотелось избежать.
     
  9. DetSimen

    DetSimen Guest

    Пока ты не пройдешь ступеньку за ступенькой, ничо не выйдет.
     
    parovoZZ нравится это.
  10. bichko

    bichko Нерд

    Если можно уважаемые форумчане писать по делу, послать куда надо и чем помигать я тоже могу. Я никого не заставляю помочь, а прошу по человечески, может кому будет интересно помочь и испытать свои силы в чем то новом. Потому что, что то подобное в интернете и на этом форуме я не нашел к сожалению. Мы все взрослые люди и надеюсь на понимание.
     
  11. parovoZZ

    parovoZZ Гуру

    А я вот что сам не могу сделать, прошу это сделать того, кто может.
     
  12. DetSimen

    DetSimen Guest

    Не хочешь учица, никто не заставляет - повторяй проекты из сети, не отклоняясь ни на йоту. Как только захочешь расширить функционал - велком, б-ть, в наши крепкие абъятья, дух.
     
  13. bichko

    bichko Нерд

    Не могу с Вами не согласится. ТАк к любому делу подходят и мне это очень хорошо известно.
     
  14. parovoZZ

    parovoZZ Гуру

    Так у нас для этого есть раздел «закажу проект». Я всеми своими наработками с удовольствием делюсь, но пультами не занимался.
     
  15. DetSimen

    DetSimen Guest

  16. KindMan

    KindMan Гуру

    Вот в этом и фишка, не нашёл, сделал сам. Но чтобы сделать самому, нужно учиться, но зато потом, когда на руках готовое устройство, и оно ещё и работает, вот тут и наступает… удовлетворение.
    Напишите на бумаге, что нужно делать программе, как вы думаете, и я помогу перевести это в код.
     
    bichko нравится это.
  17. bichko

    bichko Нерд

    Я не прошу написать весь код который мне нужен по управлению всем устройством, остальной код у меня есть. Хотя бы куда и как копать по одному каналу. С обычными физическими кнопками это легче реализовать по примерам, но с ик пультом, к сожалению я не смог.
     
  18. bichko

    bichko Нерд

    Спасибо вам большое, напишу, приложу фото.
     
  19. DetSimen

    DetSimen Guest

    Вангую, в ближайшее время (примерно до мая), не напишешь и не приложишь. IMHO. :)
     
  20. DetSimen

    DetSimen Guest

    Буду рад ашыбица. :)
     
    KindMan нравится это.