#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
unsigned long TimerUp; //UP arrow on the remote
boolean TimerUpFlag = false;
unsigned long dummy;
unsigned long * TimerPtr = &dummy; //pointer to the current timer
int speedSetting = 0;
int speedSettingLeft = 0;
int speedSettingRight = 0;
const byte leftWheel = 9; //turns on as long as the UP button is pressed
const byte rightWheel = 10;
const byte reverseRightWheel = 8;
const byte reverseLeftWheel = 7;
const byte leftBrake = 6;
const byte rightBrake = 5;
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
pinMode(leftWheel, OUTPUT);
pinMode(rightWheel, OUTPUT);
pinMode(reverseRightWheel, OUTPUT);
pinMode(reverseLeftWheel, OUTPUT);
pinMode(leftBrake, OUTPUT);
pinMode(rightBrake, OUTPUT);
}
void loop() {
if (speedSetting > 14) {
Serial.println(speedSetting);
speedSettingLeft = speedSetting - 14;
speedSettingRight = speedSetting - 14;
}
if (mySwitch.available()) {
processButton();
mySwitch.resetAvailable();
}
if (TimerUpFlag && millis() - TimerUp >= 250ul)
{
TimerUpFlag = false; //disable timing
TimerPtr = &dummy; //pointer to dummy timer
digitalWrite(leftWheel, LOW);
digitalWrite(rightWheel, LOW);
digitalWrite(reverseRightWheel, LOW);
digitalWrite(reverseLeftWheel, LOW);
digitalWrite(leftBrake, LOW);
digitalWrite(rightBrake, LOW);
}
}
void processButton()
{
switch (mySwitch.getReceivedValue())
{
//**********************
case 12188945:
Serial.println("BACK");
TimerPtr = &TimerUp; //point to this timer
//TimerUpFlag = true; //enable timing
digitalWrite(reverseRightWheel, HIGH);
digitalWrite(reverseLeftWheel, HIGH);
analogWrite(leftWheel, speedSetting);
analogWrite(rightWheel, speedSetting);
TimerUp = millis();
break;
case 12188939:
Serial.println("FWD");
TimerPtr = &TimerUp; //point to this timer
//TimerUpFlag = true; //enable timing
analogWrite(leftWheel, speedSetting);
analogWrite(rightWheel, speedSetting);
TimerUp = millis();
break;
case 12188941:
Serial.println("LEFT");
TimerPtr = &TimerUp; //point to this timer
TimerUpFlag = true; //enable timing
analogWrite(leftWheel, speedSettingLeft);
analogWrite(rightWheel, speedSetting);
TimerUp = millis();
break;
case 12188943:
Serial.println("RIGHT");
TimerPtr = &TimerUp; //point to this timer
TimerUpFlag = true; //enable timing
analogWrite(leftWheel, speedSetting);
analogWrite(rightWheel, speedSettingRight);
TimerUp = millis();
break;
/*******************SPEED SETTINGS********************/
case 12188935:
Serial.println("SPEED 100");
speedSetting = 60;
TimerUp = millis();
break;
//**********************
case 12188936:
Serial.println("SPEED 50");
speedSetting = 40;
TimerUp = millis();
break;
//**********************
case 12188937:
Serial.println("SPEED 25");
speedSetting = 15;
TimerUp = millis();
break;
//**********************
/* case 0xFF30CF:
Serial.println("SPEED 4");
TimerPtr = &TimerUp; //point to this timer
TimerUpFlag = true; //enable timing
speedSetting = 55;
TimerUp = millis();
break;
//**********************
case 0xFF18E7:
Serial.println("SPEED 5");
TimerPtr = &TimerUp; //point to this timer
TimerUpFlag = true; //enable timing
speedSetting = 70;
TimerUp = millis();
break;
*/
//**********************BRAKE/STOP*********************
case 12188929:
Serial.println("BRAKE");
TimerPtr = &TimerUp; //point to this timer
TimerUpFlag = true; //enable timing
digitalWrite(leftBrake, HIGH);
digitalWrite(rightBrake, HIGH);
TimerUp = millis();
break;
}
}