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
乐高的红外电机?
是不是指,是不是乐高的红外接收+PF电机? unsigned int rawCodes; //这句我看不懂。主要不懂rawCodes是神马。
直接导致后面sendCode(int C,int A,int B)函数整段全都看不懂。
我知道我是有些基础知识没掌握。请问楼主我应该看那段资料?方便的话请给个链接,谢谢! 上个视频啊!!!:) 宋征宇 发表于 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:32 编辑
simatic_net 发表于 2013-7-17 17:15 static/image/common/back.gif
unsigned int rawCodes; //这句我看不懂。主要不懂rawCodes是神马。
直接导致后面sendCod ...
那只是一个数组而已,里面存储着待发送的红外数据高低位持续时间。
页:
[1]