/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ #define LEFT_F B00001100 #define RIGHT_F B00000011 #define LEFT_B B11000000 #define RIGHT_B B00110000 // Pin 13 has an LED connected on most Arduino boards. // give it a name: const int ledPin = 13; const int lm_i1 = 3; const int lm_i2 = 4; const int lm_e = 9; const int rm_i1 = 5; const int rm_i2 = 6; const int rm_e = 10; //The ping value is the last cmd received by the bluetooth module //If no ping for 300ms: we stop the motors (ex: out of range of the bt transmiter) unsigned long ping; void mdir(byte b){ int h = HIGH/2; if( b & (LEFT_F|LEFT_B) && b & (RIGHT_B | RIGHT_B) ) h = HIGH; digitalWrite(lm_e, b & (LEFT_F | LEFT_B) ? HIGH : LOW); digitalWrite(rm_e, b & (RIGHT_F | RIGHT_B) ? HIGH : LOW); if( b & LEFT_B ){ digitalWrite(lm_i1, LOW); digitalWrite(lm_i2, HIGH); } else { digitalWrite(lm_i1, HIGH); digitalWrite(lm_i2, LOW); } if( b & RIGHT_B ){ digitalWrite(rm_i1, LOW); digitalWrite(rm_i2, HIGH); } else { digitalWrite(rm_i1, HIGH); digitalWrite(rm_i2, LOW); } } void mstop(){ digitalWrite(lm_e, LOW); digitalWrite(rm_e, LOW); led(0); } void led(int on){ digitalWrite(ledPin, on ? HIGH : LOW); } // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(ledPin, OUTPUT); //left motor pinMode(lm_i1, OUTPUT); pinMode(lm_i2, OUTPUT); pinMode(lm_e, OUTPUT); //right motor pinMode(rm_i1, OUTPUT); pinMode(rm_i2, OUTPUT); pinMode(rm_e, OUTPUT); Serial.begin(9600); ping = millis(); } // the loop routine runs over and over again forever: void loop() { while( Serial.available() > 0 ){ byte b = Serial.read(); ping = millis(); led(1); switch(b) { case 0x55: //ping break; default: mdir(b); break; } } if( millis() - ping > 300 ) { led(0); mstop(); } delay(1); }