Problem mit IR remote und AnalogWrite

Ich möchte ein mit IR fernsteuerbares Auto bauen, dabei tritt das Problem auf, dass sobald ich ein PWM-Signal auf meine Pins lege, die die Geschwindigkeit der Motoren steuern sollen, der IR-Sensor nur noch den Wert 4294967295 empfängt und somit keine Steuerung mehr möglich ist…, hat vielleicht jemand eine Idee, woran das liegt?

/*
  Version 1.0.122918
  Author: @DK

*/
#include<IRremote.h>                //IR
#define arrow_up 16736925
#define arrow_left 16720605
#define arrow_right 16761405
#define arrow_down 16754775
#define stop 16712445
#define num1 16738455
#define num2 16750695
#define num3 16756815
#define num4 16724175
#define num5 16718055
#define num6 16743045
#define num7 16716015
#define num8 16726215
#define num9 16734885
#define num0 16730805
#define numHa 16732845
#define numSt 16728765




int recv_pin =  12;
IRrecv recv(recv_pin);
decode_results results;
unsigned long beta;


int ENA = 5;    //right wheel
int IN1 = 6;
int IN2 = 7;
byte velright;
int ENB = 11;   //left wheel
int IN3 = 8;
int IN4 = 9;
byte velleft;

int vel[] = {51, 55, 60, 70, 85, 105, 130, 160, 200, 255};


void setup()
{
  pinMode(IN1, OUTPUT); //motors
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  Serial.begin(9600);   //debbug
  recv.enableIRIn();    //IR


}
void loop()
{

  if (recv.decode(&results)){
   Serial.println(results.value, DEC);
   recv.resume();
   beta = results.value;
   velocity(beta);
   drive(beta);
  }

  }

void velocity(long beta) {
if(beta == num1){
  velright = vel[1];
  velleft = vel[1];
  Serial.println("1");
  }
analogWrite(ENA, velright);
analogWrite(ENB, velleft);
 
}
void drive(long beta) {
  if (beta == arrow_up) {          
     forward();
  }
  else if (beta == stop){
   stop_();
    
  }

}


void forward(){
   digitalWrite(IN1, HIGH);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, HIGH);
   Serial.println("forward");
}
void stop_(){
   digitalWrite(IN1, LOW);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, LOW);
   Serial.println("Stop");
  
  
  }

Interrupt Problem?
Benutzt dein IR Gedöns den Interrupt von pwm?

PWM und IRremote benutzen Timer, es darf also nicht derselbe Timer sein. Am einfachsten ist es, andere PWM Ausgänge zu benutzen, das Verlagern der IRremote Bibliothek ist viel umständlicher.

In der aktuellen Version von IRemote ist das oft nur ein Umkommentieren von zwei Zeilen in der boarddefs.h

Gruß Tommy

Nur wirkt sich diese Änderung auch auf alle weiteren Projekte aus

Das kommt darauf an, wo die geänderte Version der Lib liegt.

Gruß Tommy

DrDiettrich:
PWM und IRremote benutzen Timer, es darf also nicht derselbe Timer sein. Am einfachsten ist es, andere PWM Ausgänge zu benutzen, das Verlagern der IRremote Bibliothek ist viel umständlicher.

DrDiettrich:
PWM und IRremote benutzen Timer, es darf also nicht derselbe Timer sein. Am einfachsten ist es, andere PWM Ausgänge zu benutzen, das Verlagern der IRremote Bibliothek ist viel umständlicher.

Ja, das hatte ich mir auch schon überlegt, nur weiß irgendjemand, welche PINs die selben Timer benutzen, ich habe dazu im Internet nichts gefunden

Tommy56:
In der aktuellen Version von IRemote ist das oft nur ein Umkommentieren von zwei Zeilen in der boarddefs.h

Gruß Tommy

Welche Zeilen wären das dann genau?

Gruß David

Zwischen 67 und 157, je nachdem, welchen Arduino Du benutzt.

Gruß Tommy

Edit: Beachte die Einschränkung in #4

Hi

Gegen diese Auswirkungen auf spätere Projekte kann Er ja die so zu benutzenden Libs in den Projekt-Ordner kopieren und im Sketch via “…” einbinden (lokale Lib), statt <…> (globale Lib).

MfG

Darauf hatte ich in #5 ja hingewiesen.

Gruß Tommy

David_Kuhn:
Ja, das hatte ich mir auch schon überlegt, nur weiß irgendjemand, welche PINs die selben Timer benutzen, ich habe dazu im Internet nichts gefunden

Die Pins sind den Timern fest zugeordnet, Details stehen im Datenblatt des Controllers. Bei Arduinos muß man allerdings noch ermitteln, wie die Pins des Controllers den Board-Anschlüssen zugeordnet sind.