|
本帖最后由 Damn_intuition 于 2013-6-24 16:05 编辑
arduino通过控制红外发射头,驱动乐高 红外马达,可以同时驱动 4*2路 。
想不清啥时候写的代码了,后来发现网络上一直没见到有人共享,我就发一下。
注意,因为红外马达的接收端控制器是采用微控的,所以正反转指令发送过去后会一直生效,需要停止需要发送 停止 指令(如1,0,0)。
代码如下:
[pre lang="arduino" line="1" file="LegoIR"]#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[RAWBUF];
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[1] = 1000;
rawCodes[3] = ((abs(A) + abs(B) ==200 || abs(A) + abs(B) ==0) ?560:260);
rawCodes[7] = ((C == 3 || C == 4)?560:260);
rawCodes[9] = ((C == 2 || C == 4)?560:260);
rawCodes[17] = 560;
rawCodes[19] = ((B==-100)?560:260);
rawCodes[21] = ((B==100)?560:260);
rawCodes[23] = ((A==-100)?560:260);
rawCodes[25] = ((A==100)?560:260);
//LLLL
unsigned int L;
L = rawCodes[3] + rawCodes[11] + rawCodes[19] ;
rawCodes[27] = (( L==1380 || L==780)?560:260);
L = rawCodes[5] + rawCodes[13] + rawCodes[21] ;
rawCodes[29] = (( L==1380 || L==780)?560:260);
L = rawCodes[7] + rawCodes[15] + rawCodes[23] ;
rawCodes[31] = (( L==1380 || L==780)?560:260);
L = rawCodes[9] + rawCodes[17] + rawCodes[25] ;
rawCodes[33] = (( 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;
}
[/code]
需要代码打包,可以到我的CSDN上下载,http://download.csdn.net/detail/toboxo/5641375
|
|