Sunday, July 4, 2010

Re: Report 4 | #4th of July 2010

This is the code that we have used for remote controlling our car with help of Arduino board. We have used a infrared receiver on the car, connected to Analog input of Arudino sending in the Analog signal. We have analysed the way the receiver is giving out feedback signals on the analog input according to the buttons being pressed on the remote control. According to our analysis we have a state machine which sets the state of the program and then a function called "comm" which actually sends the order to the DC motors according to the states.



[code]
int pin_7 = 7;


boolean motorEnable = false;



//OUTPUT PINS
byte IN1M1 = 2;//IN1 Motor1
byte IN2M1 = 4;//IN2 Motor1
byte IN1M2 = 11;//IN1 Motor2
byte IN2M2 = 12;//IN2 Motor2
byte ENM1 = 5;//enable signal Motor1
byte ENM2 = 10;//enable signal Motor2
byte PWMM1 = 3; //PWM Motor1
byte PWMM2 = 9; //PWM Motor2
byte ledPin = 13; // LED connected to digital pin 13

int Value_;
int count[2];
int i = -1;
int old_Value=1;
boolean chk=false;
int order = 0;
int sum = 0;
int stopCounter = 0;

void setup(){

pinMode(pin_7, INPUT);
pinMode(IN1M1, OUTPUT); // MOTOR1 IN1
pinMode(IN2M1, OUTPUT); // MOTOR1 IN2
pinMode(IN1M2, OUTPUT); // MOTOR2 IN1
pinMode(IN2M2, OUTPUT); // MOTOR2 IN2
pinMode(ENM1, OUTPUT); // MOTOR1 Enable
pinMode(ENM2, OUTPUT); // MOTOR2 Enable
pinMode(PWMM1, OUTPUT); // MOTOR 1 PWM
pinMode(PWMM2, OUTPUT); // MOTOR 2 PWM
pinMode(ledPin, OUTPUT); // LED
Serial.begin(115200);
order = 0;


}

void loop(){

Value_ = digitalRead(pin_7);

if(i != 2){

if(Value_ - old_Value == -1){
chk=true;
i++;
}
if (chk == true) count[i]++;

if(Value_ - old_Value == 1){
chk=false;
}
}
if(i==2 && Value_ - old_Value == 1 ){
i=-1;
Serial.println(count[0]);
Serial.println(count[1]);
Serial.println(".......");

if ((count[0] < 100) && (count[1] > 400)){
order = 1;
sum = 50;
Serial.println("setting 1");
Serial.println(".......");
}
else if (abs(count[0] - count[1]) < 15){ order = 4; sum = 50; Serial.println("setting 4"); Serial.println("......."); } else if ((count[0] > 160) && (count[1] > 230)){
order = 2;
Serial.println("setting 2");
Serial.println(".......");
}
else if ((count[0] < 100) && (count[1] < 270)){
order = 3;
Serial.println("setting 3");
Serial.println(".......");
}
else{
Serial.println("NONE");
Serial.print("*order is : ");
Serial.println(order);
Serial.println(".......");
}
comm();
count[0]=0;
count[1]=0;
chk=false;
}

old_Value = Value_;
if (Value_ == 1 && old_Value == 1)
stopCounter++;
else
stopCounter = 0;
if (stopCounter == 5000){
stopCar();
/*Serial.print("*** STOPPING THE CAR ");
Serial.println(".......");*/

}

}

//***********************************

void comm()
{
switch(order)
{


case 4://Forward, F pressed
Serial.println( "F pressed" );
digitalWrite(IN1M1, LOW);
digitalWrite(IN2M1, HIGH);
digitalWrite(ENM1, HIGH);
//digitalWrite(PWMM1,HIGH);
analogWrite(PWMM1, 70);
digitalWrite(ledPin, HIGH);
break;

case 1://Back, B pressed
Serial.println( "B pressed" );
digitalWrite(IN1M1, HIGH);
digitalWrite(IN2M1, LOW);
digitalWrite(ENM1, HIGH);
analogWrite(PWMM1, 70);
//digitalWrite(PWMM1,HIGH);
digitalWrite(ledPin, HIGH);
break;

case 2://Right, R pressed
//Serial.println( "R pressed" );
digitalWrite(IN1M2, HIGH);
digitalWrite(IN2M2, LOW);
digitalWrite(ENM2, HIGH);
analogWrite(PWMM2, 200);
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ENM2, LOW);
break;

case 3://Left, L pressed
//Serial.println( "L pressed" );
digitalWrite(IN1M2, LOW);
digitalWrite(IN2M2, HIGH);
digitalWrite(ENM2, HIGH);
analogWrite(PWMM2, 200);
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ENM2, LOW);
break;
}
}

//***************** COMM *****************************
//********************************************************
//***************** STOPCAR ******************************
void stopCar(){
digitalWrite(13, LOW);
digitalWrite(ENM1, LOW);
digitalWrite(ENM2, LOW);
//Serial.print( "Reseting the system");
}//end of stop
[/code]

No comments:

Post a Comment