标题:
arduino小车控制程序,包含与树莓派通信程序
[打印本页]
作者:
16271271
时间:
2018-10-2 19:31
标题:
arduino小车控制程序,包含与树莓派通信程序
小车控制程序,包含与树莓派通信程序
0.png
(7.02 KB, 下载次数: 15)
下载附件
2018-10-3 00:38 上传
单片机源程序如下:
int PWMA=10;
int IN1 = 10;
int IN2 = 9;
int PWMB = 6;
int IN3 = 6;
int IN4 = 5;
const int TrigPin = 2;
const int EchoPin = 3;
float distance;
#include <Servo.h> // 声明调用Servo.h库
Servo myservo; // 创建一个舵机对象
int pos = 0; // 变量pos用来存储舵机位置
String comdata = "";
int i;
void setup()
{
pinMode(PWMA, OUTPUT); //PWM
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(PWMB, OUTPUT); //PWM
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// 初始化串口通信及连接SR04的引脚
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);
Serial.println("Ultrasonic sensor:");
myservo.attach(5); // 将引脚9上的舵机与声明的舵机对象连接起来
Serial.begin(9600);
}
void up()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(PWMA, 10);
analogWrite(PWMB, 10);
delay(5000);
}
void down()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(PWMA, 10);
analogWrite(PWMB, 10);
delay(5000);
}
void sto()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(PWMA, 0);
analogWrite(PWMB, 0);
delay(5000);
}
void left()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(PWMA, 10);
analogWrite(PWMB, 10);
delay(5000);
}
void right()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(PWMA, 10);
analogWrite(PWMB, 10);
delay(5000);
}
void d()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin, HIGH) / 58.00;
}
void roun()
{
for(pos = 0; pos < 180; pos += 1){ // 舵机从0°转到180°,每次增加1°
myservo.write(pos); // 给舵机写入角度
delay(15); // 延时15ms让舵机转到指定位置
}
for(pos = 180; pos>=1; pos-=1) { // 舵机从180°转回到0°,每次减小1°
myservo.write(pos); // 写角度到舵机
delay(15); // 延时15ms让舵机转到指定位置
}
}
void loop()
{
d();
while (Serial.available() > 0){
comdata += char(Serial.read());
i=comdata.toInt();//每次读一个char字符,并相加
delay(2);
}
if (comdata.length() > 0){
if (i<140){
Serial.println("left");
left();
}
if(i>140&i<180){
Serial.println("up");
if(distance<30)
sto();
else
up();
}
if (i>=180){
Serial.println("right");
right();
}
// Serial.println(i); //打印接收到的字符
comdata = "";
}
}
复制代码
所有资料51hei提供下载:
arduino.rar
(13.71 KB, 下载次数: 18)
2018-10-2 19:30 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1