Hallo Rentner,
ich habe schon zwei funktionierende Taster, die sind auch entprellt. Ich werde den hierfür verwendeten Taster mal unter die Lupe nehmen.
Hier auch noch der ganze Sketch, sorry.
#define enA 9
#define in1 4
#define enB 10
#define in4 7
int Taster1Pin = 8; // Taster1Pin steht für Pin8
int Taster2Pin = 11; // Taster2Pin steht für Pin11
int TasterFreeze = 12; // TasterFreeze steht für Pin12
int FreezeStatus = 0;
int TasterNeu;
int TasterAlt = 1;
int ValMotorRechts = 0;
int ValMotorLinks = 0;
int motorRECHTS = 0;
int motorLINKS = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(Taster1Pin, INPUT); //Pin8 = Eingang
pinMode(Taster2Pin, INPUT); //Pin11 = Eingang
pinMode(TasterFreeze, INPUT); //Pin12 = Eingang
//Timer2 auf 31300Hz (PIN 9 & 10)
TCCR2B = TCCR3B & 0b11111000 | 0x01;
}
void loop() {
int xAxis = analogRead(A0); // lese X-Achse
int yAxis = analogRead(A1); // lese Y-Achse
// Y-Achse beide Motoren vorwärts und rückwärts
if (yAxis < 512) {
// Motor RECHTS rückwärts
digitalWrite(in1, HIGH);
// Motor LINKS rückwärts
digitalWrite(in4, HIGH);
// Konvertierung der abfallenden Y-Achsen-Messwerte für das Rückwärtsfahren von 512 auf 0 in einen Wert von 0 bis 255 für das PWM-Signal zum Erhöhen der Motordrehzahl
motorRECHTS = map(yAxis, 512, 0, 0, 255);
motorLINKS = map(yAxis, 512, 0, 0, 255);
}
else if (yAxis > 512) {
// Motor RECHTS vorwärts
digitalWrite(in1, LOW);
// Motor LINKS vorwärts
digitalWrite(in4, LOW);
// Konvertierung der zunehmenden Y-Achsen-Messwerte für das Vorwärtsfahren von 512 bis 1023 in einen Wert von 0 bis 255 für das PWM-Signal zum Erhöhen der Motordrehzahl
motorRECHTS = map(yAxis, 512, 1023, 0, 255);
motorLINKS = map(yAxis, 512, 1023, 0, 255);
}
// Joystickposition auf Mitte, keine Bewegung
else {
motorRECHTS = 0;
motorLINKS = 0;
}
// X-Achse links- und rechtskurven
if (xAxis > 512) {
// Konvertierung der abnehmenden X-Achsen-Messwerte von 512 bis 0 in steigende Werte von 0 bis 255
int xMapped = map(xAxis, 512, 0, 0, 255);
// Kurve nach links - verringere linke Motorgeschwindigkeit, erhöhe rechte Motorgeschwindigkeit
motorRECHTS = motorRECHTS + xMapped;
motorLINKS = motorLINKS - xMapped;
// Beschränkung auf den Bereich auf 0 bis 255
if (motorRECHTS < 0) {
motorRECHTS = 0;
}
if (motorLINKS > 255) {
motorLINKS = 255;
}
}
if (xAxis < 512) {
// Wandeln der zunehmenden X-Achsen-Messwerte von 512 bis 1023 in Werte von 0 bis 255
int xMapped = map(xAxis, 512, 1023, 0, 255);
// Kurve nach rechts - verringere rechte Motorgeschwindigkeit, erhöhe linke Motorgeschwindigkeit
motorRECHTS = motorRECHTS - xMapped;
motorLINKS = motorLINKS + xMapped;
// Beschränkung auf den Bereich auf 0 bis 255
if (motorRECHTS > 255) {
motorRECHTS = 255;
}
if (motorLINKS < 0) {
motorLINKS = 0;
}
}
// Brummen bei niedrigen Geschwindigkeiten verhindern (an Motoren anpassen FP-Motoren Wert5)
if (motorRECHTS < 5) {
motorRECHTS = 0;
}
if (motorLINKS < 5) {
motorLINKS = 0;
}
analogWrite(enA, motorRECHTS);
analogWrite(enB, motorLINKS);
if (digitalRead(Taster1Pin)==HIGH) {
// Motor RECHTS rückwärts
digitalWrite(in1, HIGH);
// Motor LINKS vorwärts
digitalWrite(in4, LOW);
analogWrite(enA, motorRECHTS=255);
analogWrite(enB, motorLINKS=255);
}
if (digitalRead(Taster2Pin)==HIGH) {
// Motor RECHTS vorwärts
digitalWrite(in1, LOW);
// Motor LINKS rückwärts
digitalWrite(in4, HIGH);
analogWrite(enA, motorRECHTS=255);
analogWrite(enB, motorLINKS=255);
}
TasterNeu = digitalRead(TasterFreeze);
if (TasterAlt == 0 && TasterNeu == 1) {
if (FreezeStatus == 0) {
//delay(50); //richtige STelle für debounce?!
FreezeStatus = 1;
ValMotorRechts = motorRECHTS; //motorRechts = Variable zu Motor bei Joystickverw.
ValMotorLinks = motorLINKS; //motorLinks = Variable zu Motor bei Joystickverw.
analogWrite(enA, ValMotorRechts); //enA Output für Motor rechts
analogWrite(enB, ValMotorLinks); //enB Output für Motor links,
}
else {
FreezeStatus = 0;
ValMotorRechts = 0;
ValMotorRechts = 0;
}
TasterAlt = TasterNeu;
}
}