极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12459|回复: 9

新人求助-为什么我可以红外遥控LED,但电机不行??

[复制链接]
发表于 2014-12-10 20:27:24 | 显示全部楼层 |阅读模式
#include <IRremote.h>
int RECV_PIN = 11;
int a1=5;
int b1=6;
int a2=7;
int b2=8;
long left = 0x807FD02F;
long forw = 0x807FC837;
long righ = 0x807FC03F;
long ting = 0x807FE01F;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  pinMode(RECV_PIN, INPUT);   
  pinMode(a1,OUTPUT);
  pinMode(b1,OUTPUT);
  pinMode(a2,OUTPUT);
  pinMode(b2,OUTPUT);
  irrecv.enableIRIn();
}

void loop()
{
if (irrecv.decode(&results))
{
   if (results.value == left ){
     digitalWrite(b1,HIGH);
     digitalWrite(a1,LOW);
     digitalWrite(b2,LOW);
     digitalWrite(a2,LOW);
     Serial.println("1 ");
}
   if (results.value == forw ){
   digitalWrite(b1,HIGH);
digitalWrite(a1,LOW);
digitalWrite(b2,HIGH);
digitalWrite(a2,LOW);
     Serial.println("2 ");
}
   if (results.value == righ ){
     digitalWrite(b1,LOW);
     digitalWrite(a1,LOW);  
     digitalWrite(b2,HIGH);
     digitalWrite(a2,LOW);
     Serial.println("3 ");  
}
   if (results.value == ting ){
            digitalWrite(b1,LOW);
            digitalWrite(a1,LOW);
            digitalWrite(b2,LOW);
            digitalWrite(a2,LOW);
     Serial.println("4 ");
        }                        
   irrecv.resume();
}
}

我在5,6,7,8插LED,遥控完全没问题,然后把5678连接上双L9910的四个脚,怪事来了,只能遥控一次,第二次按键就不予理睬了,为什么啊,百思不得其解啊。。。
回复

使用道具 举报

 楼主| 发表于 2014-12-10 20:44:44 | 显示全部楼层
int a1=5;
int b1=6;
int a2=7;
int b2=8;
int val;

void setup()
{
  Serial.begin(9600);
  pinMode(a1,OUTPUT);
  pinMode(b1,OUTPUT);
  pinMode(a2,OUTPUT);
  pinMode(b2,OUTPUT);
}

void loop()
{
val=Serial.read();
   if (val == 'L'){
     digitalWrite(b1,HIGH);
     digitalWrite(a1,LOW);
     digitalWrite(b2,LOW);
     digitalWrite(a2,LOW);
     Serial.println("LEFT ");
   }
   if (val == 'F'){
   digitalWrite(b1,HIGH);
   digitalWrite(a1,LOW);
   digitalWrite(b2,HIGH);
   digitalWrite(a2,LOW);
   Serial.println("FORW ");
}
   if (val == 'R'){
     digitalWrite(b1,LOW);
     digitalWrite(a1,LOW);  
     digitalWrite(b2,HIGH);
     digitalWrite(a2,LOW);
     Serial.println("RIGH ");  
}
   if (val == 'S'){
     digitalWrite(b1,LOW);
     digitalWrite(a1,LOW);
     digitalWrite(b2,LOW);
     digitalWrite(a2,LOW);
     Serial.println("STOP ");
    }                        
}


这样写,电机也控制得非常好。为什么把红外遥控的替换上去就不行了哩??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 20:46:15 | 显示全部楼层
奇怪的是控制LED时非常完美的啊,为啥不能控制电机?难不成是需要加什么上拉下拉?我晕了,求指点啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 20:59:31 | 显示全部楼层
更晕的出现了,经过测试,“left”键,摁了之后,可以摁“ting”,这样若干次都没问题。

但摁了“righ”或者"forw"后,下一个摁键就不起作用了。

而且,原来要复位UNO才可以停,现在发现把串口监视器关了,再开时,就停下了,相当于重启了一下,又可以摁键了

我已经把5678调成其他口了,也不行。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 21:33:38 | 显示全部楼层
本帖最后由 三月的石头 于 2014-12-10 22:57 编辑

是不是和控制电机的模块有关?我用的是YL-86 电机模块:
1 双 L9110S 芯片的电机驱动
2 模块供电电压:2.5-12V
3 适合的电机范围:电机工作电压 2.5v-12V 之间,最大工作电流 0.8A
4 可以同时驱动 2 个直流电机,或者 1 个 4 线 2 相式步进电机。

IA1 输入高电平,IB1 输入低电平, 【OA1 OB1】电机正转;
IA1 输入低电平,IB1 输入高电平, 【OA1 OB1】电机反转;
IA2 输入高电平,IB2 输入低电平, 【OA2 OB2】电机正转;
IA2 输入低电平,IB2 输入高电平, 【OA2 OB2】电机反转;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 22:59:05 | 显示全部楼层
现在发现是其中一个直流电机的问题,两个直流电机,一个是没问题的,另一个其中一个方向动了之后,就再也不接收其他信号了。

在淘宝买的劣质电机啊。。。
回复 支持 反对

使用道具 举报

发表于 2014-12-10 23:18:22 | 显示全部楼层
首先,你买的便宜的电机,工作时可能会产生比较大的干扰,如果你使用的是非全隔离的电机驱动板,干扰可能就会影响控制板。
解决办法有两种,1,使用高品质的低干扰电机。
2,使用全隔离的电机驱动板。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-11 12:41:08 来自手机 | 显示全部楼层
本帖最后由 三月的石头 于 2014-12-11 23:30 编辑


非常感谢弘毅老师!
那您说的这两个在哪找或买?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-11 23:48:57 | 显示全部楼层
今天又试了一下,单独给UNO和电机供电,可以解决这个问题,看来是电流干扰。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 07:38 , Processed in 0.082527 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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