可以使用嵌入式控制板来显示红外避障模块的当前状态,因为嵌入式控制板上搭建了一个7寸的HDMI显示屏,可以把它当成平常Windows系统的计算机使用。通常在计算机上面用串口调试助手来显示相关信息。
底层控制板范例如下:
#include 〈Wire.h〉
#define SLAVE_ADDRESS 0x04
int number = 0;
int state = 0;
int SNUM[3] ;
int INA = 4; //电机 A 正反转控制端
int PWMA = 5; //电机 A 调速端
int INB = 7; //电机 B 正反转控制端
int PWMB = 6; //电机 B 调速端
void motospd(int sp1,int sp2) //电机速度控制函数,括号内分别为左右电机速度值,
{ //范围-255~+255,正值为正转,负值为反转。
if(sp1〉0)
digital Write(INA, HIGH);
else
digital Write(INA, LOW);
if(sp2〉0)
digital Write(INB, HIGH);
else
digital Write(INB, LOW);
analog Write(PWMA,abs (sp1));
analog Write(PWMB,abs (sp2));
}
void setup() {
pin Mode(8, INPUT); //配置左传感器 IO 口为输入
pin Mode(14, INPUT); //配置中传感器 IO 口为输入
pin Mode(15, INPUT); //配置右传感器 IO 口为输入
pin Mode(INA,OUTPUT);
pin Mode(INB,OUTPUT);//配置电机驱动 IO 口为输出
Serial.begin(9600); // start serial for output
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
Wire.on Receive(receive Data);
Wire.on Request(send Data);
Serial.println("Ready!");
}
void loop() {
SNUM[0] = digital Read(8);//左传感器赋值
SNUM[1] = digital Read(14); //中传感器赋值
SNUM[2] = digital Read(15); //右传感器赋值
if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍物
motospd(100,100); //直行
if ((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1)) //左传感器检测到障碍物
{
motospd(-100,-100); //后退
delay(50);
motospd(100,50); //右转
}
if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0)) //右传感器检测到障碍物
{
motospd(-100,-100); //后退
delay(50);
motospd(50,100); //左转
}
if ((SNUM[0]==0)&&(SNUM[1]==0)&&(SNUM[2]==0)) //中传感器检测到障碍物
{
motospd(-100,-100); //后退
delay(50);
motospd(50,100); //左转
}
delay(50);
}
// callback for received data
void receive Data(int byte Count){
}
// callback for sending data
void send Data(){
int i;
for(i = 0;i 〈 3 ; i++)
{
Wire.write(SNUM[i]);
}
}
嵌入式控制板范例程序如下:
import smbus
import time
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x04
def write Number(value):
bus.write_byte(address, value)
# bus.write_byte_data(address, 0, value)
return -1
def read Number():
number = bus.read_byte(address)
# number = bus.read_byte_data(address, 1)
return number
while True:
number = read Number()
number1 = read Number()
number2 = read Number()
print "Left IR:", number
print " "
print "Centre IR:"number1
print " "
print "Right IR:" number2
运行本程序会在屏幕上显示串口打印出来的数据,通过查看数据,即可得知红外避障传感器是否正常工作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。