top of page

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
}

bottom of page