找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2714|回复: 0
打印 上一主题 下一主题
收起左侧

arduino小车控制程序,包含与树莓派通信程序

[复制链接]
跳转到指定楼层
楼主
小车控制程序,包含与树莓派通信程序


单片机源程序如下:

  1. int PWMA=10;
  2. int IN1 = 10;
  3. int IN2 = 9;
  4. int PWMB = 6;
  5. int IN3 = 6;
  6. int IN4 = 5;
  7. const int TrigPin = 2;
  8. const int EchoPin = 3;
  9. float distance;
  10. #include <Servo.h>    // 声明调用Servo.h库
  11. Servo myservo;        // 创建一个舵机对象
  12. int pos = 0;          // 变量pos用来存储舵机位置
  13. String comdata = "";
  14. int i;

  15. void setup()
  16. {
  17.   pinMode(PWMA, OUTPUT); //PWM
  18.   pinMode(IN1, OUTPUT);
  19.   pinMode(IN2, OUTPUT);
  20.   pinMode(PWMB, OUTPUT); //PWM
  21.   pinMode(IN3, OUTPUT);
  22.   pinMode(IN4, OUTPUT);
  23.   // 初始化串口通信及连接SR04的引脚
  24.         Serial.begin(9600);
  25.         pinMode(TrigPin, OUTPUT);
  26.     // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
  27.         pinMode(EchoPin, INPUT);
  28.     Serial.println("Ultrasonic sensor:");
  29.   myservo.attach(5);  // 将引脚9上的舵机与声明的舵机对象连接起来
  30.   Serial.begin(9600);
  31. }

  32. void up()
  33. {
  34.   digitalWrite(IN1, LOW);
  35.   digitalWrite(IN2, HIGH);
  36.   digitalWrite(IN3, LOW);
  37.   digitalWrite(IN4, HIGH);
  38.   analogWrite(PWMA, 10);
  39.   analogWrite(PWMB, 10);
  40.   delay(5000);
  41. }

  42. void down()
  43. {
  44.   digitalWrite(IN1, HIGH);
  45.   digitalWrite(IN2, LOW);
  46.   digitalWrite(IN3, HIGH);
  47.   digitalWrite(IN4, LOW);
  48.   analogWrite(PWMA, 10);
  49.   analogWrite(PWMB, 10);
  50.   delay(5000);
  51. }

  52. void sto()
  53. {
  54.   digitalWrite(IN1, LOW);
  55.   digitalWrite(IN2, LOW);
  56.   digitalWrite(IN3, LOW);
  57.   digitalWrite(IN4, LOW);
  58.   analogWrite(PWMA, 0);
  59.   analogWrite(PWMB, 0);
  60.   delay(5000);
  61. }

  62. void left()
  63. {
  64.   digitalWrite(IN1, LOW);
  65.   digitalWrite(IN2, HIGH);
  66.   digitalWrite(IN3, HIGH);
  67.   digitalWrite(IN4, LOW);
  68.   analogWrite(PWMA, 10);
  69.   analogWrite(PWMB, 10);
  70.   delay(5000);
  71. }

  72. void right()
  73. {
  74.   digitalWrite(IN1, HIGH);
  75.   digitalWrite(IN2, LOW);
  76.   digitalWrite(IN3, LOW);
  77.   digitalWrite(IN4, HIGH);
  78.   analogWrite(PWMA, 10);
  79.   analogWrite(PWMB, 10);
  80.   delay(5000);
  81. }

  82. void d()
  83. {
  84.     // 产生一个10us的高脉冲去触发TrigPin
  85.         digitalWrite(TrigPin, LOW);
  86.         delayMicroseconds(2);
  87.         digitalWrite(TrigPin, HIGH);
  88.         delayMicroseconds(10);
  89.         digitalWrite(TrigPin, LOW);
  90.     // 检测脉冲宽度,并计算出距离
  91.         distance = pulseIn(EchoPin, HIGH) / 58.00;
  92.         
  93. }

  94. void roun()
  95. {
  96.    for(pos = 0; pos < 180; pos += 1){    // 舵机从0°转到180°,每次增加1°         
  97.       myservo.write(pos);           // 给舵机写入角度   
  98.       delay(15);                    // 延时15ms让舵机转到指定位置
  99.    }
  100.     for(pos = 180; pos>=1; pos-=1) {    // 舵机从180°转回到0°,每次减小1°                              
  101.        myservo.write(pos);        // 写角度到舵机     
  102.        delay(15);                 // 延时15ms让舵机转到指定位置
  103.     }
  104. }

  105. void loop()
  106. {
  107. d();
  108.   while (Serial.available() > 0){
  109.         comdata += char(Serial.read());
  110.         i=comdata.toInt();//每次读一个char字符,并相加
  111.         delay(2);
  112.     }
  113.     if (comdata.length() > 0){
  114.         if (i<140){
  115.           Serial.println("left");
  116.            left();
  117.         }
  118.         if(i>140&i<180){
  119.           Serial.println("up");
  120.           if(distance<30)
  121.           sto();
  122.           else
  123.           up();
  124.          
  125.         }
  126.         if (i>=180){
  127.           Serial.println("right");
  128.            right();
  129.         }
  130.        // Serial.println(i); //打印接收到的字符
  131.         comdata = "";
  132.     }
  133.    
  134. }

复制代码

所有资料51hei提供下载:
arduino.rar (13.71 KB, 下载次数: 18)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表