和大家一起交流,还有很多不完美的地方,请大神指导,我对arduino很感兴趣,也很希望大神指导。
/*L298N:BNA--9,BNB--10,IN1--30,IN2--31,IN3--32,IN4--33
1602:K--GND,A--3.3V,D7--2,D6--3,D5--4,D4--5,E--11,RW--GND,RS--12,VDD--5V,VSS--GND
霍尔--6
光电开关左D0--8,右D0--7*/
#include <LiquidCrystal.h>
int i=2;
int v=1;
char k;
int A=1;
int a=1;
int b=1;
int c=1;
int d=1;
int e=1;
int f=1;
int g=1;
float time;
float time1;
float time2;//一定要定义成float,不然不能测;
float spd;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// put your setup code here, to run once:
lcd.begin(16, 2);
attachInterrupt(3, blink, FALLING);
pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(8,INPUT);
Serial.begin(9600);
pinMode(30,OUTPUT);
pinMode(31,OUTPUT);
pinMode(32,OUTPUT);
pinMode(33,OUTPUT);
digitalWrite(6,HIGH);
digitalWrite(30,LOW);
digitalWrite(31,LOW);
digitalWrite(32,LOW);
digitalWrite(33,LOW);
}
void loop() {
// put your main code here, to run repeatedly:
{
if(Serial.available())
{
k=Serial.read();
}
switch(k)
{
case'0':
a=1;
do{
xunji();
Bluetoothcesu();
lcd.setCursor(0,1);
lcd.print("Trscking mode");
if(Serial.available())
{k=Serial.read();}
if(k!='0')
a=0;
}while(a);break;
case'1'://前进
b=1;
do{lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,HIGH);
digitalWrite(31,LOW);
digitalWrite(32,HIGH);
digitalWrite(33,LOW);
Bluetoothcesu();
Serial.println(k);
if(k!='1')
b=0;
}while(b);break;
case'2': //后退
c=1;
do{lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,LOW);
digitalWrite(31,HIGH);
digitalWrite(32,LOW);
digitalWrite(33,HIGH);
Bluetoothcesu();
if(k!='2')
c=0;
}while(c);break;
case'3': //左转
d=1;
do{lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,HIGH);
digitalWrite(31,LOW);
digitalWrite(32,LOW);
digitalWrite(33,HIGH);
Bluetoothcesu();
if(k!='3')
d=0;
}while(d);break;
case'4': //右转
e=1;
do{lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,LOW);
digitalWrite(31,HIGH);
digitalWrite(32,HIGH);
digitalWrite(33,LOW);
Bluetoothcesu();
Serial.println(k);
if(k!='4')
e=0;
}while(e);break;
case'5': //左后转
f=1;
do{lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,LOW);
digitalWrite(31,HIGH);
digitalWrite(32,HIGH);
digitalWrite(33,LOW);
Bluetoothcesu();
if(k!='5')
f=0;
}while(f);break;
case'6': //右后转
g=1;
do{lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,HIGH);
digitalWrite(31,LOW);
digitalWrite(32,LOW);
digitalWrite(33,HIGH);
Bluetoothcesu();
if(k!='6')
g=0;
}while(g);break;
case'7': //停止
lcd.setCursor(0,1);
lcd.print("Bluetooth mode");
analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,LOW);
digitalWrite(31,LOW);
digitalWrite(32,LOW);
digitalWrite(33,LOW);
lcd.setCursor(0,0);//1602第一位第一行开始显示,
lcd.print(0.00000);//(覆盖)掉前面的速度,
lcd.print(000000);
break;
}}}
void blink()
{v--;
i--;}
void xunji()
{
if(digitalRead(7)==HIGH && digitalRead(8)==LOW)
{analogWrite(10,110);
digitalWrite(32,HIGH);
digitalWrite(33,LOW);
analogWrite(9,110);
digitalWrite(30,LOW);
digitalWrite(31,HIGH);
}
else if(digitalRead(8)==HIGH && digitalRead(7)==LOW)
{analogWrite(9,100);
digitalWrite(30,HIGH);
digitalWrite(31,LOW);
analogWrite(10,100);
digitalWrite(32,LOW);
digitalWrite(33,HIGH);}
else if(digitalRead(7)==HIGH && digitalRead(8)==HIGH)
{digitalWrite(30,LOW);
digitalWrite(31,LOW);
digitalWrite(32,LOW);
digitalWrite(33,LOW);
lcd.setCursor(0,0);//1602第一位第一行开始显示,
lcd.print(0.00000);//(覆盖)掉前面的速度,
lcd.print(000000);
lcd.print("m/s");
}
else
{analogWrite(9,120);
analogWrite(10,120);
digitalWrite(30,HIGH);
digitalWrite(31,LOW);
digitalWrite(32,HIGH);
digitalWrite(33,LOW);
}
}
void Bluetoothcesu()
{
while(abs(v)<1)//abs取绝对值函数
{
time1=micros();//返回微秒
v--;
}
while(abs(i)<1)
{
time2=micros();
i--;
time=time2-time1;
}
if(i<=-1)
{
time2=0;
time1=0;
i=2;
v=1;
}
if(time!=0 && digitalRead(31)==HIGH)
{
spd=220000/time;
lcd.setCursor(0,0);
lcd.print("-");
lcd.print(spd);
lcd.print("m/s");
}
else if(time!=0 && digitalRead(30)==HIGH)
{
spd=220000/time;
lcd.setCursor(0,0);
lcd.print("+");
lcd.print(spd);
lcd.print("m/s");
}
if(Serial.available())
{k=Serial.read();}
} |