86 lines
2.3 KiB
C++
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);
|
|
}
|