РЕШЕНО Помогите с кодом!

Тема в разделе "Arduino & Shields", создана пользователем Avage, 11 ноя 2019.

  1. Avage

    Avage Нерд

    Ребят до этого код работал на кнопке т.е. нажал один раз включался первый режим нажал второй раз второй и т.д., но теперь когда подключил пульт шим сигнал почему-то пропал .Подскажите почему?
    Arduino nano 3 digital port.


    #include "IRremote.h"
    IRrecv irrecv(4);
    decode_results results;
    int t=0,i,j=0,x=0;
    void setup() {
    Serial.begin(9600);
    irrecv.enableIRIn();
    digitalWrite(3,OUTPUT);
    }
    int prov(){
    if ( irrecv.decode( &results )) {

    switch(results.value){
    case 0xFF6897:
    t=0;
    break;
    case 0xFF30CF:
    t=1;
    break;
    case 0xFF18E7:
    t=2;
    break;
    case 0xFF7A85:
    t=3;
    break;
    case 0xFF10EF:
    t=4;
    break;
    case 0xFF38C7:
    t=5;
    break;
    case 0xFF5AA5:
    t=6;
    break;
    }

    irrecv.resume();

    }
    return t;

    }
    void loop() {
    int t = prov();
    if(t==0){
    digitalWrite(3,0);
    Serial.println(t);
    delay(25);
    }

    if(t==1){
    for(i=0;i<=255;i++){
    int t = prov();
    Serial.println(t);
    if(t!=1){
    break;
    }
    analogWrite(3,i);
    if(i==255){
    for(i=255;i>=0;i--){
    int t = prov();
    Serial.println(t);
    if(t!=1){
    break;
    }

    analogWrite(3,i);
    }
    }
    }
    }
    if(t==2){
    for(i=0;i<=255;i++){
    int t = prov();
    Serial.println(t);
    if(t!=2){
    break;
    }

    analogWrite(3,i);
    delay(10);
    analogWrite(3,0);
    delay(10);
    if(i==255){
    for(i=255;i>=0;i--){
    int t = prov();
    Serial.println(t);
    if(t!=2){
    break;
    }
    analogWrite(3,i);
    delay(10);
    analogWrite(3,0);
    delay(10);
    }
    }
    }
    }
    if(t==3){
    int t = prov();
    Serial.println(t);
    digitalWrite(3,1);
    delay(15);
    digitalWrite(3,0);
    delay(15);
    }
    if(t==4){
    int t = prov();
    Serial.println(t);
    analogWrite(3,100);
    }
    if(t==5){
    int t = prov();
    Serial.println(t);
    analogWrite(3,170);
    }
    if(t==6){
    int t = prov();
    Serial.println(t);
    analogWrite(3,255);
    }
    }
     
  2. ИгорьК

    ИгорьК Гуру

  3. Avage

    Avage Нерд

    Код (C++):
    #include "IRremote.h"
    IRrecv irrecv(4);
    decode_results results;
    int t=0,i,j=0;
    void setup() {
      Serial.begin(9600);
      irrecv.enableIRIn();
      digitalWrite(3,OUTPUT);
      j=5;
    }
    int prov(){

      if ( irrecv.decode( &results )) { // если данные пришли
         
            switch(results.value){
          case 0xFF6897:
            t=0;
            break;
          case 0xFF30CF:
            t=1;
            break;
          case 0xFF18E7:
            t=2;
            break;
          case 0xFF7A85:
            t=3;
            break;
          case 0xFF10EF:
            t=4;
            break;
          case 0xFF38C7:
            t=5;
            break;
          case 0xFF5AA5:
            t=6;
            break;
        }
       
           irrecv.resume();// принимаем следующую команду

      }
      return t;

    }
    void loop() {
    int t = prov();
      if(t==0){
        digitalWrite(j,0);
        Serial.println(t);
        delay(25);
      }

      if(t==1){
        for(i=0;i<=255;i++){  
           int t = prov();
          Serial.println(t);
          if(t!=1){
             break;
           }
          analogWrite(j,i);
          if(i==255){
            for(i=255;i>=0;i--){
             int t = prov();
              Serial.println(t);
              if(t!=1){
                break;
              }

              analogWrite(j,i);
            }
          }
        }
      }
        if(t==2){
        for(i=0;i<=255;i++){
    int t = prov();
          Serial.println(t);
          if(t!=2){
             break;
           }
         
          analogWrite(j,i);
          delay(10);
          analogWrite(j,0);
          delay(10);
          if(i==255){
            for(i=255;i>=0;i--){
    int t = prov();
              Serial.println(t);
              if(t!=2){
                break;
              }
              analogWrite(j,i);
              delay(10);
              analogWrite(j,0);
              delay(10);
            }
          }
        }
      }
      if(t==3){
    int t = prov();
        Serial.println(t);
        digitalWrite(j,1);
        delay(15);
        digitalWrite(j,0);
        delay(15);
      }
      if(t==4){
    int t = prov();
        Serial.println(t);
        analogWrite(j,100);
      }
      if(t==5){
    int t = prov();
        Serial.println(t);
        analogWrite(j,170);
      }
      if(t==6){
    int t = prov();
        Serial.println(t);
        analogWrite(j,255);
      }
    }
     
     
    Svyatslav нравится это.
  4. Avage

    Avage Нерд

    Ладно все решилось я просто поменял порт 3 на 5
    Странно
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Пипец! В куске кода на 125 строк 11 разных переменных с именем t! Одиннадцать, тваюшдивизию!
     
    Svyatslav, noevile, DetSimen и 3 другим нравится это.
  6. noevile

    noevile Гик

    Экономика должна быть экономной. Даже с переменными :)
     
    Avage нравится это.
  7. как передать код устройству, зная код имитировать сам пульт.?
     
  8. Svyatslav

    Svyatslav Начинающий

    Дело все то, что 3 и 11 порты НЕ ПОДДЕРЖИВАЮТ ИК-приемник!!!
    Вот берите
     
    Avage нравится это.
  9. Svyatslav

    Svyatslav Начинающий

    Практически все библиотеки для ИК приемника и передатчика используют второй аппаратный таймер и изза этого НЕЛЬЗЯ подключать ИК передатчик или приемник к 3 или 11 порту!!!
     
    Avage нравится это.
  10. b707

    b707 Гуру

    бред уже хотя бы потому. что "передатчик и приемник" используют разные механизмы работы.

    в процитированном описании написано. что на 3 и 11 порту не будет работать ШИМ. С работой передатчика и приемника это не связано никак - ШИМ для ИК не нужен
     
    Svyatslav, Avage, arkadyf и ещё 1-му нравится это.
  11. Svyatslav

    Svyatslav Начинающий

    Ну ладно ладно, я похоже слишком сильно преувеличил)))
     
  12. Svyatslav

    Svyatslav Начинающий

    Потверждаю! Вверху жирным показано для тех кто не заметил, где повторяются инты
    P.S. Упс... В виде кода не получилось....