explorerbot/ArduinoExplorerbotSketch/explorerbot.ino
2014-03-08 22:45:05 +00:00

86 lines
2.3 KiB
C++

/*
Copyright 2014 Daniele Verducci
This file is part of ArduinoExplorerbotSketch.
ArduinoExplorerbotSketch is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ArduinoExplorerbotSketch is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ArduinoExplorerbotSketch. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* PIN
* 7 Steering servo yellow cable
* 3 to H-Bridge ENABLE
* 9 to H-Bridge logic pin 1
* 10 to H-Bridge logic pin 2
*
* SERIAL (9600)
* 2 bits: the first is the steering from 1 to 127,
* the second the acceleration.
*/
const int servoPin = 7;
const int hBridgeEnable = 3;
const int hBridge1pin = 9;
const int hBridge2pin = 10;
#include <Servo.h>
Servo steeringServo;
byte gamepadPosition[2];
void setup(){
steeringServo.attach(servoPin); //steering servo to pin 7
pinMode(hBridgeEnable, OUTPUT);
pinMode(hBridge1pin, OUTPUT);
pinMode(hBridge2pin, OUTPUT);
Serial.begin(9600);
}
void loop(){
if(readGamepadPositionFromSerial()){
steerTo(gamepadPosition[0]);
accelerateTo(gamepadPosition[1]);
}
delay(100);
}
boolean readGamepadPositionFromSerial(){
if(Serial.available()>1){ //Bytes received in pairs
gamepadPosition[0] = Serial.read();
gamepadPosition[1] = Serial.read();
return true;
}
return false;
}
void steerTo(byte steeringByte){
steeringServo.write(steeringByte); //Angles from 0° to 127°
}
void accelerateTo(byte speedByte){
if(speedByte<64){
//Go forward
digitalWrite(hBridge1pin, HIGH);
digitalWrite(hBridge2pin, LOW);
//speedByte = 1/speedByte;
} else {
//Go backward
digitalWrite(hBridge2pin, HIGH);
digitalWrite(hBridge1pin, LOW);
//speedByte = speedByte-64;
}
//analogWrite(hBridgeEnable, speedByte*2);
if(speedByte<32 || speedByte>96) digitalWrite(hBridgeEnable, HIGH);
else digitalWrite(hBridgeEnable, LOW);
}