找回密码
 立即注册

QQ登录

只需一步,快速开始

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

三轮小车运动Arduino编程

[复制链接]
跳转到指定楼层
楼主
ID:376891 发表于 2018-7-21 20:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. const unsigned char PWM1 =13;
  2. const unsigned char AIN11 =12;
  3. const unsigned char AIN12 =11;
  4. const unsigned char PWM2 =10;
  5. const unsigned char AIN21 =9;
  6. const unsigned char AIN22 =8;
  7. const unsigned char PWM3 =7;
  8. const unsigned char AIN31 =6;
  9. const unsigned char AIN32 =5;
  10. const unsigned char Left1=24;
  11. const unsigned char Right1=25;
  12. const unsigned char Left2=26;
  13. const unsigned char Right2=27;
  14. int L1;
  15. int L2;
  16. int L3;
  17. int L4;
  18. int pwm3=0;
  19. int Time=0;
  20. int r=0;
  21. String data ="";
  22. void setup() {
  23.   pinMode(PWM1,OUTPUT);
  24.   pinMode(PWM2,OUTPUT);
  25.   pinMode(PWM3,OUTPUT);
  26.   pinMode(AIN11,OUTPUT);
  27.   pinMode(AIN12,OUTPUT);
  28.   pinMode(AIN21,OUTPUT);
  29.   pinMode(AIN22,OUTPUT);
  30.   pinMode(AIN31,OUTPUT);
  31.   pinMode(AIN32,OUTPUT);
  32.   pinMode(Left1,INPUT);
  33.   pinMode(Right1,INPUT);
  34.   Serial1.begin(9600);
  35. }
  36. // 电机停转
  37. void motorStop1()
  38. {
  39.     digitalWrite(AIN11, LOW);
  40.     digitalWrite(AIN12, LOW);
  41. }
  42. void motorStop2()
  43. {
  44.     digitalWrite(AIN21, LOW);
  45.     digitalWrite(AIN22, LOW);
  46. }
  47. void motorStop3()
  48. {
  49.     digitalWrite(AIN31, LOW);
  50.     digitalWrite(AIN32, LOW);
  51. }
  52. // 电机以参数设定的 pwm 值顺时针转
  53. void motorCW1(unsigned char pwm)
  54. {
  55.     analogWrite(PWM1,   pwm);
  56.     digitalWrite(AIN12, HIGH);
  57.     digitalWrite(AIN11, LOW);
  58. }
  59. void motorCW2(unsigned char pwm)
  60. {
  61.     analogWrite(PWM2,   pwm);
  62.     digitalWrite(AIN22, HIGH);
  63.     digitalWrite(AIN21, LOW);
  64. }
  65. void motorCW3(unsigned char pwm)
  66. {
  67.     analogWrite(PWM3,   pwm);
  68.     digitalWrite(AIN32, HIGH);
  69.     digitalWrite(AIN31, LOW);
  70. }
  71. // 电机以参数设定的 pwm 值逆时针转
  72. void motorCCW1(unsigned char pwm)
  73. {
  74.     analogWrite(PWM1,   pwm);
  75.     digitalWrite(AIN11, HIGH);
  76.     digitalWrite(AIN12, LOW);
  77. }
  78. void motorCCW2(unsigned char pwm)
  79. {
  80.     analogWrite(PWM2,   pwm);
  81.     digitalWrite(AIN21, HIGH);
  82.     digitalWrite(AIN22, LOW);
  83. }
  84. void motorCCW3(unsigned char pwm)
  85. {
  86.     analogWrite(PWM3,   pwm);
  87.     digitalWrite(AIN31, HIGH);
  88.     digitalWrite(AIN32, LOW);
  89. }
  90. //前,后,左转,右转,左行,右行,停
  91. void forward(unsigned char pwm)
  92. {
  93.   motorStop1();
  94.   motorCW3(pwm);
  95.   motorCCW2(pwm);
  96. }
  97. void backward(unsigned char pwm)
  98. {
  99.   motorStop1();
  100.   motorCW2(pwm);
  101.   motorCCW3(pwm);
  102. }
  103. void LRotate(unsigned char pwm)
  104. {
  105.   motorCW1(pwm);
  106.   motorCW2(pwm);
  107.   motorCW3(pwm);
  108. }
  109. void RRotate(unsigned char pwm)
  110. {
  111.   motorCCW1(pwm);
  112.   motorCCW2(pwm);
  113.   motorCCW3(pwm);
  114. }
  115. void LMove(unsigned char pwm)
  116. {
  117.   motorCW1(pwm);
  118.   motorCCW2(pwm/2);
  119.   motorCCW3(pwm/2);
  120. }
  121. void RMove(unsigned char pwm)
  122. {
  123.   motorCCW1(pwm);
  124.   motorCW2(pwm/2);
  125.   motorCW3(pwm/2);
  126. }
  127. void Stop()
  128. {
  129.   motorStop1();
  130.   motorStop2();
  131.   motorStop3();
  132. }
  133. void loop() {
  134.   motorStop1();
  135.   motorCW3(pwm3+230);
  136.   motorCCW2(230);
  137.   L1=digitalRead(Left1);
  138.   L2=digitalRead(Right1);
  139.   L3=digitalRead(Left2);
  140.   L4=digitalRead(Right2);
  141.   if(r==1){
  142.   if(L1==1&&L2==1){
  143.     Time=0;
  144.   }
  145.   else if(L1==0&&L2==1&&L3==1&&Time==0){
  146.     pwm3=5;
  147.     Time++;
  148.   }
  149.   else if(L1==0&&L2==1&&L3==1&&Time!=0){
  150.     pwm3--;
  151.     Time++;
  152.   }
  153.   else if(L1==0&&L2==1&&L3==0&&Time==0){
  154.     pwm3=10;
  155.     Time++;
  156.   }
  157.   else if(L1==0&&L2==1&&L3==0&&Time!=0){
  158.     pwm3+=5;
  159.     Time++;
  160.   }
  161.   else if(L1==1&&L2==0&&L4==1&&Time==0){
  162.     pwm3=-5;
  163.     Time++;
  164.   }
  165.   else if(L1==1&&L2==0&&L4==1&&Time!=0){
  166.     pwm3++;
  167.     Time++;
  168.   }
  169.   else if(L1==1&&L2==0&&L4==0&&Time==0){
  170.     pwm3=-10;
  171.     Time++;
  172.   }
  173.   else if(L1==1&&L2==0&&L4==0&&Time!=0){
  174.     pwm3-=5;
  175.     Time++;
  176.   }
  177.   }
  178.   while(Serial1.available() > 0)
  179. {
  180.   char inChar=(char)Serial1.read();
  181.   delay(10);
  182.   data+=inChar;
  183. }
  184. if(data!=""){
  185.   if(data == "p"){
  186.     Stop();
  187.     r=0;
  188.   }
  189.   else if(data == "w"){
  190.     r=1;
  191.   }
  192. }
  193. data="";
  194. delay(100);
  195. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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