• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie diodą led - pomoc w pisaniu kodu
#1
Zmodyfikowałem gotowy program do sterowania diodą led za pomocą pilota na podczerwień działa ściemnianie rozjaśnianie ale włączanie i wyłączanie powoduje tylko włączanie diody

Kod:
#include <IRremote.h>
#define irPin 11      //pin Arduino, do którego został podłączony odbiornik IR
IRrecv irrecv(irPin);
decode_results results;

#define diodaPin 5
int jasnosc = 0;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // uruchamia odbiornik podczerwieni

  pinMode(diodaPin, OUTPUT);
  
}

void loop() {
  if (irrecv.decode(&results)) // sprawdza, czy otrzymano sygnał IR
  {
    switch (results.value) {
      case 0x1045A: // rozjaśnianie
        if (jasnosc < 255) {
          jasnosc = jasnosc + 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x45B: //ściemnianie
        if (jasnosc > 5) {
          jasnosc = jasnosc - 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x10454: //wyłączanie
        digitalWrite(diodaPin, LOW);


      case 0x10482: //włączanie
        digitalWrite(diodaPin, HIGH);
    }

    irrecv.resume(); // resetuje czujnik
  }
}
 
Odpowiedź
#2
Kod:
#include <IRremote.h>
#define irPin 11      //pin Arduino, do którego został podłączony odbiornik IR
IRrecv irrecv(irPin);
decode_results results;

#define diodaPin 5
int jasnosc = 0;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // uruchamia odbiornik podczerwieni

  pinMode(diodaPin, OUTPUT);
  
}
bool flag=0;
void loop() {
  if (irrecv.decode(&results)) // sprawdza, czy otrzymano sygnał IR
  {
    switch (results.value) {
      case 0x1045A: // rozjaśnianie
        if (jasnosc < 255) {
          jasnosc = jasnosc + 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x45B: //ściemnianie
        if (jasnosc > 5) {
          jasnosc = jasnosc - 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x10454: //wyłączanie
       flag=!flag;
        digitalWrite(diodaPin, flag);
break;


    }
   delay(800);

    irrecv.resume(); // resetuje czujnik
  }

  
  
}
Tak spróbuj tym samym włączasz i wyłączasz.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Sprawdzę jutro
Dziś trochę poczytałem i naprawiłem program teraz wszystko działa
Kod:
#include <IRremote.h>
#define irPin 11      //pin Arduino, do którego został podłączony odbiornik IR
IRrecv irrecv(irPin);
decode_results results;

#define diodaPin 5
int jasnosc = 0;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // uruchamia odbiornik podczerwieni

  pinMode(diodaPin, OUTPUT);
  digitalWrite(diodaPin, HIGH); // włącza diodę na starcie
}

void loop() {
  if (irrecv.decode(&results)) // sprawdza, czy otrzymano sygnał IR
  {
    switch (results.value) {
      case 0x1045A: // rozjaśnianie ciągłe
        if (jasnosc < 255) {
          jasnosc = jasnosc + 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x45A: // rozjaśnianie skokowe
        if (jasnosc < 255) {
          jasnosc = jasnosc + 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x45B: // ściemnianie płynne
        if (jasnosc > 5) {
          jasnosc = jasnosc - 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x1045B: // ściemnianie skokowe
        if (jasnosc > 5) {
          jasnosc = jasnosc - 5;
        }
        Serial.println(jasnosc);
        analogWrite(diodaPin, jasnosc);
        break;

      case 0x454: // wyłączanie
        digitalWrite(diodaPin, LOW);
        break;

      case 0x10454: // włączanie
        digitalWrite(diodaPin, HIGH);
        break;
    }
    irrecv.resume(); // resetuje czujnik
  }
}
 
Odpowiedź
#4
Kluczem do programu okazało się polecenie break;
 
Odpowiedź
#5
Owidzisz tego nie zauważyłem ze niema.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości