找回密码
 立即注册

QQ登录

只需一步,快速开始

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

循迹小车出弯道时出现左右摇摆的现象,该如何解决?附单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:430606 发表于 2018-12-21 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
循迹小车出弯道时出现左右摇摆的现象,该如何解决?车子前后使用两个五路红外对管传感器
  1. //=======================================================
  2. //  975=转向轮向左转     车身左侧电机1
  3. //=======================================================
  4. #include <Servo.h>   
  5. #define SER1_BAUD 115200
  6. /*电机驱动引脚*/
  7. #define PWMB_IN1  11       //定义IN1引脚
  8. #define PWMB_IN2 6       //定义IN2引脚
  9. #define PWMA_IN1 5        //定义IN3引脚
  10. #define PWMA_IN2 3        //定义IN4引脚
  11. #define Servor_Pin    7
  12. #define  BEEP_PIN    12             //定义蜂鸣器引脚D6
  13. #define  NLED_PIN    13           //定义呼吸灯引脚D11
  14. #define IR1   A1
  15. #define IR2   A0
  16. #define IR3   A3
  17. #define IR4   A2
  18. #define IR5   10
  19. #define IH2   0
  20. #define IH3   A5
  21. #define IH4   A4
  22. #define  NLED_MS_BETWEEN        500
  23. #define  DUOJI_MS_BETWEEN       20.000
  24. int Out1,Out2,Out3,Out4,Out5,Out2H,Out3H,Out4H;
  25. int pwm_value=1435;
  26. int pwm_R=1140;
  27. int pwm_L=1860;
  28. int Echo =12;
  29. int Trig =13;
  30. int Distance = 50;
  31. double sv=130;         //直线速度
  32. double bv=130;        //24转速
  33. double cv=140;        //curve弯道速度
  34. int c1=0;         //矫正指示值
  35. int c5=0;
  36. int fore=0;       //前部判断
  37. int f=0;          //前部触发
  38. int dj=0;          //舵机
  39. int hou=0;        //尾部判断
  40. int h=0;          //尾部光电
  41. int z=0;          //障碍位置设定L==0,R==1
  42. double v=1;       //累计车速
  43. char val=0;
  44. double num1=1;
  45. double num2=1;
  46. double num3=1;
  47. double num4=1;
  48. double num5=1;
  49. double n1=1;
  50. double n2=1;
  51. double n4=1;
  52. double n5=1;
  53. double st=1;    //stop定时
  54. unsigned long time1;
  55. unsigned long timel=0;
  56. unsigned long timer=0;
  57. unsigned long dif=0;
  58. Servo myservo;           //创建舵机伺服对象数组
  59. unsigned char handle_ms_between( unsigned long *time_ms, unsigned int ms_between);
  60. //void handle_nled();
  61. void Motor_Forward(char motor,char pwm);
  62. void Motor_Back(char motor,char pwm); //电机反转
  63. void Motor_Right();
  64. void Motor_Left();
  65. void Distance_test();
  66. void dida(u8 times, u8 frequency);
  67. void rear_judge();
  68. void fore_judge();
  69. void correct();
  70. void R_count();
  71. void L_count();
  72. void dis();
  73. void detect();
  74. void count();
  75. void setup()
  76. {
  77.    pinMode(BEEP_PIN, OUTPUT);
  78. //  pinMode(NLED_PIN, OUTPUT);
  79.    pinMode(IR1, INPUT);
  80.    pinMode(IR2, INPUT);
  81.    pinMode(IR3, INPUT);
  82.    pinMode(IR4, INPUT);
  83.    pinMode(IR5, INPUT);
  84.    pinMode(IH2, INPUT);
  85.    pinMode(IH3, INPUT);
  86.    pinMode(IH4, INPUT);
  87.    pinMode(Echo, INPUT);   
  88.    pinMode(Trig, OUTPUT);  
  89.    Serial.begin(SER1_BAUD);
  90.    myservo.attach(Servor_Pin);
  91.    myservo.writeMicroseconds(pwm_value);
  92.    dida(1, 1000);
  93.    delay(1000);
  94. }

  95. void loop()
  96. {
  97.     while(1)
  98.     {
  99.         Distance_test();
  100.         time1=millis();
  101.         Serial.print("time:");
  102.         detect();
  103.         fore_judge();                       //前轮位置判断
  104.         rear_judge();                       //后轮位置判断
  105.         count();                            //计时  
  106.       //  dif=abs(timel-timer);
  107.        //  Serial.print("timer:");
  108.        // Serial.println(timer);
  109.        // Serial.print("timel:");
  110.        // Serial.println(timel);
  111.        //if(dif<=1600 && dif>=10)
  112.      //  {
  113.      //  correct();
  114.        // Motor_Forward(1,255);
  115.        // Motor_Forward(2,255);
  116.        // delay(5000);
  117.         // Serial.print("dif:");
  118.        //    Serial.println(dif);
  119.     //   }
  120.     //   else
  121.      //  {;}
  122.      //   Serial.println(c1);
  123.          
  124. //=======================================================
  125. //  主程序
  126. //=======================================================   
  127.         if(Out1==1 && Out2==1 && Out3==0 && Out4==1 && Out5==1)   //直行
  128.         {
  129.            v=num3;
  130.            if(hou==3)
  131.            {
  132.            Motor_Forward(1,sv-v);
  133.            Motor_Forward(2,sv-v);
  134.            myservo.writeMicroseconds(pwm_value);
  135.            }
  136.             else
  137.            {
  138.             v=num3;
  139.             v=v*0.9;
  140.            Motor_Forward(1,sv-v);
  141.            Motor_Forward(2,sv-v);
  142.            }
  143.         }
  144.         
  145.          else if(Out1==0 && Out2==1 && Out3==1 && Out4==1 && Out5==1)  //1左转
  146.         {
  147.           while( Out4==1 )
  148.         {
  149.            Motor_Left();
  150.            timel=millis();
  151.          }
  152.           num3=0;
  153.          }
  154.         
  155.         else if(Out1==1 && Out2==1 && Out3==1 && Out4==0 && Out5==1)  //4右转
  156.         {
  157.             v=num3;
  158.             v=v*0.7;
  159.             dj=1;
  160.           if(hou==3)
  161.           {
  162.            Motor_Forward(1,bv-v);                           //bv=160,v=110,num=20
  163.            Motor_Forward(2,bv-20-v-num4);
  164.            myservo.writeMicroseconds(pwm_value-80);
  165.            }
  166.            else if(hou==4 && h==0)
  167.            {
  168.            Motor_Forward(1,bv-v);
  169.            Motor_Forward(2,bv-20-v-num4);
  170.            myservo.writeMicroseconds(pwm_value-40);
  171.            }
  172.             else if(hou==2 && h==0)
  173.            {
  174.               Motor_Forward(1,bv-v);
  175.               Motor_Forward(2,bv-20-v-num4);
  176.               myservo.writeMicroseconds(pwm_value-130);
  177.            }
  178.            else if(h==1 && hou==4)
  179.            {
  180.               Motor_Forward(1,bv-v);
  181.               Motor_Forward(2,bv-20-v-num4);
  182.               myservo.writeMicroseconds(pwm_value);
  183.             }
  184.              else if(h==1 && hou==2)//-
  185.            {
  186.               Motor_Forward(1,bv-20-v-num4);
  187.               Motor_Forward(2,bv-v);
  188.               myservo.writeMicroseconds(pwm_value-180);
  189.             }
  190.             else
  191.            {
  192.             v=num3;
  193.             Motor_Forward(1,bv-v);
  194.             Motor_Forward(2,bv-v);
  195.            }
  196.         }
  197.         
  198.         else if(Out1==1 && Out2==1 && Out3==1 && Out4==1 && Out5==0)  //5右转
  199.         {
  200.           while( Out2==1)
  201.         {
  202.           Motor_Right();
  203.           timer=millis();
  204.         }   
  205.         num3=0;
  206.         }
  207.         
  208.         else if(Out1==1 && Out2==0 && Out3==1 && Out4==1 && Out5==1)  //2左转
  209.         {
  210.           v=num3;
  211.           v=v*0.7;
  212.           dj=1;
  213.            if(hou==3)             //bv=160,v=110,num=20
  214.           {
  215.            Motor_Forward(1,bv-20-v-num2);
  216.            Motor_Forward(2,bv-v);
  217.            myservo.writeMicroseconds(pwm_value+80);
  218.            }
  219.            else if(hou==2 && h==0)
  220.            {
  221.            Motor_Forward(1,bv-20-v-num2);
  222.            Motor_Forward(2,bv-v);
  223.            myservo.writeMicroseconds(pwm_value+40);
  224.            }
  225.             else if(hou==4 && h==0)
  226.            {
  227.               Motor_Forward(1,bv-v);
  228.               Motor_Forward(2,bv-30-v);
  229.               myservo.writeMicroseconds(pwm_value+130);
  230.            }
  231.            else if(h==1 && hou==2)
  232.            {
  233.               Motor_Forward(1,bv-20-v-num2);
  234.               Motor_Forward(2,bv-v);
  235.               myservo.writeMicroseconds(pwm_value);
  236.             }
  237.              else if(h==1 && hou==4)
  238.            {
  239.               Motor_Forward(1,bv-v);
  240.               Motor_Forward(2,bv-20-v-num2);
  241.               myservo.writeMicroseconds(pwm_value+180);
  242.             }
  243.             else
  244.             {
  245.             Motor_Forward(1,bv-v);
  246.             Motor_Forward(2,bv-v);
  247.             }
  248.         }
  249.        else if(Out1==0 && Out2==0 && Out3==0 && Out4==0 && Out5==0)    //stop计数
  250.         {
  251.           if(st>=100)
  252.           {
  253.             Motor_Forward(1,255);
  254.             Motor_Forward(2,255);
  255.            break;//还是用return
  256.             }
  257.             else
  258.             {;}
  259.         }
  260.        else
  261.        {
  262.          v=num3;
  263.          Motor_Forward(1,sv-v);
  264.          Motor_Forward(2,sv-v);
  265.         }
  266.         dis();
  267.     }
  268. }


  269. void Motor_Right()                      //5右转调用程序   wandaozhuanjiaodizeng
  270. {
  271.          detect();
  272.          fore_judge();
  273.          rear_judge();
  274.          R_count();
  275.          if(Out1==1 && Out2==1 && Out3==1 && Out4==1 && Out5==0)
  276.          {
  277.           if(dj==1 && h==0)
  278.           {
  279.            Motor_Forward(1,170);
  280.            Motor_Forward(2,80);
  281.            myservo.writeMicroseconds(pwm_value-360);     
  282.           }
  283.           else if(dj==1 && h==1 && hou==3)
  284.           {
  285.            Motor_Forward(1,170);
  286.            Motor_Forward(2,80);     
  287.            myservo.writeMicroseconds(pwm_value-360);
  288.           }
  289.           else if(dj==1 && h==1 && hou==2)    //-
  290.           {
  291.            Motor_Forward(1,170);
  292.            Motor_Forward(2,80);
  293.            myservo.writeMicroseconds(pwm_value-360);
  294.           }
  295.           else if(dj==1 && h==1 && hou==4)
  296.           {
  297.            Motor_Forward(1,170);
  298.            Motor_Forward(2,80);
  299.            myservo.writeMicroseconds(pwm_value-360);
  300.             }
  301.            else          //*******
  302.           {
  303.            Motor_Forward(1,160);
  304.            Motor_Forward(2,80);
  305.            myservo.writeMicroseconds(pwm_value-360);
  306.             }
  307.            //Serial.print("55");
  308.         }
  309.          else if(Out1==1 && Out2==1 && Out3==1 && Out4==0 && Out5==1)
  310.         {   
  311.            dj=0;
  312.            Motor_Forward(1,cv-n4);                 //cv=150
  313.            Motor_Forward(2,cv-60-n4);
  314.            myservo.writeMicroseconds(pwm_value-310);
  315.          //  Serial.print("54");
  316.         }
  317.          else if(Out1==1 && Out2==1 && Out3==0 && Out4==1 && Out5==1)
  318.         {
  319.            Motor_Forward(1,cv);
  320.            Motor_Forward(2,cv-30);
  321.            myservo.writeMicroseconds(pwm_value-130);
  322.          //  Serial.print("53");
  323.         }
  324.          else if(Out1==1 && Out2==1 && Out3==1 && Out4==1 && Out5==1 && f==1 && fore==0)
  325.         {
  326.            dj=0;
  327.           if(h==0 )
  328.           {
  329.            Motor_Forward(1,170);
  330.            Motor_Forward(2,100);
  331.            myservo.writeMicroseconds(pwm_value-450);   
  332.          //  Serial.print("zou");
  333.           }
  334.           else if(h==1 && hou==3)
  335.           {
  336.            Motor_Forward(1,170);
  337.            Motor_Forward(2,100);
  338.            myservo.writeMicroseconds(pwm_value-450);   
  339.          //  Serial.print("zou");
  340.           }
  341.            else if(h==1 && hou!=3)   //-
  342.           {
  343.            Motor_Forward(1,170);
  344.            Motor_Forward(2,100);
  345.            myservo.writeMicroseconds(pwm_value-450);   
  346.          //  Serial.print("zou");
  347.           }
  348.            else
  349.            {
  350.            Motor_Forward(1,cv);
  351.            Motor_Forward(2,cv);
  352.            }
  353.         }   
  354.           else
  355.        {
  356.          Motor_Forward(1,cv);
  357.          Motor_Forward(2,cv);
  358.         }
  359. }
  360. void Motor_Left()                    //1左转调用程序
  361. {
  362.         detect();
  363.         fore_judge();
  364.         rear_judge();
  365.         L_count();
  366.        if(Out1==0 && Out2==1 && Out3==1 && Out4==1 && Out5==1)
  367.         {
  368.           if(dj==1 && h==0)
  369.           {
  370.            myservo.writeMicroseconds(pwm_value+360);
  371.            Motor_Forward(1,80);
  372.            Motor_Forward(2,170);
  373.           }
  374.           else if(dj==1 && h==1 && hou==3)
  375.           {
  376.            myservo.writeMicroseconds(pwm_value+360);
  377.            Motor_Forward(1,80);
  378.            Motor_Forward(2,170);
  379.           }
  380.           else if(dj==1 && h==1 && hou==2)
  381.           {
  382.            Motor_Forward(1,80);
  383.            Motor_Forward(2,170);
  384.            myservo.writeMicroseconds(pwm_value+360);
  385.           }
  386.           else if(dj==1 && h==1 && hou==4)
  387.           {
  388.            Motor_Forward(1,80);
  389.            Motor_Forward(2,170);
  390.            myservo.writeMicroseconds(pwm_value+360);
  391.            }
  392.           else
  393.           {
  394.            Motor_Forward(1,120);
  395.            Motor_Forward(2,160);
  396.            myservo.writeMicroseconds(pwm_value+360);
  397.             }
  398.         }   
  399.            else if(Out1==1 && Out2==0 && Out3==1 && Out4==1 && Out5==1)
  400.         {
  401.           dj=0;
  402.            Motor_Forward(1,cv-60-n2);//-
  403.            Motor_Forward(2,cv-n2);
  404.            myservo.writeMicroseconds(pwm_value+310);
  405.          //  Serial.print("12");  
  406.         }
  407.         else if(Out1==1 && Out2==1 && Out3==0 && Out4==1 && Out5==1)
  408.         {
  409.            Motor_Forward(1,cv-30);//-
  410.            Motor_Forward(2,cv);
  411.            myservo.writeMicroseconds(pwm_value+130);
  412.         //   Serial.print("13");  
  413.         }
  414.          else if(Out1==1 && Out2==1 && Out3==1 && Out4==1 && Out5==1 && f==1 && fore==0)//-
  415.         {
  416.            dj=0;
  417.           if(h==0)
  418.           {
  419.            Motor_Forward(1,100);
  420.            Motor_Forward(2,170);
  421.            myservo.writeMicroseconds(pwm_value+450);   
  422.          //  Serial.print("you");
  423.            }
  424.            else if(h==1 && hou==3)
  425.             {
  426.            Motor_Forward(1,100);
  427.            Motor_Forward(2,170);
  428.            myservo.writeMicroseconds(pwm_value+450);   
  429.          //  Serial.print("you");
  430.            }
  431.            else if(h==1 && hou!=3)//-
  432.            {
  433.            Motor_Forward(1,100);
  434.            Motor_Forward(2,170);
  435.            myservo.writeMicroseconds(pwm_value+450);
  436.             }
  437.              else
  438.            {
  439.             Motor_Forward(1,160);
  440.             Motor_Forward(2,160);
  441.         }
  442.            }
  443.              else
  444.            {
  445.             Motor_Forward(1,cv);
  446.             Motor_Forward(2,cv);
  447.         }
  448. }
  449. void correct()
  450. {      
  451.   detect();
  452.   if(c1==1)
  453.   {
  454.     while(Out3==0)
  455.     {
  456.       Out3 = digitalRead(IR3);
  457.       myservo.writeMicroseconds(pwm_value+100);
  458.       Motor_Forward(1,170);
  459.       Motor_Forward(2,230);
  460.     }
  461.   }
  462.    else if(c5==1)
  463.   {
  464.     while(Out3==0)
  465.     {
  466.       Out3 = digitalRead(IR3);
  467.       myservo.writeMicroseconds(pwm_value-100);
  468.       Motor_Forward(1,230);
  469.       Motor_Forward(2,170);
  470.     }
  471.   }
  472.   else
  473.   {;}
  474.   }
  475. void rear_judge()
  476. {
  477.    if(Out2H==0 && Out3H==1 && Out4H==1)
  478.    {  hou=2;h=0;  }
  479.    else if(Out2H==1 && Out3H==0 && Out4H==1)
  480.    {  hou=3; h=0; }
  481.    else if(Out2H==1 && Out3H==1 && Out4H==0)
  482.    {  hou=4; h=0;  }
  483.     else
  484.     {h=1;}
  485.   }
  486.   void fore_judge()
  487.   {
  488.    if (Out2==0 || Out3==0 || Out4==0)
  489.    {
  490.     fore=1;
  491.     f=0;
  492.     }
  493.     else if(Out1==0 && Out2==1 && Out3==1 && Out4==1 && Out5==1)
  494.     {
  495.       fore=0;f=0;
  496.       c1=1;
  497.       c5=0;
  498.       }
  499.     else if(Out1==1 && Out2==1 && Out3==1 && Out4==1 && Out5==0)
  500.     {
  501.       fore=0;f=0;
  502.       c5=1;
  503.       c1=0;
  504.       }
  505.     else
  506.     {
  507.       f=1;
  508.       }
  509.     }
  510. void dis()
  511. {
  512.   if(Distance < 35)  //避障
  513.   {
  514.    while(Distance<35)//再次判断是否有障碍物,若有则转动方向后,继续判断
  515.   {   
  516.      Distance_test();//测量前方距离
  517.     if(z==1)
  518.     {
  519.      Motor_Forward(1,200);
  520.      Motor_Forward(2,150);
  521.      myservo.writeMicroseconds(1160);//        右转 400ms
  522.      }
  523.     else
  524.     {
  525.      Motor_Forward(1,200);
  526.      Motor_Forward(2,150);
  527.      myservo.writeMicroseconds(1700);//        右转 400ms
  528.     }
  529.    }
  530.     if(z==0)
  531.     {
  532.      Motor_Forward(1,180);
  533.      Motor_Forward(2,180);
  534.      myservo.writeMicroseconds(1430);//        右转 400ms
  535.      delay(1000);
  536.      }
  537.     else
  538.     {
  539.      Motor_Forward(1,180);
  540.      Motor_Forward(2,180);
  541.      myservo.writeMicroseconds(1430);//        右转 400ms
  542.      delay(1000);
  543.     }
  544.     if(z==0)
  545.     {
  546.      Out5 = digitalRead(IR5);
  547.      while(Out5==0)
  548.      {
  549.      Out5 = digitalRead(IR5);
  550.      Motor_Forward(1,200);
  551.      Motor_Forward(2,150);
  552.      myservo.writeMicroseconds(1160);//        右转 400ms
  553.      }
  554.     }
  555.     else
  556.     {
  557.      Out1 = digitalRead(IR1);
  558.      while(Out1==0)
  559.      {
  560.      Out1 = digitalRead(IR1);
  561.      Motor_Forward(1,200);
  562.      Motor_Forward(2,150);
  563.      myservo.writeMicroseconds(1700);//        右转 400ms
  564.     }
  565.     }
  566.    }  
  567. }
  568. void R_count()
  569. {
  570.     if(Out1==1 && Out2==1 && Out3==1 && Out4==0 && Out5==1)    //4右转计数
  571.         {
  572.             n4=n4+0.1;
  573.             if(n4>=50)
  574.            {    n4=50;            }
  575.           //Serial.print("num4:");      //输出num3
  576.           //Serial.println(num4);       //显示次数
  577.          }
  578.          else  { n4=1;  }
  579.      if(Out1==1 && Out2==1 && Out3==1 && Out4==1 && Out5==0)    //4右转计数
  580.      {
  581.             n5=n5+0.1;
  582.             if(n5>=50)
  583.            {    n5=50;            }
  584.           //Serial.print("num4:");      //输出num3
  585.           //Serial.println(num4);       //显示次数
  586.          }
  587.          else  { n5=1;  }
  588.   }
  589. void L_count()
  590. {
  591.     if(Out1==1 && Out2==0 && Out3==1 && Out4==1 && Out5==1)    //4右转计数
  592.         {
  593.             n2=n2+0.1;
  594.             if(n2>=30)
  595.            {    n2=30;            }
  596.           //Serial.print("num4:");      //输出num3
  597.           //Serial.println(num4);       //显示次数
  598.          }
  599.          else  { n2=1;  }
  600.      if(Out1==0 && Out2==1 && Out3==1 && Out4==1 && Out5==1)    //4右转计数
  601.      {
  602.             n1=n1+0.1;
  603.             if(n1>=30)
  604.            {    n1=30;            }
  605.           //Serial.print("num4:");      //输出num3
  606.           //Serial.println(num4);       //显示次数
  607.          }
  608.          else  { n1=1;  }
  609.   }
  610. void Distance_test()   // 量出前方距离
  611. {
  612.   digitalWrite(Trig, LOW);   // 给触发脚低电平2μs
  613.   delayMicroseconds(2);
  614.   digitalWrite(Trig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs
  615.   delayMicroseconds(10);
  616.   digitalWrite(Trig, LOW);    // 持续给触发脚低电
  617.   float Fdistance = pulseIn(Echo, HIGH);  // 读取高电平时间(单位:微秒)
  618.   Fdistance= Fdistance/58;       //为什么除以58等于厘米,  Y米=(X秒*344)/2
  619.   Distance = Fdistance;
  620.   if(Distance>=60)
  621.   {
  622.     Distance=60;
  623.   }
  624.   else if(Distance<=8)
  625.   {
  626.     Distance=60;
  627.   }
  628. // Serial.println(Distance);         //显示距离
  629. }
  630. void handle_nled()
  631. {
  632.     static unsigned long systick_ms_bak = 0;
  633.     if(!handle_ms_between(&systick_ms_bak, NLED_MS_BETWEEN))return;  
  634.     digitalWrite(NLED_PIN, val);
  635.     val = ~val;
  636. }

  637. void dida(u8 times, u8 frequency)
  638. {
  639.     for(byte i = 0; i < times; i++ )
  640.     {
  641.         digitalWrite(BEEP_PIN, LOW);
  642.         delay(frequency);
  643.         delay(frequency);
  644.         digitalWrite(BEEP_PIN, HIGH );
  645.         delay(frequency);
  646.         delay(frequency);  
  647.     }
  648. }
  649. unsigned char handle_ms_between( unsigned long *time_ms, unsigned int ms_between)
  650. {
  651.     if(millis() - *time_ms < ms_between)
  652.     {
  653.         return 0;  
  654.     }
  655.     else
  656.     {
  657.          *time_ms = millis();
  658.          return 1;
  659.     }
  660. }
  661. void detect()
  662. {
  663.    Out1 = digitalRead(IR1);
  664.    Out2 = digitalRead(IR2);
  665.    Out3 = digitalRead(IR3);
  666.    Out4 = digitalRead(IR4);
  667.    Out5 = digitalRead(IR5);   
  668.    Out2H = digitalRead(IH2);
  669.    Out3H = digitalRead(IH3);
  670.    Out4H = digitalRead(IH4);   
  671. }
  672. void Motor_Forward(char motor,char pwm)    //电机正转
  673. {
  674.   if(motor==1)
  675.   {
  676.      analogWrite(PWMA_IN1,pwm);
  677.      analogWrite(PWMA_IN2,255);
  678.   }
  679.   else if(motor==2)
  680.   {
  681.      analogWrite(PWMB_IN1,pwm);
  682.      analogWrite(PWMB_IN2,255);
  683.   }
  684. }

  685. void Motor_Back(char motor,char pwm)      //电机反转
  686. {
  687.   if(motor==1)
  688.   {
  689.      analogWrite(PWMA_IN1,255);
  690.      analogWrite(PWMA_IN2,pwm);
  691.   }
  692.   else if(motor==2)
  693.   {
  694.      analogWrite(PWMB_IN1,255);
  695.      analogWrite(PWMB_IN2,pwm);
  696.   }
  697. }
  698. void count()
  699. {
  700.    if(Out1==1 && Out2==1 && Out3==0 && Out4==1 && Out5==1)    //3直行计数
  701.         {
  702.             v=v+0.5;
  703.             if(v>=sv-10)
  704.            {    v=sv-10;            }
  705.            num3=v;
  706.         }
  707.         else {;}
  708.         
  709.          if(Out1==1 && Out2==1 && Out3==1 && Out4==0 && Out5==1)    //4右转计数
  710.         {
  711.             num4=num4+0.2;
  712.             if(num4>=20)
  713.            {    num4=20;            }
  714.          }
  715.          else  { num4=1;  }
  716.          
  717.          if(Out1==1 && Out2==0 && Out3==1 && Out4==1 && Out5==1)    //2左转计数
  718.         {
  719.             num2=num2+0.2;
  720.             if(num2>=20)
  721.            {     num2=20;            }
  722.          }
  723.          else  { num2=1;  }

  724.           if(Out1==0 && Out2==0 && Out3==0 && Out4==0 && Out5==0)    //stop计数
  725.         {
  726.             st=st+0.2;
  727.          }
  728.          else  { st=1;  }
  729.   }
复制代码


CX1.docx

21.78 KB, 下载次数: 6

寻迹程序

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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