零知四轮小车高级版(零知mini主控)教程-红外循迹走S弯

本系列教程讲解零知小车套件以零知迷你板为主控,使用零知开源平台进行智能小车开发。
使用的硬件:-零知智能小车套件(点击购买)

实现的功能:红外循迹、超声波避障、直线运行、手机蓝牙控制、灭火等基本功能。

扩展:可以在小车上加入其它传感器模块进行扩展,比如加入摄像头模块进行监控、加入更多超声波模块实现自动跟随...

高级版系列教程将使用多文件编程的方式来编写程序,教程主要包含以下几个部分:

零知四轮小车高级版(零知mini主控)系列教程-小车组装

零知四轮小车高级版(零知mini主控)系列教程-程序控制电机开跑

零知四轮小车高级版(零知mini主控)系列教程-加入蓝牙实现手机控制

零知四轮小车高级版(零知mini主控)系列教程-红外循迹走S弯

零知四轮小车高级版(零知mini主控)系列教程-超声波自动避障

零知四轮小车高级版(零知mini主控)系列教程-灭火小车

一、工具原料
(1)组装好的智能小车

二、程序代码
高级版教程将使用多文件编程的方式来编写代码,完整工程可在下面下载。四轮小车程序和两轮相差不大,如下所示:


				
/**********************************************************
*    文件: lzsmartcar_track.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -^^- 零知开源,让电子制作变得更简单! -^^-
*    时间: 2019/12/11 14:56
*    说明: 
************************************************************/
#include "pinsdefine.h"
#include "motor.h"
#include "cartrack.h"
  
//四轮车
LZSmartCarMotor myMotor(false);
  
//红外循迹,5路
CarTracking carTrack(5);
  
#define BLACK 1
#define WHITE 0
  
void doTrackLine()
{
        byte buff[5];
        carTrack.getLineData(buff);
//        delay(300);
          
        int error1 = 0;
        int error2 = 0;
  
        if(buff[3] == WHITE && buff[2] == BLACK && buff[1]==BLACK && buff[0] == BLACK){
                //左大转
                myMotor.goWithDirec(carLeft);
                Serial.println("左大转");
        }
        if(buff[3] == BLACK && buff[2] == BLACK && buff[1]==BLACK && buff[0] == WHITE){
                //右大转
                myMotor.goWithDirec(carRight);
                Serial.println("右大转");
        }
        if(buff[3] == BLACK && buff[2] == WHITE && buff[1]==BLACK && buff[0] == BLACK){
                //左小转
                myMotor.goWithDirec(carForLeft);
                Serial.println("左小转");
        }
        if(buff[3] == BLACK && buff[2] == BLACK && buff[1]==WHITE && buff[0] == BLACK){
                //右小转
                myMotor.goWithDirec(carForRight);
                Serial.println("右小转");
        }
        if(buff[3] == BLACK && buff[2] == WHITE && buff[1]==WHITE && buff[0] == WHITE){
                myMotor.goWithDirec(carRight);
                delay(160);
                Serial.println("右直角");
        }
        if(buff[3] == WHITE && buff[2] == WHITE && buff[1]==WHITE && buff[0] == BLACK){
                myMotor.goWithDirec(carLeft);
                delay(160);
                Serial.println("左直角");
        }
}
  
// 复位或上电后运行一次:
void setup() {
    //在这里加入初始化相关代码,只运行一次:
        Serial.begin(9600);
        Serial.println("开车啦...");
        myMotor.stop();
  
}
  
//一直循环执行:
void loop() {
    // 在这里加入主要程序代码,重复执行:
        doTrackLine();
  
}
				

完整工程:  lzsmartcar_v2.zip 

验证上传以上代码至智能小车上的mini板上,循迹小车就完成了。
这里注意的是,循迹模块的安装高度需要根据实际进行调整,否则无法识别到白色和黑色的区域导致无法循迹。