小车控制程序,包含与树莓派通信程序
单片机源程序如下:
- 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)
|