#define _US 0x5553
#define _DS 0x4453
#define _LS 0x4C53
#define _RS 0x5253
#define _UL 0x554C
#define _DL 0x444C
#define _UR 0x5552
#define _DR 0x4452
#define _SS 0x5353
#define ENA 10
#define ENB 11
#define IN1 7
#define IN2 8
#define IN3 12
#define IN4 13
#define LOWSPEED 100
#define HIGHSPEED 255
uint16_t value;
uint8_t r_buffer[4];
uint8_t number;
uint8_t command;
void setup(){
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
//digitalWrite(ENA, HIGH);
//digitalWrite(ENB, HIGH);
run(0);
Serial1.begin(9600);
}
void loop(){
if(Serial1.available())
{
uint8_t readbuf = Serial1.read();
r_buffer[number]=readbuf;
number++;
if(readbuf==0x3B)
{
if(number==3)
{
value = (r_buffer[0]<<8) | (r_buffer[1]);
}
number=0;
command=1;
}
}
if(command)
{
command=0;
switch(value)
{
case _SS: run(0);break;
case _US: run(1);break;
case _DS: run(2);break;
case _LS: run(3);break;
case _RS: run(4);break;
case _UL: run(5);break;
case _UR: run(6);break;
case _DL: run(7);break;
case _DR: run(8);break;
}
}
}
void forward()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void backward()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void turnleft()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void turnright()
{
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void stopcar()
{
digitalWrite(ENA, LOW);
digitalWrite(ENB, LOW);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void run(int direct)
{
switch(direct)
{
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA,0);
analogWrite(ENB,0);
break;
case 1:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA,LOWSPEED);
analogWrite(ENB,LOWSPEED);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA,LOWSPEED);
analogWrite(ENB,LOWSPEED);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA,LOWSPEED);
analogWrite(ENB,LOWSPEED);
break;
case 4:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA,LOWSPEED);
analogWrite(ENB,LOWSPEED);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA,LOWSPEED);
analogWrite(ENB,HIGHSPEED);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA,HIGHSPEED);
analogWrite(ENB,LOWSPEED);
break;
case 7:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA,LOWSPEED);
analogWrite(ENB,HIGHSPEED);
break;
case 8:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA,HIGHSPEED);
analogWrite(ENB,LOWSPEED);
break;
}
}
|