极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15766|回复: 6

请大神进来看看。想让小车速度变慢,上了ENA ENB 之后只有一个轮子转,

[复制链接]
发表于 2016-8-26 15:46:57 | 显示全部楼层 |阅读模式
  1. #include <Servo.h>
  2. //#define send

  3. Servo myservo;
  4. #define ENA 10
  5. #define ENB 11
  6. int Echo =A1;  // Echo回声脚(P2.0)
  7. int Trig =A0;  //  Trig 触发脚(P2.1)
  8. int in1 = 5;
  9. int in2 = 4;
  10. int in3 = 3;
  11. int in4 = 2;

  12. int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;

  13. void forward()
  14. {
  15. digitalWrite(in1,HIGH);
  16. digitalWrite(in2,LOW);
  17. digitalWrite(in3,HIGH);
  18. digitalWrite(in4,LOW);
  19. }

  20. void back()
  21. {
  22. digitalWrite(in1,LOW);
  23. digitalWrite(in2,HIGH);
  24. digitalWrite(in3,LOW);
  25. digitalWrite(in4,HIGH);
  26. }

  27. void turnleft()
  28. {
  29. digitalWrite(in1,0);
  30. digitalWrite(in2,0);
  31. digitalWrite(in3,1);
  32. digitalWrite(in4,0);
  33. }

  34. void turnright()
  35. {
  36. digitalWrite(in1,1);
  37. digitalWrite(in2,0);
  38. digitalWrite(in3,0);
  39. digitalWrite(in4,0);
  40. }
  41. void stop()
  42. {
  43. digitalWrite(in1,LOW);
  44. digitalWrite(in2,LOW);
  45. digitalWrite(in3,LOW);
  46. digitalWrite(in4,LOW);
  47. }

  48. int Distance_test()   // 量出前方距离
  49. {
  50.   digitalWrite(Trig, LOW);   // 给触发脚低电平2μs
  51.   delayMicroseconds(2);
  52.   digitalWrite(Trig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs
  53.   delayMicroseconds(20);
  54.   digitalWrite(Trig, LOW);    // 持续给触发脚低电
  55.   float Fdistance = pulseIn(Echo, HIGH);  // 读取高电平时间(单位:微秒)
  56.   Fdistance= Fdistance/58;       //为什么除以58等于厘米,  Y米=(X秒*344)/2
  57.   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
  58.   return (int)Fdistance;
  59. }  

  60. void setup()
  61. {  
  62.   myservo.attach(9);
  63.   Serial.begin(9600);     // 初始化串口
  64.   pinMode(Echo, INPUT);    // 定义超声波输入脚
  65.   pinMode(Trig, OUTPUT);   // 定义超声波输出脚  
  66.   pinMode(in1,OUTPUT);
  67.   pinMode(in2,OUTPUT);
  68.   pinMode(in3,OUTPUT);
  69.   pinMode(in4,OUTPUT);

  70.   stop();
  71. }

  72. void loop()
  73. {
  74.    analogWrite(ENA,100);analogWrite(ENB,100);
  75.     myservo.write(90);
  76.     delay(500);
  77.     middleDistance = Distance_test();
  78.     //#ifdef send
  79.     Serial.print("middleDistance=");
  80.     Serial.println(middleDistance);
  81.    // #endif
  82.      
  83.     if(middleDistance<=30)
  84.     {     
  85.       stop();
  86.       delay(500);                        
  87.       myservo.write(5);         
  88.       delay(1000);      
  89.       rightDistance = Distance_test();

  90.       #ifdef send
  91.       Serial.print("rightDistance=");
  92.       Serial.println(rightDistance);
  93.       #endif
  94.       
  95.       delay(500);
  96.        myservo.write(90);              
  97.       delay(1000);                                                  
  98.       myservo.write(175);              
  99.       delay(1000);
  100.       leftDistance = Distance_test();

  101.       #ifdef send
  102.       Serial.print("leftDistance=");
  103.       Serial.println(leftDistance);
  104.       #endif

  105.       delay(500);
  106.       myservo.write(90);              
  107.       delay(1000);
  108.       if(rightDistance>leftDistance)  
  109.       {
  110.         turnright();
  111.         delay(100);
  112.        }
  113.        else if(rightDistance<leftDistance)
  114.        {
  115.         turnleft();
  116.         delay(100);
  117.        }
  118.        else
  119.        {
  120.         forward();
  121.        }
  122.     }  
  123.     else
  124.      
  125.       forward();                     
  126. }
复制代码



请大神进来看看。想让小车速度变慢,上了ENA ENB 之后只有一个轮子转,如果单独测试的话 两个轮子都转 请大神指教啊
回复

使用道具 举报

 楼主| 发表于 2016-8-26 15:49:17 | 显示全部楼层
如果不用ENA ENB 的话一切都好,就是速度太快 老撞墙 用了之后只能控制一个轮子 啊   郁闷
回复 支持 反对

使用道具 举报

发表于 2016-8-27 10:41:17 | 显示全部楼层
goodluck 发表于 2016-8-26 15:49
如果不用ENA ENB 的话一切都好,就是速度太快 老撞墙 用了之后只能控制一个轮子 啊   郁闷

为什么不用硬件的PWM?analogWrite(Pin,0~255)
回复 支持 反对

使用道具 举报

发表于 2016-8-27 14:47:58 | 显示全部楼层
同求,我也遇到一个轮子转的情况。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-27 17:22:04 | 显示全部楼层
164335413 发表于 2016-8-27 10:41
为什么不用硬件的PWM?analogWrite(Pin,0~255)

谢谢大神指点现在已经解决了、我还有一个问题 怎么样把蓝牙控制和超声壁障结合到一起做一个小车啊
回复 支持 反对

使用道具 举报

发表于 2016-8-28 13:32:49 | 显示全部楼层
goodluck 发表于 2016-8-27 17:22
谢谢大神指点现在已经解决了、我还有一个问题 怎么样把蓝牙控制和超声壁障结合到一起做一个小车啊

蓝牙可以发送一个消息,告诉小车现在是避障模式,对蓝牙发送的前后左右的命令不进行处理。但是有一个命令是用来切换模式的,这个命令必须接收,并做处理。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-29 11:11:26 | 显示全部楼层
164335413 发表于 2016-8-28 13:32
蓝牙可以发送一个消息,告诉小车现在是避障模式,对蓝牙发送的前后左右的命令不进行处理。但是有一个命令 ...

大神能不能说点详细一点啊 我刚学 不懂这么复杂
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-19 18:27 , Processed in 0.041449 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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