|
本帖最后由 353529281 于 2021-8-28 19:08 编辑
我是新手,欢迎大家指出错误和缺点,共同进步,谢谢。
- /*
- 红外如寻迹小车项目 20201年7月31日
- 功能:
- 红外寻迹功能,黑底白线,或都白底黑色。 线宽度1-2cm左右。
- 材料:
- ESP8266或arduono
- L298N模块
- TCRT红外寻迹模块2个
- 小车底盘双电机
- 电池1块电压(6-12V)
- 注意:速度为100左右时最适合,太快容易冲出跑道
- 作者:九洲创客
- QQ:353529281
- */
- #define TCRT_L D2 //左红外寻迹IO
- #define TCRT_R D3 //右红外寻迹IO
- void tcrt(){ //红外寻迹
- int tcrt_l=digitalRead(TCRT_L); //左边寻迹
- int tcrt_r=digitalRead(TCRT_R); //右边寻迹
- bool tcrt_bool=1; //黑底白线时值为0,白底黑线时为1;
- if(tcrt_l==tcrt_bool && tcrt_r==tcrt_bool){ //如果左右都识别到线就停车
- car_stop();//停车
- }
- else if(tcrt_l==tcrt_bool){ //如果左边识别到线,就说明车身偏左,就需要向右转向
- car_right(); //右转
- car_stop(); //停车
- }
- else if(tcrt_r==tcrt_bool){//如果右边识别到线,就说明车身偏右,就需要向左转向
- car_left(); //左转
- car_stop();//停车
- }
-
- else{
- car_up(); //前进
- }
- }
- //小车方向4个IO脚
- #define CARPIN1 D5
- #define CARPIN2 D6
- #define CARPIN3 D7
- #define CARPIN4 D8
- int car_sudu=100; //小车速度初始化为PWM100
- //四个方向,停车函数
- void car_up(){ //前进
- analogWrite(CARPIN1,car_sudu);
- digitalWrite(CARPIN2,LOW);
- analogWrite(CARPIN3,car_sudu);
- digitalWrite(CARPIN4,LOW);
- delay(100);
- }
- void car_down(){ //后退
- digitalWrite(CARPIN1,LOW);
- analogWrite(CARPIN2,car_sudu);
- digitalWrite(CARPIN3,LOW);
- analogWrite(CARPIN4,car_sudu);
- delay(100);
- }
- void car_left(){ //左转
- analogWrite(CARPIN1,car_sudu);
- digitalWrite(CARPIN2,LOW);
- digitalWrite(CARPIN3,LOW);
- analogWrite(CARPIN4,car_sudu);
- delay(100);
- }
- void car_right(){ //右转
- digitalWrite(CARPIN1,LOW);
- analogWrite(CARPIN2,car_sudu);
- analogWrite(CARPIN3,car_sudu);
- digitalWrite(CARPIN4,LOW);
- delay(100);
- }
- void car_stop(){ //停车
- digitalWrite(CARPIN1,LOW);
- digitalWrite(CARPIN2,LOW);
- digitalWrite(CARPIN3,LOW);
- digitalWrite(CARPIN4,LOW);
- delay(100);
- }
- void setup() {
-
- Serial.begin(9600);
-
- // 初始化小车控制IO
- pinMode(CARPIN1,OUTPUT);
- pinMode(CARPIN2,OUTPUT);
- pinMode(CARPIN3,OUTPUT);
- pinMode(CARPIN4,OUTPUT);
-
- pinMode(TCRT_L,INPUT);
- pinMode(TCRT_R,INPUT);
-
-
- }
- void loop() {
- tcrt();//执行红外寻迹
- }
复制代码
|
|