找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4417|回复: 2
收起左侧

arduino红外小车在运行时只有一侧的两个轮子运行,且都是正转,怎么调都不管用

[复制链接]
ID:236125 发表于 2018-1-19 20:45 | 显示全部楼层 |阅读模式
50黑币
我在运行时只有一侧的两个轮子运行,且都是正转,怎么调都不管用,求大神请教
  1. #include <IRremote.h>
  2. IRrecv irrecv(11);//定义的引脚
  3. decode_results result;
  4. #define dir1pinA 4
  5. #define dir2pinA 5
  6. #define speedpinA  3
  7. #define led 8
  8. #define dir1pinB 6
  9. #define dir2pinB 7
  10. #define speedpinB  9



  11. void setup() {
  12.    Serial.begin(9600);
  13.    Serial.println("ABCD");
  14.    irrecv.enableIRIn();
  15.    delay(100);
  16.    pinMode(dir1pinA,OUTPUT);
  17.    pinMode(dir2pinA,OUTPUT);
  18.    pinMode(speedpinA,OUTPUT);
  19.    pinMode(dir1pinB,OUTPUT);
  20.    pinMode(dir2pinB,OUTPUT);
  21.    pinMode(speedpinB,OUTPUT);
  22.    pinMode(led,OUTPUT);
  23. }
  24. void loop() {
  25.   if(irrecv.decode(&result))
  26.   {
  27.       Serial.println(result.value);
  28.       switch(result.value)
  29.       {
  30.         case 16738455: //按键0
  31.         forward();
  32.         break;
  33.         case 16724175://按键1
  34.         allstop();
  35.         break;
  36.         case 16718055://按键2
  37.         turnright();
  38.         break;
  39.         case 16743045://按键3
  40.         turnleft();
  41.         break;
  42.         case 16716015: //按键4
  43.         daotui();
  44.         break;
  45.         default:
  46.         delay(500);  

  47.       }   
  48.      irrecv.resume();//接受下一个值
  49.    }
  50. }
  51. void allstop()
  52. {         digitalWrite(led,HIGH);
  53.           delay(500);
  54.           digitalWrite(led,LOW);
  55.            digitalWrite(dir1pinA,LOW);
  56.            digitalWrite(dir2pinA,LOW);
  57.            digitalWrite(dir1pinB,LOW);
  58.            digitalWrite(dir2pinB,LOW);
  59.            analogWrite(speedpinA,0);
  60.           analogWrite(speedpinB,0);
  61.           delay(100);
  62. }
  63. //自定义函数
  64. void forward()
  65. {         
  66.            digitalWrite(led,HIGH);
  67.            delay(500);
  68.            digitalWrite(led,LOW);
  69.            digitalWrite(dir1pinA,HIGH);
  70.            digitalWrite(dir2pinA,LOW);
  71.            digitalWrite(dir1pinB,HIGH);
  72.            digitalWrite(dir2pinB,LOW);

  73.           analogWrite(speedpinA,80);
  74.           analogWrite(speedpinB,80);
  75.           delay(100);
  76. }
  77. void turnleft()
  78. {
  79.        digitalWrite(led,HIGH);
  80.         delay(500);
  81.         digitalWrite(led,LOW);
  82.         digitalWrite(dir1pinA,LOW);
  83.         digitalWrite(dir2pinA,LOW);
  84.         digitalWrite(dir1pinB,HIGH);
  85.         digitalWrite(dir1pinB,LOW);

  86.        analogWrite(speedpinA,0);
  87.        analogWrite(speedpinB,100);
  88.        delay(100);
  89. }
  90. void turnright()
  91. {      
  92.          digitalWrite(led,HIGH);
  93.         delay(500);
  94.         digitalWrite(led,LOW);
  95.         digitalWrite(dir1pinA,HIGH);
  96.         digitalWrite(dir2pinA,LOW);
  97.         digitalWrite(dir1pinB,LOW);
  98.         digitalWrite(dir1pinB,LOW);

  99.         analogWrite(speedpinA,100);
  100.         analogWrite(speedpinB,0);
  101.         delay(100);

  102. }

  103. void daotui()
  104. {

  105.         digitalWrite(led,HIGH);
  106.         delay(500);
  107.         digitalWrite(led,LOW);
  108.         digitalWrite(dir1pinA,LOW);
  109.         digitalWrite(dir2pinA,HIGH);
  110.         digitalWrite(dir1pinB,LOW);
  111.         digitalWrite(dir1pinB,HIGH);

  112.         analogWrite(speedpinA,100);
  113.         analogWrite(speedpinB,100);
  114.         delay(100);
  115. }
复制代码




回复

使用道具 举报

ID:277999 发表于 2018-1-20 17:22 | 显示全部楼层
自己做的,用了lm358,L298n,不知道你是不是自己焊接的,358连接的就是红外传感器,程序如下,希望对你有用。
#include <STC89C5xRC.H>

#define uint unsigned int
#define uchar unsigned char

/************定义358信号口引脚**************/
sbit left358=P1^0;                //(注意P要大写)
sbit right358=P1^1;

/***********定义车子前进后退引脚***********/
sbit leftgo=P0^0;           //左边轮子前进       
sbit leftback=P0^1;           //左边轮子后退
sbit rightgo=P0^2;           //右边轮子前进
sbit rightback=P0^3;   //右边轮子后退

void delay_ms(uint xms)
{
        uchar x=0,y=0;
        for(x=xms;x>0;x--)
        {
                for(y=110;y>0;y--);
        }
}

void forward()         //车子前进
{
        leftback=1;                   //1、0代表高低电平
    leftgo=0;
    rightback=1;
    rightgo=0;
}

void turnright()           //车子右转
{
        leftback=1;
    leftgo=0;
    rightback=0;
    rightgo=1;
}

void turnleft()                   //车子左转
{
        leftback=0;
    leftgo=1;
    rightback=1;
    rightgo=0;
}

void stop()                           //停车
{
        leftback=1;
    leftgo=1;
    rightback=1;
    rightgo=1;
}

void main()                          //主函数 (单片机所要执行的部分)
{
        if(left358==1&&right358==1)         //当左358为高电平且右358为高电平时,小车前进
        {
                forward();
                delay_ms(50);
        }
        if(left358==0&&right358==0)          //当左358为低电平且右358为低电平时,小车前进
        {
                forward();
                delay_ms(50);
        }
        if(left358==1&&right358==0)          //当左358为高电平且右358为低电平时,小车右转
        {
                turnright();
                delay_ms(50);
        }
        if(left358==0&&right358==1)          //当左358为低电平且右358为高电平时,小车左转
        {
                turnleft();
                delay_ms(50);
        }
}
回复

使用道具 举报

ID:278202 发表于 2018-1-22 08:41 来自手机 | 显示全部楼层
注意电机驱动板接线
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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