Go Down

Topic: Hilfe!! IRremote Library besetzt Pin 3 UND Pin 11 (Read 834 times) previous topic - next topic

2Fast4U

Hi,
ich bin ziemlicher Anfänger was das programmieren mit Arduino angeht und jetzt wollte ich zu meinem bestehenden Projekt noch eine kleine infrarot Ansteuerung hinzufügen.
Nachdem ich aber jetzt alles so umgeschrieben habe das es laufen müsste habe ich bemerkt das mein PWM pin 11 nicht mehr richtig will.
Er macht im Grunde nur noch HIGH und LOW.
Was ziemlich schlecht ist da er Rot bei meinem RGB LED Streifen steuern sollte und die andere PWM Pin auch schon belegt sind. :(
Jetzt hab ich ein bisschen gesucht und entdeck das das anscheinend an der IRremote Library http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
liegt die ich verwende obwohl man zum endfangen nur ein Pin (3 oder 11) braucht, belegt sie beide.
Vieleicht weiss ja jemand von euch wie ich einer PWM Pin wieder bekomm und trotzdem die Libraty behalten kann.

Ach genau ich benutze ein Arduino UNO

THX für eure Hilfe

markbee

PWM ist nichts anderes als HIGH und LOW und das eben mit verschiedenen An- und Aus-Zeiten (Duty cycle) und Werten zwischen 0 (=DauerAus) und 255(= DauerAn). Eine "echte" analoge Ausgabe hat der Arduino Uno nicht.
Also sollte eigtl. auch die PWM-Ansteuerung noch funktionieren.
Zur Not kann man die IR-Signale aber auch händisch mit der Funktion microseconds() und einem delay realisieren.
Das würde dann z.B. so aussehen:

Code: [Select]
int pin = 13;
int freq = 38;

void wait(unsigned int time)
{ unsigned long start = micros();
 while(micros()-start<=time)
}

void high(unsigned int time, int freq, int pinLED)
{ int pause = (1000/freq/2)-4;
 unsigned long start = micros();
 while(micros()-start<=time)
 { digitalWrite(pinLED,HIGH);
   delayMicroseconds(pause);
   digitalWrite(pinLED,LOW);
   delayMicroseconds(pause);
 }
}
void IRCommand(void)
{ high(2000,freq,pin); wait(27830);
 high(390,freq,pin);  wait(1580);
 high(410,freq,pin);  wait(3580);
 high(400,freq,pin);
}

void setup()
{ pinMode(pin, OUTPUT);
}

void loop()
{ IRCommand();
 // delay(5000);
}


Ich würde aber erstmal testen, ob das Problem nicht woanders liegt.
XBee blog: http://lookmanowire.blogspot.com/

2Fast4U

Danke für den vorschlag und das mit dem HIGH und LOW hab ich wohl ein bischen unverständlich geschrieben.
Ich mein nämlich wenn ich analogWrite(RLED,255) schreib ist das Lich voll an bei analogWrite(RLED,150) macht er nicht also voll aus und das nur wenn die Lbrary eingebunden ist sonst geht es.
Und dann noch eine frage zu deinem Code gibt es da nicht Probleme wenn ich noch was anderes im void loop() mach oder ein delay(1000) einfüg.

Go Up