int In1 = 7;
int In2 = 8;
int ENA = 5;
int SPEED = 255;
int In3 = 4;
int In4 = 6;
int ENB = 2;
int In5 = 10;
int In6 = 9;
int ENA2 = 11;
const int buttonPin = 3;
int stop = 0;
unsigned long myDebugPrintTimer = 0; // Timer-variables MUST be of type unsigned long
const byte OnBoard_LED = 13;
void setup() {
// if you want to use serial printning
// you have to do a call to function Serial.begin(baudrate);
Serial.begin(115200);
Serial.println("Setup-Start");
pinMode(In1, OUTPUT);
pinMode(In2, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(In3, OUTPUT);
pinMode(In4, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(In5, OUTPUT);
pinMode(In6, OUTPUT);
pinMode(ENA2, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
oncePerSecondPrintDebugInfo();
if (digitalRead(buttonPin) == LOW ) {
// Button was pressed
// Start the code sequence
Serial.println("Button pressed. Running code...");
digitalWrite(In1, HIGH);
digitalWrite(In2, LOW);
Serial.println("A Motor1 Right");
delay(1000);
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
Serial.println("B Motor1 Stop");
delay(2000);
digitalWrite(In1, LOW);
digitalWrite(In2, HIGH);
Serial.println("C Motor1 Left");
delay(1000);
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
Serial.println("D Motor1 Stop");
delay(2000);
analogWrite(ENA, SPEED);
digitalWrite(In3, HIGH);
digitalWrite(In4, LOW);
Serial.println("E Motor2 Right");
delay(1000);
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
digitalWrite(In3, LOW);
digitalWrite(In4, HIGH);
Serial.println("F Motor2 Left");
delay(1000);
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
Serial.println("G Motor2 Stop");
delay(2000);
analogWrite(ENB, SPEED);
digitalWrite(In5, HIGH);
digitalWrite(In6, LOW);
Serial.println("H Motor3 Right");
delay(1000);
digitalWrite(In5, LOW);
digitalWrite(In6, LOW);
Serial.println("I Motor3 Stop");
delay(2000);
digitalWrite(In5, LOW);
digitalWrite(In6, HIGH);
Serial.println("J Motor3 Left");
delay(1000);
digitalWrite(In5, LOW);
digitalWrite(In6, LOW);
Serial.println("K Motor3 Stop");
delay(2000);
analogWrite(ENA2, SPEED);
Serial.println("Code sequence ended.");
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
digitalWrite(ENA, stop);
digitalWrite(In4, LOW);
digitalWrite(In5, LOW);
digitalWrite(ENB, stop);
digitalWrite(In5, LOW);
digitalWrite(In6, LOW);
analogWrite(ENA2, stop);
}
}
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
static unsigned long MyBlinkTimer;
pinMode(IO_Pin, OUTPUT);
if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
}
}
void oncePerSecondPrintDebugInfo() {
if ( TimePeriodIsOver(myDebugPrintTimer,1000) ) {
Serial.print("IO-Pin No ");
Serial.print(buttonPin);
Serial.print(" has state ");
if (digitalRead(buttonPin) == LOW) {
Serial.print("LOW");
}
else {
Serial.print("HIGH");
}
Serial.println();
}
}