格力空調控制
本帖最后由 Be1ieve 于 2013-8-9 21:40 编辑開始還是要推薦blueleafxp這篇:http://www.geek-workshop.com/thread-5146-1-1.html
還有瘦網蟲這篇:http://www.geek-workshop.com/thread-5095-1-1.html
沒有上面那兩篇大概我也解不出來,雖然最後還是買邏輯分析儀來解最快
房間空調用的是YAD0F,用IRremote解至少長度要開到280,加上定時長度要420
下面是控制代碼:
/*
* 格力頭: 9000 高 4400 低
*/
void sendGreeHeader(){
irsend.mark(9000);
irsend.space(4400);
}
/*
* 格力編碼:650高 1600或550低
* 編碼中斷超過10000會出問題?先以迴圈解
*/
void sendGreeMark(int time){
irsend.mark(650);
while(time > 10000){
irsend.space(10000);
time -= 10000;
}
irsend.space(time);
}
/*
* 送整組編碼,單BIT壓縮
*/
void sendGreeBits(byte* irCode, int length){
for(int i=0 ; length > 0 ; i++){ // Has unsent codes
byte bitMask = 0x80; // Highest bit of a Byte
int bitLength = (length >= 8)? 8:(length % 8);
for(int j=0 ; j < bitLength ; j++){
if(irCode & bitMask) sendGreeMark(1600); // Signal high
else sendGreeMark(550); // Signal low
bitMask >>= 1; // Shift right
}
length -= 8;
}
}
/*
* 格力編碼組:頭+35碼+中斷+32碼+中斷
*/
void sendShortGreeCode(byte *code){
sendGreeHeader();
sendGreeBits(&code,35); // 35 bits in 5 bytes
sendGreeMark(20000);
sendGreeBits(&code,32); // 32 bits in 4 bytes
sendGreeMark(40000);
}
/*
* 長編碼:兩段短編碼組成
*/
void sendLongGreeCode(byte *code){
sendShortGreeCode(&code);
sendShortGreeCode(&code);
}
附件是用分析儀解碼的方式最後再用byte方式存起來就變成下面這樣:
0x90, 0x50, 0x04, 0x0A, 0x40,
0x00, 0x44, 0x00, 0x0F,
0x90, 0x50, 0x04, 0x0E, 0x40,
0x00, 0x00, 0x00, 0x0B, 请问一下遥控器的编码规则是怎么找到的呀?
我想直接发送raw格式的,总是失败,会不会是dump出来的代码有问题? 建議先看這個http://www.geek-workshop.com/thread-5146-1-1.html
blueleafxp是把整個編碼長度定在270以下,如果解出來的長度頂到270就加大吧
dump出來的第一碼估計是完整編碼要求的間隔,接下來的就是一正一負的訊號
複製到最後面會少一個負的訊號,補個間隔進去就完成了
另外如果用uno要注意因為只有1K內存,raw碼太長很容易滿出來 您好 请问有格力遥控器的红外编码规则说明吗 它的35+32代表的意思 編碼規則大概要看格力肯不肯放出來,或有沒有人去解
這邊的數據都是在遙控器設定後讀到的 https://wenku.baidu.com/view/2197b3400b4e767f5bcfce34.html
--格力空调遥控器红外编码透析(长码)
页:
[1]