4wd Code auf 2wd umprogrammieren

Hallo ihr lieben,

aus einem früheren Projekt habe ich noch einen 4wd Code, der auch grundsätzlich auch sehr gut funktioniert. Das einzige Problem was ich habe, etwa es dreht sich ein Rad oder beide entgegengesetzt. Was muss ich ändern, damit es auch für mein 2wd Gefährt nutzbar ist?


#include <SoftwareSerial.h>

SoftwareSerial BlueTooth(8, 9);

#include <Arduino.h>
#include <IRremote.h>
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
long irr_val;
decode_results results;

int in1 = 5;
int in2 = 6;
int in3 = 10;
int in4 = 11;
int speeds = 125;

const int servopin = A3;

int trigPin = A4; 
int echoPin = A5; 
int distance, distance_l, distance_r;

char BLE_val;

void setup() {
  BlueTooth.begin(9600);
  Serial.begin(9600);
    Serial.println("Enabling IRin");
  irrecv.enableIRIn(); 
  Serial.println("Enabled IRin");
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  servopulse(servopin,90);
  delay(300);

  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 

  
}

void loop() {
   if(BlueTooth.available()>0) {
    BLE_val = BlueTooth.read();
    Serial.println(BLE_val);
  } 
    switch(BLE_val)
    {
      case 'F' : car_front(); 
  
      break;
      
      case 'B' : car_back(); 

      break;

      case 'L' : car_left(); 

      break;
     
      case 'R' : car_right();

      break;
     
      case 'S' : car_Stop();

      break;

      case 'a' : speeds_a();

      break;
     
      case 'd' : speeds_d();

      break;

      case  'Y':  avoid();
      break;    
      case  'X':  IRRemote(); 
      break;  
    }
}

void car_back()
{
       analogWrite(in1,125);
       analogWrite(in2,125);
       analogWrite(in3,0);
       analogWrite(in4,0);

}
void car_front()
{
       analogWrite(in1,0);
       analogWrite(in2,125);
       analogWrite(in3,0);
       analogWrite(in4,125);

}
void car_left()
{
       analogWrite(in1,125);
       analogWrite(in2,0);
       analogWrite(in3,0);
       analogWrite(in4,0);
}
void car_right()
{
       analogWrite(in1,0);
       analogWrite(in2,125);
       analogWrite(in3,0);
       analogWrite(in4,0);
     }


void car_Stop()
{
       digitalWrite(in1,LOW);
       digitalWrite(in2,LOW);
       digitalWrite(in3,LOW);
       digitalWrite(in4,LOW);

}

void speeds_a() { 
  while (1) {
    Serial.println(speeds);  
    if (speeds < 255) { 

      speeds++;
      delay(10); 
    }
    BLE_val = BlueTooth.read();
    if (BLE_val == 'S')
    break;
  }
}
void speeds_d() { 
  while (1) {
    Serial.println(speeds);  
    if (speeds > 0) { //down to 0

      speeds--;
      delay(10);    
    }
    BLE_val = BlueTooth.read();
    if (BLE_val == 'S') 
    break;
}
}

int get_distance() {
  int distance = 0;
  digitalWrite(trigPin, LOW);     
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);    
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);    
  distance = pulseIn(echoPin, HIGH) / 58; 
 to the distance (unit: cm)
  Serial.println(distance);       
  return distance;
}



void avoid() {
  int avoid_flag = 1;
  while (avoid_flag) {
    distance = get_distance(); 
    if (distance > 0 && distance < 20) { 
      car_Stop();

      delay(1000);
      servopulse(servopin,160);
      delay(500);
      distance_l = get_distance(); 
      delay(100);
      servopulse(servopin,20); 
      delay(500);
      distance_r = get_distance(); 
      delay(100);
      if (distance_l > distance_r) { 
        car_left();  

        servopulse(servopin,90);
        delay(700);
      } 
      else { 
        car_right();
 
        servopulse(servopin,90);
        delay(700);

      }
    }
    else { 
      car_front();

    }
    BLE_val = BlueTooth.read();
    if (BLE_val == 'S') {
      avoid_flag = 0;
      car_Stop();
    }
  }
}

void IRRemote() {
  if (irrecv.decode(&results)) 
 {
    irr_val = results.value;
    Serial.println(irr_val, HEX);
    switch(irr_val)
    {
      case 0xFF629D : car_back(); 
    
      break;
      
      case 0xFFA857 : car_front(); 

      break;

      case 0xFF22DD : car_left();

      break;
     
      case 0xFFC23D : car_right();

      break;
     
      case 0xFF02FD : car_Stop();

      break;
    }
        irrecv.resume(); 
  }
}

void servopulse(int servopin,int myangle)
{
  for(int i=0; i<30; i++)
  {
    int pulsewidth = (myangle*11)+500;
    digitalWrite(servopin,HIGH);
    delayMicroseconds(pulsewidth);
    digitalWrite(servopin,LOW);
    delay(20-pulsewidth/1000);
  }  
}

Hallo,

2wd = 4wd / 2

Einfach diese Funktionen anpassen.

Warum machst Du denn einen neuen Thread auf?
Haben Dir die Antworten hier:

nicht gepasst?

Ich hatte ein schlechtes Gewissen, weil ich dir natürlich auch nicht die ganze Zeit auf die Nerven gehen möchte.

Mein Problem ist nur, egal wie ich es einstelle, die Räder fahren immer entgegengesetzt. Mein Gedanke war schon, warum am Servo nicht die Polarität umdrehen, dann müssten doch beide in die selbe Richtung fahren, richtig?

Das nennt man debugging: Erstelle dir doch einen ganz einfachen Code, der nur ein Rad ansteuert und damit testest du dann.

Das darfst Du jetzt haben.
Das Ding da oben hast Du halb fertig liegen gelassen und die bisherige Hilfe damit zunichte gemacht.
Mehr noch. Du fängst jetzt neu an - und damit steigen alle anderen auch wieder frisch ein.

Das hatten wir doch in dem anderen Thread doch nicht. Da lief es richtig rum.
Also wäre abschreiben eine Idee.