Pages: [1]   Go Down
Author Topic: Hilfe!! IRremote Library besetzt Pin 3 UND Pin 11  (Read 722 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley-sad
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
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: