Go Down

Topic: Programm läuft nicht wie gewünscht (Anfänger) (Read 1 time) previous topic - next topic

droka

Hiho Zusammen,

Ich hab folgendes Problem.
Ich möchte mit einer Fernbedienung einen Led Streifen einschalten, dieser soll sich dann "andimmen".
Dieses klappt so aber leider nicht.


Ich bräuchte mal bitte einen kleinen Denkanstoß bzw Beispiel.

Besten Dank schonmal.

Hier mal der gekürzte Code

Code: [Select]
#include <TimerOne.h>
#include <IRremote.h>
//--------------Funk----------------------------//
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
// --------------Infrarot------------------------//
const int  IRLed = 2; //IR Led
IRrecv irrecv(IRLed);
decode_results results;

//--------------RGB LED Konstanten-----------//
const int ledr = 5;
const int ledg = 6;
const int ledb = 9;
const int ledweiss= 3;


//------------------Variablen-----------------//

boolean led;
int Helligkeit = 0;
//------------------------------------------//

//------Funktionen---------//

//------------------------LED1AN-----------------------//
void Ledan()                                                                        <Problem---------------------------------------------
{
  if (led == 0)                                                                         
  {
  for (Helligkeit = 0; Helligkeit <= 255; Helligkeit +=5 )                       
        {
           analogWrite(ledweiss, Helligkeit);
           delay(30);
           Serial.println(Helligkeit);
     
        }
  }


 

//--------------------dimmen-----------------------------
void Dimmen()
{
 
 

}
//----------------------LEDAUS-------------------------
void Ledaus()
{
 
}

//------------------------------------------------------
void setup()
{

  Serial.begin(9600);  //Start Serial//
  irrecv.enableIRIn();  //Start IR Reciver//
  mySwitch.enableTransmit(6); // Funk Empfänger start Pin 31//
}
void loop()
//---------Infrarot Eingabe auslesn-----------------//
{
  int result;
  if (irrecv.decode(&results))
  { 
    result = results.value, 0x00ff;     
    Serial.println(results.value, HEX);

    //----------------Funksteckdosen------------------------//
    switch (result)
    {
    case 0x00F2E30C2 :
      dose1();
      break;
    case 0x003A7DB5B8:
      dose2();
      break;
    case 0x0067D88E78:
      dose3();
      break;
    case 0x009328136C:
      dose4();
      break;
      //case 0x00: dose5(); break;
      //case 0x00: dose6(); break;
    case 0x00CE75E914:
      aus();
      break;
      //----LED-----------------------------------

    case 0x00F2E30C4:
      Ledan();                                                       <----------------------läuft nicht wie es soll
      break;
    case 0x002:
      Dimmen();
      break;
    case 0x003:
      Ledaus();
      break;

    }
    irrecv.resume(); // Nexte Eingabe//
  }
}




uwefed

Bitte beschreib Dein Problem genauer. Funktioniert nicht ist etwas sehr allgemein.
Hast Du Kontrollpunkte mit Seriel.print() gesetzt, um die Werte bestimmter Variblen zu kontrollieren?
Was funktioniert nicht? der IR Empfang oder das LED-Ansteuern?

Ich sehe das Problem in der Doppelnutzung der Timer. Diese werden für die PWM benutzt und gleichzeitig für IRremote (Timer2) und TimerOne.h (Timer1). Ich weiß nicht ob RCSwitch.h auch einen Timer benutzt.

Grüße Uwe

droka

Abend und Danke erstmal.

Das Problem sieht wie folgt aus:
Ich drücke auf die Fernbedienung und das Licht sollte langsam heller werden.

Wenn ich aber das Licht an machen will, läuft die for Schleife aber leider ohne den gewünschten Fade in Effekt. Nach Durchlauf der Schleife geht das Licht sofort an.

Laut Serial sieht alles normal aus.
Helligkeit läuft bis 255 hoch und dann geht das Licht erst an.

Eventuell die Funktion anders angehen?

uwefed

Ich nehme mal an Du hast einen Arduino UNO.
Ich sehe das Problem in der Doppelnutzung der Timer. Diese werden für die PWM benutzt und gleichzeitig für IRremote (Timer2) und TimerOne.h (Timer1). Ich weiß nicht ob RCSwitch.h auch einen Timer benutzt.

Grüße Uwe

Go Up