Skip to content

Commit

Permalink
Initial commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
ericbarch committed Sep 12, 2012
1 parent 61c9fa0 commit ec90c04
Showing 1 changed file with 208 additions and 0 deletions.
208 changes: 208 additions & 0 deletions Drive/Drive.pde
@@ -0,0 +1,208 @@
/* Basic Vehicle Drive System v0.2 by Eric Barch */

#include <SoftwareSerial.h>
#include <Servo.h>

//Define LCD Serial Port
#define rxPin 7
#define txPin 2
SoftwareSerial lcdSerial = SoftwareSerial(rxPin, txPin);

//Pin Defines
#define pwm1 9
#define pwm2 10
#define fwdpotpin 0
#define revpotpin 2
#define steerpotpin 4
#define revpin 13
#define brklight 4

//Speed Controller Objects
Servo leftvictor;
Servo rightvictor;

//Drive variables
int leftdrive = 90;
int rightdrive = 90;
int braking = 0;

//POT Variables
int steerpot = 439;
int fwdpot = 490;
int revpot = 105;
int steerlcd = 50;

//POT Calibration Values
int steerpotmin = 185;
int steerpotmax = 805;
int fwdpotmin = 490;
int fwdpotmax = 731;
int revpotmin = 105;
int revpotmax = 340;

void setup()
{
leftvictor.attach(pwm1);
rightvictor.attach(pwm2);

pinMode(revpin, INPUT);
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
pinMode(brklight, OUTPUT);
lcdSerial.begin(9600);
backlightOn();

Serial.begin(9600);
}

void loop()
{
steerpot = analogRead(steerpotpin);
Serial.print("Steer: ");
Serial.print(steerpot);
steerpot = map(steerpot, steerpotmin, steerpotmax, 0, 100);

fwdpot = analogRead(fwdpotpin);
Serial.print(" | Gas: ");
Serial.print(fwdpot);
fwdpot = map(fwdpot, fwdpotmin, fwdpotmax, 0, 100);

revpot = analogRead(revpotpin);
Serial.print(" | Brake: ");
Serial.print(revpot);
revpot = map(revpot, revpotmin, revpotmax, 0, 100);

steerlcd = steerpot;

if (steerpot > 75)
steerpot = 75;
else if (steerpot < 25)
steerpot = 25;

if (steerpot >= 40 && steerpot <= 60)
steerpot = 50;

if (fwdpot <= 5 && digitalRead(revpin) == 0)
{
leftdrive = 90;
rightdrive = 90;
}
else if (digitalRead(revpin) == 0)
{
if (steerpot >= 50) {

leftdrive = 50 * fwdpot;
rightdrive = (100 - steerpot) * fwdpot;
}
else {
rightdrive = 50 * fwdpot;
leftdrive = (0 + steerpot) * fwdpot;
}

leftdrive = map(leftdrive, 0, 5000, 90, 180);
rightdrive = map(rightdrive, 0, 5000, 90, 180);
}
else if (fwdpot <= 5)
{
if (steerpot >= 50) {
leftdrive = 50 * revpot;
rightdrive = (100 - steerpot) * revpot;
}
else {
rightdrive = 50 * revpot;
leftdrive = (0 + steerpot) * revpot;
}

leftdrive = map(leftdrive, 0, 5000, 90, 0);
rightdrive = map(rightdrive, 0, 5000, 90, 0);
}
else
{
leftdrive = 90;
rightdrive = 90;
}

//Braking
if (revpot >= 20 && fwdpot <= 20 && digitalRead(revpin) == 0)
{
leftdrive = 85;
rightdrive = 85;
braking = 1;
digitalWrite(brklight, HIGH);
}
else
{
braking = 0;
digitalWrite(brklight, LOW);
}


leftvictor.write(leftdrive);
rightvictor.write(rightdrive);

Serial.print(" | LDrive: ");
Serial.print(leftdrive);
Serial.print(" | RDrive: ");
Serial.print(rightdrive);
Serial.print("\n");

outputLCDData();
}

void outputLCDData() {
leftdrive = map(leftdrive, 0, 180, -100, 100);
rightdrive = map(rightdrive, 0, 180, -100, 100);

selectLineOne();
lcdSerial.print("**** Go Kart v1 ****");
selectLineTwo();
lcdSerial.print("Left Drive: ");
if (braking == 1)
lcdSerial.print("BRK");
else {
lcdSerial.print(leftdrive);
lcdSerial.print("% ");
}
selectLineThree();
lcdSerial.print("Right Drive: ");
if (braking == 1)
lcdSerial.print("BRK");
else {
lcdSerial.print(rightdrive);
lcdSerial.print("% ");
}
selectLineFour();
lcdSerial.print("Steering: ");
lcdSerial.print(steerlcd);
lcdSerial.print("% ");
}

void selectLineOne() {
lcdSerial.print(0xFE, BYTE); //command flag
lcdSerial.print(128, BYTE); //position
}

void selectLineTwo() {
lcdSerial.print(0xFE, BYTE); //command flag
lcdSerial.print(192, BYTE); //position
}

void selectLineThree() {
lcdSerial.print(0xFE, BYTE); //command flag
lcdSerial.print(148, BYTE); //position
}

void selectLineFour() {
lcdSerial.print(0xFE, BYTE); //command flag
lcdSerial.print(212, BYTE); //position
}

void backlightOn(){
lcdSerial.print(0x7C, BYTE); //command flag for backlight stuff
lcdSerial.print(157, BYTE); //light level.
}

void clearLCD(){
lcdSerial.print(0xFE, BYTE); //command flag
lcdSerial.print(0x01, BYTE); //clear command.
}

0 comments on commit ec90c04

Please sign in to comment.