From 730248cf9e1f70abaf8035844fdd9aca65022d3b Mon Sep 17 00:00:00 2001 From: Daniele Verducci Date: Sat, 8 Mar 2014 22:45:05 +0000 Subject: [PATCH] Completed README.md, added Arduino Sketch --- ArduinoExplorerbotSketch/explorerbot.ino | 85 ++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 ArduinoExplorerbotSketch/explorerbot.ino diff --git a/ArduinoExplorerbotSketch/explorerbot.ino b/ArduinoExplorerbotSketch/explorerbot.ino new file mode 100644 index 0000000..20985a6 --- /dev/null +++ b/ArduinoExplorerbotSketch/explorerbot.ino @@ -0,0 +1,85 @@ +/* + 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 . +*/ + + +/* + * 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 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); +}