For my 5th blog posting I will show the code I am using to run the robot and spelling in Braille. This part has been a bit of work but is coming along great. I have run into issues with the motors I have for driving the robot but that will be discussed in my next blog.
Below is the code (so far) for driving the robot. The Braille code hasn't been added in as of yet but the alphabet has been coded.
#include <Servo.h>
Servo myservo;
//Drive Motors
const int MotorR1 = 6; //forward right motor
const int MotorR2 = 7; // backward right motor
const int MotorL1 = 4; // forward left motor
const int MotorL2 = 5; // backward left motor
//Ultrasonic Sensor
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceL;
int distanceF;
int distanceR;
int pos = 0;
void setup() {
//Ultrasonic Sensor
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
//Drive Motors
pinMode(MotorR1, OUTPUT);
pinMode(MotorR2, OUTPUT);
pinMode(MotorL1, OUTPUT);
pinMode(MotorL2, OUTPUT);
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, LOW);
myservo.attach(8);
//Braille
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
int timeA = 200;
int timeB = 300;
int timeC = 500;
}
void loop() {
for (pos = 30; pos <= 90; pos += 1) { //Send servo to start position and turn to face forward
// in steps of 1 degree
myservo.write(pos);
delay(15);
}
//Ping and record distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceF= duration*0.034/2;
for (pos = 90; pos <= 150; pos += 1) { //Turn to far right
// in steps of 1 degree
myservo.write(pos);
delay(15);
}
//Ping and record distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceR= duration*0.034/2;
for (pos = 150; pos >= 90; pos -= 1) { //Return to forward position
myservo.write(pos);
delay(15);
}
//Ping and record distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceF= duration*0.034/2;
for (pos = 90; pos >= 30; pos -= 1) { //Move to far left position
// in steps of 1 degree
myservo.write(pos);
delay(15);
}
//Ping and record distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceL= duration*0.034/2;
//With ping distance information decide how to proceed
if (distanceL <= 600 && distanceL > 400)
{
//Add braille code here with warning
//turn right
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, HIGH);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
delay(500);
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, LOW);
}
if (distanceL <= 400)
{
//Add braille code here with warning
//turn right
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, HIGH);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
delay(750);
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, LOW);
}
if (distanceR <= 600 && distanceR >400)
{
//Add braille code here with warning
//turn left
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, HIGH);
delay(500);
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, LOW);
}
if (distanceR <= 400)
{
//Add braille code here with warning
//turn left
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, HIGH);
delay(750);
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, LOW);
}
if (distanceF >= 800)
{
//go forward
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
delay(2000);
}
if (distanceF < 800 && distanceF > 600)
{
//Add braille code here with warning
//go forward
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
delay(1000);
}
if (distanceF < 599 && distanceF > 300)
{
//Add braille code here with warning
//go forward
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
delay(500);
}
if (distanceF < 300)
{
//Add braille code here with warning
//Stop
digitalWrite(MotorR1, LOW);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorL1, LOW);
digitalWrite(MotorL2, LOW);
delay(1000);
}
}
Below is the code I will be using for the Braille. I still have to decide what the warnings will say before it is added into the above code.
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
int timeA = 200; //delay between on and off
int timeB = 300; //delay between Letters
int timeC = 500; //delay between Words
//A & 1
{
digitalWrite (1, HIGH);
delay(timeA); //delay between on and off
digitalWrite(1, LOW);
}
//B & 2
{
digitalWrite (1, HIGH);
digitalWrite (3, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (3, LOW);
}
//C & 3
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
}
//D & 4
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (11, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (11, LOW);
}
//E & 5
{
digitalWrite (1, HIGH);
digitalWrite (11, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (11, LOW);
}
//F & 6
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (3, LOW);
}
//G & 7
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
}
//H & 8
{
digitalWrite (1, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
}
//I & 9
{
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
delay(timeA); //delay between on and off
digitalWrite (2, LOW);
digitalWrite (3, LOW);
}
//J & 0 (zero)
{
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
delay(timeA); //delay between on and off
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
}
//K
{
digitalWrite (1, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (12, LOW);
}
//L
{
digitalWrite (1, HIGH);
digitalWrite (3, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (3, LOW);
digitalWrite (12, LOW);
}
//M
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (12, LOW);
}
//N
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
}
//O
{
digitalWrite (1, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
}
//P
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (12, LOW);
}
//Q
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
}
//R
{
digitalWrite (1, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
}
//S
{
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (12, LOW);
}
//T
{
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
delay(timeA); //delay between on and off
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
}
//U
{
digitalWrite (1, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
//V
{
digitalWrite (1, HIGH);
digitalWrite (3, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (3, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
//W
{
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (11, LOW);
digitalWrite (13, LOW);
}
//X
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
//Y
{
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (2, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
//Z
{
digitalWrite (1, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (1, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
//.
{
digitalWrite (3, HIGH);
digitalWrite (11, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (3, LOW);
digitalWrite (11, LOW);
digitalWrite (13, LOW);
}
//#
{
digitalWrite (2, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
delay(timeA); //delay between on and off
digitalWrite (2, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
Any questions, comments or ideas is always welcome
Dale Winhold
Top Comments