Code für ultraschall sensor mit code für Fernbedienung kombinieren

Hallo Community,

ich würde gerne den Code des Ultraschallsensors mit dem Code der Fernbedienung, die die Motoren steuert, kombinieren. Das Problem ist, der Serielle Monitor kann von den beiden Sensoren nicht gleichzeitig Signale aufnehmen und verändert bei gleichzeitiger Nutzung die Codes der Fernbedienung. Das ist der Code für den Ultraschall, der ohne den anderen Teil des Codes, also dem der Fernbedienung, funktioniert.
`
int trigger=7;
int echo=9;
long dauer=0;
long entfernung=0;

void setup() {
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);

pinMode(A1,OUTPUT);

}

void loop() {
digitalWrite(trigger,LOW);
delay(5);
digitalWrite(trigger,HIGH);
delay(10);
digitalWrite(trigger,LOW);
dauer=pulseIn(echo,HIGH);
entfernung=(dauer/2)*0.03432;
if(entfernung>=500||entfernung<=0)

Serial.println("Kein Messwert");
else
Serial.println(entfernung);
Serial.println("cm");
delay(1000);
if(entfernung==5)
tone (A1,440);
if (entfernung==4)
tone(A1,493);
if (entfernung==3)
tone(A1,523);

if (entfernung==2)
tone(A1,587);

if (entfernung==1)
tone(A1,659);

if (entfernung==0)
tone(A1,698);

else//
if(entfernung>5)
noTone(A1);

}`

Das ist der Code für die Fernbedienung mit Motor

`#include <IRremote.h>
IRrecv IR(3);
int motor1Pin1 = 10; // Pin für Motor 1 Richtung 1
int motor1Pin2 = 11; // Pin für Motor 1 Richtung 2

int motor2Pin1 = 6; // Pin für Motor 2 Richtung 1
int motor2Pin2 = 5; // Pin für Motor 2 Richtung 2

int motorSpeed1 = 150;
int motorSpeed2 = 150;
int echo=9;
int trigger=7;
long dauer=0;
long entfernung=0;

void setup() {
IR.enableIRIn();

Serial.begin(9600);

pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);

pinMode(2,OUTPUT);

pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);

pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);

}
void loop() {

if(IR.decode()){
Serial.println(IR.decodedIRData.decodedRawData,HEX);

 if(IR.decodedIRData.decodedRawData== 0xE916FF00){// Power 0
  // Beide Motoren stoppen
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, LOW);

  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, LOW);
}
 if(IR.decodedIRData.decodedRawData== 0xBF40FF00){ // Vorwärts|>>
  // Beide Motoren vorwärts mit maximaler Geschwindigkeit
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);

  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);}

if(IR.decodedIRData.decodedRawData== 0xBB44FF00){// Rückwärts|<<
  // Beide Motoren rückwärts mit maximaler Geschwindigkeit
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);

  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);}
  
if(IR.decodedIRData.decodedRawData==0xEA15FF00) {// Schneller +
 motorSpeed1 = constrain(motorSpeed1 + 20, 0, 255);

analogWrite(motor1Pin1, motorSpeed1);

analogWrite(motor2Pin1, motorSpeed1);

}
 if(IR.decodedIRData.decodedRawData==0xF807FF00) {// Langsamer-
  // Geschwindigkeit beider Motoren verringern (optional)
 motorSpeed1 = constrain(motorSpeed1 -20, 0, 255);

analogWrite(motor1Pin1, motorSpeed1);

analogWrite(motor2Pin1, motorSpeed1);

}

delay(1500);

IR.resume();
}}`

Der Code ist für ein Schulprojekt und unser Lehrer kann mir leider nicht mehr weiterhelfen ich würde mich sehr über eine Antwort freuen.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben

Wie man dieses Forum benutzt - bitte lesen
(code tags!)


Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Setze den Code bitte in Codetags. Wie das geht, steht hier.

Gruß Tommy

Und warum zeigst du uns nicht deinen Versuch mit beiden Teilen ?
Setze den Sketch gleich richtig rein, den oben auch.
Und was hat dann nicht funktioniert ?


