програмка

Тема в разделе "Arduino & Shields", создана пользователем MegaNoob, 22 авг 2018.

  1. MegaNoob

    MegaNoob Нуб

    Всем привет.
    Кому не впадлу можете помочь.
    Есть два светодиода нужно с пульта включать и выключать каждый (это я понял как сделать), а так же что бы они моргали.
    Не понимаю как сделать цикл в цикле,
    а именно (в моем скетче) почему когда входит в цикл while (внутри него команда irrecv.resume(); прописана) - ардуино перестает работать на прием ик сигнала и соответсвенно после самого первого нажатия на кнопку пульта (0xDA28F020) 1-й светодиод моргает вечно и ардуино больше не реагирует на нажатия.

    Скетч

    Код (C++):
    #include "IRremote.h"
    IRrecv irrecv(2);
    decode_results results;
    int led1=0;
    int led2=0;
    void setup() {
      pinMode(3,OUTPUT);
      pinMode(9,OUTPUT);
      Serial.begin(9600);
      irrecv.enableIRIn();
    }
    void loop() {
      if ( irrecv.decode( &results )) {
        Serial.println(results.value, HEX);
    if (results.value==0xDA28F020
    &&led1==0)
    {;led1=1;results.value=0;
    {while(led1==1)
      {irrecv.resume();
      digitalWrite( 3, HIGH );
      delay(1000);
      digitalWrite( 3, LOW );
      delay(1000);irrecv.resume();
      if (results.value==0xDA28F020
    &&led1==1){
      digitalWrite( 3, LOW );led1=0;results.value=0;
      }}}}

    if (results.value==0xDCB93B93
    &&led2==0){
      digitalWrite( 9, HIGH );led2=1;results.value=0;
    }
    if (results.value==0xDCB93B93
    &&led2==1){
      digitalWrite( 9, LOW );led2=0;results.value=0;
    }
    irrecv.resume();
      }
    }
     
    Последнее редактирование: 22 авг 2018
  2. Airbus

    Airbus Радиохулиган Модератор

    [​IMG]
     
    MegaNoob нравится это.
  3. MegaNoob

    MegaNoob Нуб

  4. Mitrandir

    Mitrandir Гуру

    Из цикла while никогда не выходит.
    Так как led всегда равен 1
     
  5. MegaNoob

    MegaNoob Нуб

    Всем привет, решил не создавать новую тему.
    Схема: 2 светодиода, ик приемник.
    Проблема: очень плохо вкл/выкл светодиоды - надо жать много раз кнопки.
    Пробовал: другой пульт, подключал пин (ик приемника) OUT как с резистором так и без - не помогло.
    Поэтому проблема скорей всего в скетче.







    Код (C++):
    #include "IRremote.h"

    IRrecv irrecv(2); // указываем вывод, к которому подключен приемник

    decode_results results;
    int led1 = 3;
    int led2 = 5;

    int a1 = 0;
    int a2 = 0;

    void setup()
    {
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    Serial.begin(9600); // скорость порта
    irrecv.enableIRIn(); // запускаем прием
    }
    void loop()
    {
      //1 LED
    if (a1 == 0) {
    if ( irrecv.decode( &results )) {
       Serial.println(results.value);
         if (results.value == 0xFFA25D)
         {a1 = 1;}
      irrecv.resume();}}

    if ( irrecv.decode( &results )) {
       Serial.println(results.value);
         if (results.value == 0xFFA25D&&a1 == 1)
         {a1 = 0;}
        irrecv.resume();}

    if (a1 == 1)
        {digitalWrite( led1, HIGH );
        delay(500);
        digitalWrite( led1, LOW );
        delay(500);}
    if  (a1 == 0)
        {digitalWrite( led1, LOW);}

    //2 LED

    if (a2 == 0) {
    if ( irrecv.decode( &results )) {
       Serial.println(results.value);
         if (results.value == 0xFF629D)
         {a2 = 1;}
      irrecv.resume();}}

    if ( irrecv.decode( &results )) {
       Serial.println(results.value);
         if (results.value == 0xFF629D&&a2 == 1)
         {a2 = 0;}
        irrecv.resume();}

    if (a2 == 1)
        {digitalWrite( led2, HIGH );
        delay(50);
        digitalWrite( led2, LOW );
        delay(500);}
    if  (a2 == 0)
        {digitalWrite( led2, LOW);}
       
    }


     
     
  6. b707

    b707 Гуру

    так неудивительно. надо операторы delay() убирать из кода, у вас все время программа проводит в них, а пока исполняется delay() - коды с пульта не принимаются
    Переписывайте код на миллис
     
    MegaNoob нравится это.
  7. NikitOS

    NikitOS Король шутов Администратор

    MegaNoob нравится это.