
Board #1: Main Driver
These are the codes for Arduino board that is responsible for motor driver and most computing:
const int pinI1=8;//I1
const int pinI2=11;//I2
const int speedpinA=9;//EA(PWM)to control the motor_1 speed
const int Level_1_Speed = 40;
const int Level_2_Speed = 42;
const int Level_3_Speed = 43;
const int Level_4_Speed = 45;
const int Level_5_Speed = 50;
int token_state = 0;
int digit[10]={B10000000,B11110010,B01001000,B01100000,B00110010,B00100100,B00000100,B11110000,B00000000,B00100000}; // common anode/
int ini_counter = 9;
int i = 0;
void setup()
{
DDRD = B11111110;
PORTD = B01111111;
pinMode(A0, OUTPUT); //These 3 pins are used to transmit signal to other arduino
pinMode(A1, OUTPUT); //lv1:001 ; lv2:010 ; lv3:011 ; lv4:100 ; lv5:101
pinMode(A2, OUTPUT); //A0 MSB ; A2 LSB
pinMode(A3, OUTPUT); //For LED
pinMode(A4, OUTPUT); //A3 MSB ; A4 LSB
// for(int i=0;i<20;i++)
// pinMode(i,OUTPUT); //set to output
pinMode(8,OUTPUT);
pinMode(11,OUTPUT);
pinMode(9,OUTPUT);
pinMode(13,INPUT);//Token switch
}
void loop()
{
PORTD = B01111111;
if(digitalRead(13)== HIGH)
{
token_state = 1;
digitalWrite(A3, LOW);
digitalWrite(A4, HIGH);
}
if(token_state == 1)
{
for(ini_counter = 5; ini_counter>=0; ini_counter-- )
{
PORTD = digit[ini_counter];
delay(1000);
}
token_state = 0;
ini_counter = 0;
digitalWrite(A3, HIGH);
digitalWrite(A4, LOW);
}
if(ini_counter == 0){
Level_1_Clock();
delay(20000);
clean_Output();
delay(500);
Level_2_Clock();
delay(10000);
Level_2_AClock();
delay(10000);
clean_Output();
delay(500);
Level_3_Clock();
delay(10000);
Level_3_AClock();
delay(10000);
clean_Output();
delay(500);
Level_4_Clock();
delay(10000);
Level_4_AClock();
delay(10000);
clean_Output();
delay(500);
Level_5_Clock();
delay(10000);
Level_5_AClock();
delay(10000);
clean_Output();
delay(1000);
ini_counter = 9;
}
}
/*Set the motor1 clockwise and motor2 anticlockwise, with speed 150*/
void Level_1_Clock()
{
analogWrite(speedpinA,Level_1_Speed);
digitalWrite(pinI2,HIGH);
digitalWrite(pinI1,LOW);
PORTD = B11110010;
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
}
void Level_1_AClock()
{
analogWrite(speedpinA,Level_1_Speed);
digitalWrite(pinI2,LOW);
digitalWrite(pinI1,HIGH);
PORTD = B11110010;
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
}
/*Set the motor1 clockwise and motor2 anticlockwise, with speed 100 */
void Level_2_Clock()
{
analogWrite(speedpinA,Level_2_Speed);
digitalWrite(pinI2,HIGH);
digitalWrite(pinI1,LOW);
PORTD = B01001000;
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
}
void Level_2_AClock()
{
analogWrite(speedpinA,Level_2_Speed);
digitalWrite(pinI2,LOW);
digitalWrite(pinI1,HIGH);
PORTD = B01001000;
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
}
void Level_3_Clock()
{
analogWrite(speedpinA,Level_3_Speed);
digitalWrite(pinI2,HIGH);
digitalWrite(pinI1,LOW);
PORTD = B01100000;
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
}
void Level_3_AClock()
{
analogWrite(speedpinA,Level_3_Speed);
digitalWrite(pinI2,LOW);
digitalWrite(pinI1,HIGH);
PORTD = B01100000;
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
}
void Level_4_Clock()
{
analogWrite(speedpinA,Level_4_Speed);
digitalWrite(pinI2,HIGH);
digitalWrite(pinI1,LOW);
PORTD = B00110010;
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
}
void Level_4_AClock()
{
analogWrite(speedpinA,Level_4_Speed);
digitalWrite(pinI2,LOW);
digitalWrite(pinI1,HIGH);
PORTD = B00110010;
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
}
void Level_5_Clock()
{
analogWrite(speedpinA,Level_5_Speed);
digitalWrite(pinI2,HIGH);
digitalWrite(pinI1,LOW);
PORTD = B00100100;
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
}
void Level_5_AClock()
{
analogWrite(speedpinA,Level_5_Speed);
digitalWrite(pinI2,LOW);
digitalWrite(pinI1,HIGH);
PORTD = B00100100;
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
}
/*Stop the motors */
void clean_Output()
{
digitalWrite(speedpinA,LOW);// full PWM 255
}