#include <IRremote.h>
IRrecv IR(3);
int motor1Pin1 = 10;  // Pin für Motor 1 Richtung 1
int motor1Pin2 = 11;  // Pin für Motor 1 Richtung 2

int motor2Pin1 = 6;  // Pin für Motor 2 Richtung 1
int motor2Pin2 = 5;  // Pin für Motor 2 Richtung 2


int motorSpeed1 = 150;
int motorSpeed2 = 150;

int trigger=7;
int echo=9;
long dauer=0;
long entfernung=0;

void setup() {
  Serial.begin(9600);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);

  pinMode(A1,OUTPUT);
IR.enableIRIn();
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);

  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
}

void loop() {
 
digitalWrite(trigger,LOW);
delay(5);
digitalWrite(trigger,HIGH);
delay(10);
digitalWrite(trigger,LOW);
dauer=pulseIn(echo,HIGH);
entfernung=(dauer/2)*0.03432;
if(entfernung>=500||entfernung<=0){

Serial.println("Kein Messwert");
}else{
Serial.println(entfernung);
Serial.println("cm");
delay(1000);
if(entfernung==5)
tone (A1,440);
if (entfernung==4)
tone(A1,493);
if (entfernung==3)
tone(A1,523);

if (entfernung==2)
tone(A1,587);

if (entfernung==1)
tone(A1,659);

if (entfernung==0)
tone(A1,698);

else//
if(entfernung>5)
noTone(A1);

}
if (IR.decode()) {
    Serial.println(IR.decodedIRData.decodedRawData, HEX);

    if (IR.decodedIRData.decodedRawData == 0xE916FF00) { // Power 0
      // Beide Motoren stoppen
      digitalWrite(motor1Pin1, LOW);
      digitalWrite(motor1Pin2, LOW);

      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, LOW);
    }
    if (IR.decodedIRData.decodedRawData == 0xBF40FF00) { // Vorwärts
      // Beide Motoren vorwärts mit maximaler Geschwindigkeit
      digitalWrite(motor1Pin1, HIGH);
      digitalWrite(motor1Pin2, LOW);

      digitalWrite(motor2Pin1, HIGH);
      digitalWrite(motor2Pin2, LOW);
    }

    if (IR.decodedIRData.decodedRawData == 0xBB44FF00) { // Rückwärts
      // Beide Motoren rückwärts mit maximaler Geschwindigkeit
      digitalWrite(motor1Pin1, LOW);
      digitalWrite(motor1Pin2, HIGH);

      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, HIGH);
    }

    if (IR.decodedIRData.decodedRawData == 0xEA15FF00) { // Schneller
      motorSpeed1 = constrain(motorSpeed1 + 10, 0, 255);
      motorSpeed2 = constrain(motorSpeed2 + 10, 0, 255);

      analogWrite(motor1Pin1, motorSpeed1);
       analogWrite(motor2Pin1, motorSpeed1);
     
    }
    if (IR.decodedIRData.decodedRawData == 0xF807FF00) { // Langsamer
      // Geschwindigkeit beider Motoren verringern 
      motorSpeed1 = constrain(motorSpeed1 - 10, 0, 255);
      motorSpeed2 = constrain(motorSpeed2 - 10, 0, 255);

      analogWrite(motor1Pin1, motorSpeed1);
      analogWrite(motor2Pin1, motorSpeed1);
      
    }

    delay(1500);
    IR.resume();
  }}



Das ist unser kombinierter Code das Problem war dann das der Ultraschall sensor funktioniert hat die Fernbedienung aber nicht mehr. Die Codes die die Fernbedienung an den seriellen Monitor gesendet hat haben nicht mehr gestimmt. Einzeln hat sie aber funktioniert.
Schon mal vielen Dank für deine schnelle Antwort!

Eigentlich dürften die beiden sich nicht gegenseitig stören.
Ich tippe mal darauf, dass dein Problem mit den zahlreichen if-Abfragen zusammen hängt.

Baue das mal um auf "switch / case". Die Ton-Ausgaben sowie IR decode.
Und lese IR einmal aus und schreibe es in eine Variable die du dann per Switch auswertest.

Warum macht du das delay vor resume?
Ist es ein Geheimnis, welches Board du benutzt?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.