标题:
arduino红外小车在运行时只有一侧的两个轮子运行,且都是正转,怎么调都不管用
[打印本页]
作者:
一龙大师
时间:
2018-1-19 20:45
标题:
arduino红外小车在运行时只有一侧的两个轮子运行,且都是正转,怎么调都不管用
我在运行时只有一侧的两个轮子运行,且都是正转,怎么调都不管用,求大神请教
#include <IRremote.h>
IRrecv irrecv(11);//定义的引脚
decode_results result;
#define dir1pinA 4
#define dir2pinA 5
#define speedpinA 3
#define led 8
#define dir1pinB 6
#define dir2pinB 7
#define speedpinB 9
void setup() {
Serial.begin(9600);
Serial.println("ABCD");
irrecv.enableIRIn();
delay(100);
pinMode(dir1pinA,OUTPUT);
pinMode(dir2pinA,OUTPUT);
pinMode(speedpinA,OUTPUT);
pinMode(dir1pinB,OUTPUT);
pinMode(dir2pinB,OUTPUT);
pinMode(speedpinB,OUTPUT);
pinMode(led,OUTPUT);
}
void loop() {
if(irrecv.decode(&result))
{
Serial.println(result.value);
switch(result.value)
{
case 16738455: //按键0
forward();
break;
case 16724175://按键1
allstop();
break;
case 16718055://按键2
turnright();
break;
case 16743045://按键3
turnleft();
break;
case 16716015: //按键4
daotui();
break;
default:
delay(500);
}
irrecv.resume();//接受下一个值
}
}
void allstop()
{ digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
digitalWrite(dir1pinA,LOW);
digitalWrite(dir2pinA,LOW);
digitalWrite(dir1pinB,LOW);
digitalWrite(dir2pinB,LOW);
analogWrite(speedpinA,0);
analogWrite(speedpinB,0);
delay(100);
}
//自定义函数
void forward()
{
digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
digitalWrite(dir1pinA,HIGH);
digitalWrite(dir2pinA,LOW);
digitalWrite(dir1pinB,HIGH);
digitalWrite(dir2pinB,LOW);
analogWrite(speedpinA,80);
analogWrite(speedpinB,80);
delay(100);
}
void turnleft()
{
digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
digitalWrite(dir1pinA,LOW);
digitalWrite(dir2pinA,LOW);
digitalWrite(dir1pinB,HIGH);
digitalWrite(dir1pinB,LOW);
analogWrite(speedpinA,0);
analogWrite(speedpinB,100);
delay(100);
}
void turnright()
{
digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
digitalWrite(dir1pinA,HIGH);
digitalWrite(dir2pinA,LOW);
digitalWrite(dir1pinB,LOW);
digitalWrite(dir1pinB,LOW);
analogWrite(speedpinA,100);
analogWrite(speedpinB,0);
delay(100);
}
void daotui()
{
digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
digitalWrite(dir1pinA,LOW);
digitalWrite(dir2pinA,HIGH);
digitalWrite(dir1pinB,LOW);
digitalWrite(dir1pinB,HIGH);
analogWrite(speedpinA,100);
analogWrite(speedpinB,100);
delay(100);
}
复制代码
作者:
shuyu
时间:
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);
}
}
作者:
烟花笑
时间:
2018-1-22 08:41
注意电机驱动板接线
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1