基于Arduino的避障小车,实现超声波和红外避障。代码分享如下:
代码
#include "qxmbot1.h"
volatile long g_frontDistance;
volatile long g_leftDistance;
volatile long g_rightDistance;
QXMBOT_SR04 g_QXMBOT_SR04Ult1(A4, A5);
QXMBOT1_motor g_QXMBOT1_CarControl(2, 3, 4, 7, 5, 6);
QXMBOT_cloudServo G_QXMBOT_cloudServo1(9, OUTPUT);
QXMBOT1_avoidSensor g_QXMBOT1_avoidSensor1(12, 13);
// 红外避障
void IR_Avoid() {
// 当测距距离大于20cm就前进,否则后退
if ((LOW == g_QXMBOT1_avoidSensor1.getAvoidStatus_L())) {
g_QXMBOT1_CarControl.QXMBOT1_arCarRight(150, 150);
} else if ((LOW == g_QXMBOT1_avoidSensor1.getAvoidStatus_R())) {
g_QXMBOT1_CarControl.QXMBOT1_arCarLeft(150, 150);
} else {
g_QXMBOT1_CarControl.QXMBOT1_arCarForward(150, 150);
}
}
void setup()
{
g_frontDistance = 0;
g_leftDistance = 0;
g_rightDistance = 0;
G_QXMBOT_cloudServo1.cloudServoContrl(90,100);
}
void loop()
{
if (g_QXMBOT_SR04Ult1.QXMBOT_getDistance() < 30) {
g_QXMBOT1_CarControl.QXMBOT1_arCarStops(150, 150);
G_QXMBOT_cloudServo1.cloudServoContrl(180,800);
g_leftDistance = g_QXMBOT_SR04Ult1.QXMBOT_DistanceAvg();
G_QXMBOT_cloudServo1.cloudServoContrl(0,800);
g_rightDistance = g_QXMBOT_SR04Ult1.QXMBOT_DistanceAvg();
G_QXMBOT_cloudServo1.cloudServoContrl(90,800);
g_frontDistance = g_QXMBOT_SR04Ult1.QXMBOT_DistanceAvg();
if (g_frontDistance < 30) {
if (g_leftDistance > g_rightDistance) {
g_QXMBOT1_CarControl.QXMBOT1_arCarLeftTurn(255, 255);
delay(100);
} else if (g_leftDistance < g_rightDistance) {
g_QXMBOT1_CarControl.QXMBOT1_arCarRightTurn(255, 255);
delay(100);
}
} else {
g_QXMBOT1_CarControl.QXMBOT1_arCarForward(150, 150);
}
} else {
for (int i = 1; i <= 3600; i = i + (1)) {
IR_Avoid();
}
}
// 舵机回正
}
这里用到了qxmbot1.h
文件,点击阅读原文可以下载。
视频效果
原文始发于微信公众号(kali笔记):基于Arduino的避障小车
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论