Davon ausgehend, das motorSpeed = 0, Motorgeschwindigkeit = null bedeutet, sähe das dann so aus.
Code:
#include <Bounce2.h>
int buttonPin = 13;
int sensorPin1 = A2;
int sensorPin2 = A3;
int sensorValue1 = 0;
int sensorValue2 = 0;
int motorPin1 = 8; // Blue - 28BYJ48 pin 1
int motorPin2 = 9; // Pink - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow - 28BYJ48 pin 3
int motorPin4 = 11; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
int motorSpeed = 0;
int buttonState = 0;
int merker = 0; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop(){
buttonState = digitalRead(buttonPin);
sensorValue1 = analogRead(sensorPin1);
sensorValue2 = analogRead(sensorPin2);
Serial.println(buttonState);
if (buttonState != 0) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
merker = 1;
}
if (sensorValue1 > 512 && sensorValue2 < 512 && merker == 1) <<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
motorSpeed = 1;
counterclockwise();
}
if (sensorValue1 < 512 && sensorValue2 < 512 && merker == 1) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
motorSpeed = 2;
counterclockwise();
}
if (sensorValue1 < 512 && sensorValue2 > 512)
{
motorSpeed = 0;
merker = 0; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
counterclockwise();
}
}
Allerdings muß dann der Taster mindestens solange gedrückt sein wie das Programm für einen Duchlauf braucht um immer sicher erkannt zu werden.
Üblicherweise fragt man Taster mit einem Interrupt ab und setzt in der ISR schon einen Merker dafür das der Taster gedrückt wurde. Wenn beim nächsten Schleifendurchlauf das Programm an die Stelle kommt wo der Taster ausgewertet werden soll wertet man anstelle des Tasters den Merker aus und setzt den selben dann auch zurück.
Das verhindert das man Timingprobleme bekommt wenn die Zykluszeiten mal länger werden wie beim Einsatz von Delay.
Delay befehle kann man auch komplett ersetzen, in dem mann mit micros() den Timer abfragt und in eine Variable schreibt, dann zieht man bei jedem Schleifendurchlauf den gespeicherten Wert vom aktuellen Wert ab und vergleicht das mit einer Variable oder Konstante die den Verzögerungswert enthällt. Bei Überschreiten ist die Zeit um und die Funktion kann beendet werden.
Ist nicht so genau wie Interrupts, aber spart dieselben für wichtigeres.
Der Vorteil von Interrupts und solschen Lösungen ist der, daß das Programm nicht anhält sonder nin der Zeit was anderes machen kann.
Hat man viele Taster, kann man Tasten nehmen die 2xUm oder 2xSchließer sind von allen Tasten wird jeweils ein Schaltkontakt parallel genommen (verodert) und auf einen Interrupt gelegt. Der jeweils andere Kontakt ist dann der Kontakt der in der ISR ausgewertet wird um festzustellen welche Taster betätigt wurde.
Lesezeichen