// TestPrj.
// Quelle https://forum.arduino.cc/t/time-out-function/535983
#define TIMEOUT 10000 //set for 10 seconds
//initalize sensor, motor, and button pins. set button state to 0. call timer:
const int NoVial = 2;
const int Home = 3;
const int ENC = 6;
const int motorFWD = 10;
const int motorRWD = 11;
const int FWDbutton = 4;
const int RWDbutton = 5;
int button1State = 0;
int button2State = 0;
int ENC_State = 0;
int ENC_lastState = 0;
volatile unsigned long duration = 0;
void setup() {
Serial.begin(9600);
// set pin I/O options. tactile buttons go low when pushed.
pinMode(Home, INPUT_PULLUP);
pinMode(NoVial, INPUT_PULLUP);
pinMode(ENC, INPUT_PULLUP);
pinMode(motorFWD, OUTPUT);
pinMode(motorRWD, OUTPUT);
pinMode(FWDbutton, INPUT_PULLUP);
pinMode(RWDbutton, INPUT_PULLUP);
do
{
digitalWrite(motorFWD, LOW);
digitalWrite(motorRWD, HIGH);
} while (digitalRead(Home) == HIGH);
delay(1000);
Serial.println("Home Pos.");
}
void loop() {
//setting motor direction based on button pushes
//motor stops when it either a sensor sees a magnet, or encoder times out
button1State = digitalRead(FWDbutton);
button2State = digitalRead(RWDbutton);
// duration = pulseIn(ENC, HIGH);
duration = random(0,20000);
Serial.print((int)duration);
Serial.print((int)TIMEOUT);
Serial.println("");
if (duration < TIMEOUT) {
if (button1State == LOW) {
do {
digitalWrite(motorFWD, HIGH);
digitalWrite(motorRWD, LOW);
} while (digitalRead(NoVial) == HIGH);
} else {
digitalWrite(motorFWD, LOW);
digitalWrite(motorRWD, LOW);
}
if (button2State == LOW) {
do {
digitalWrite(motorFWD, LOW);
digitalWrite(motorRWD, HIGH);
} while (digitalRead(Home) == HIGH);
} else {
digitalWrite(motorFWD, LOW);
digitalWrite(motorRWD, LOW);
}
} else {
digitalWrite(motorFWD, LOW);
digitalWrite(motorRWD, LOW);
Serial.println("Timeout!");
}
}