Damn_intuition 发表于 2013-6-24 15:49:31

Arduino 控制 lego 红外电机

本帖最后由 Damn_intuition 于 2013-6-24 16:05 编辑

arduino通过控制红外发射头,驱动乐高 红外马达,可以同时驱动 4*2路 。

想不清啥时候写的代码了,后来发现网络上一直没见到有人共享,我就发一下。

注意,因为红外马达的接收端控制器是采用微控的,所以正反转指令发送过去后会一直生效,需要停止需要发送 停止 指令(如1,0,0)。


代码如下:

#include <IRremote.h>

int RECV_PIN = 11;
int BUTTON_PIN = 12;

IRsend irsend;

void setup()
{
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT);
}

unsigned int rawCodes;
int codeLen = 35 ;


void sendCode(int C,int A,int B){
//低是260 高是560
for (int i = 0 ;i<35 ;i=i+2) rawCodes=180;
for (int i = 1 ;i<35 ;i=i+2) rawCodes=260;
rawCodes = 1000;
rawCodes = ((abs(A) + abs(B) ==200 || abs(A) + abs(B) ==0) ?560:260);
rawCodes = ((C == 3 || C == 4)?560:260);
rawCodes = ((C == 2 || C == 4)?560:260);
rawCodes = 560;
rawCodes = ((B==-100)?560:260);
rawCodes = ((B==100)?560:260);
rawCodes = ((A==-100)?560:260);
rawCodes = ((A==100)?560:260);
//LLLL
unsigned int L;
L = rawCodes + rawCodes + rawCodes ;
rawCodes = (( L==1380 || L==780)?560:260);
L = rawCodes + rawCodes + rawCodes ;
rawCodes = (( L==1380 || L==780)?560:260);
L = rawCodes + rawCodes + rawCodes ;
rawCodes = (( L==1380 || L==780)?560:260);
L = rawCodes + rawCodes + rawCodes ;
rawCodes = (( L==1380 || L==780)?560:260);

irsend.sendRaw(rawCodes, codeLen, 38);
}

int lastButtonState;
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && buttonState == LOW) {
    sendCode(1,0,0);
    delay(50);
    sendCode(2,0,0);
    delay(50);
    sendCode(3,0,0);
    delay(50);
    sendCode(4,0,0);
    delay(50);
}
if (buttonState) {
    sendCode(4,100,100);//100 正转 -100倒转//参数格式通道,电机A,电机B
    delay(100);
}
lastButtonState = buttonState;
}




需要代码打包,可以到我的CSDN上下载,http://download.csdn.net/detail/toboxo/5641375

拾瑞 发表于 2013-6-25 08:19:05

乐高的红外电机?
是不是指,是不是乐高的红外接收+PF电机?

simatic_net 发表于 2013-7-17 17:15:53

unsigned int rawCodes; //这句我看不懂。主要不懂rawCodes是神马。
直接导致后面sendCode(int C,int A,int B)函数整段全都看不懂。
我知道我是有些基础知识没掌握。请问楼主我应该看那段资料?方便的话请给个链接,谢谢!

宋征宇 发表于 2014-3-12 22:32:04

上个视频啊!!!:)

Damn_intuition 发表于 2014-3-14 15:29:47

宋征宇 发表于 2014-3-12 22:32 static/image/common/back.gif
上个视频啊!!!

亲,你这是挖坟啊。这是我两年期玩NXT时候写的代码,我自己机器上都没有了 哈哈哈。
自己测试下吧,最重要的一句话就是:
sendCode(4,100,100);//100 正转 -100倒转//参数格式通道,电机A,电机B

Damn_intuition 发表于 2014-3-14 15:30:59

本帖最后由 Damn_intuition 于 2014-3-14 15:32 编辑

simatic_net 发表于 2013-7-17 17:15 static/image/common/back.gif
unsigned int rawCodes; //这句我看不懂。主要不懂rawCodes是神马。
直接导致后面sendCod ...

那只是一个数组而已,里面存储着待发送的红外数据高低位持续时间。
页: [1]
查看完整版本: Arduino 控制 lego 红外电机