пульт ДУ для Сплит-системы LESSAR
- Войдите на сайт для отправки комментариев
Пт, 24/08/2012 - 15:17
пытаюсь из arduino сделать пульт ДУ для кондиционера
словил затык, казалось бы на самом простом - обеспечить несущуюю в 38 кГц
есть описание протокола (перевел машинным переводом вперемешку гугл и бинг):docs.google.com/document/d/184FB4ha5hK1ua-goIIRJ_uSNdlOpXjykpWlw8N8x1CM/edit
int pin = 13; byte FanSpeed=5<<5; //3 старших бита в последовательности В отвечают за скорость вентилятора (низкая скорость) //0 фиксированная скорость, 1 высокая скорость, 2 средняя скорость, 4 низкая скорость, 5 авто скорость byte b40=B00011111; // 5 младших битов в последовательности В (заглушка) byte TempMode=7<<4; //4 старших бита в последовательности С отвечают за температуру (22 градуса) // 0 - 17град, 1 - 18град, 3 - 19град, 2 - 20град, 6 - 21град, 7 - 22град, 5 - 23град, 4 - 24град, // 12 - 25град, 13 - 26град, 9 - 27град, 8 - 28град, 10 - 29град, 11 - 30град, 14 - Нет определения byte Mode=2<<2; // 3 и 4 биты справа в последовательности С отвечают за режим работы кондиционера // 0 охлаждение, 1 сушка(вентилятор), 2 авто режим, 3 обогрев byte c10=0; // 2 младших бита в последовательности С (заглушка) void setup(){ Serial.begin(115200); pinMode(pin, OUTPUT); byte A= B10110010; //последовательность А byte B=FanSpeed^b40; //последовательность В byte C=TempMode^Mode^c10; //последовательность С byte invA =~A; //обратная последовательность А byte invB =~B; //обратная последовательность В byte invC =~C; //обратная последовательность С Serial.println(A,BIN); Serial.println(invA,BIN); Serial.println(B,BIN); Serial.println(invB,BIN); Serial.println(C,BIN); Serial.println(invC,BIN); Serial.println(""); byte code[] = { A,invA,B,invB,C,invC }; for (int t=0;t<6;t++){ //Serial.print(code[t],BIN); for ( int i=0;i<sizeof(code[t])*8;i++){ Serial.print(bitRead(code[t],i)); } } Serial.println(""); } void loop(){ L(); AABBCC(FanSpeed,b40,TempMode,Mode,c10); term_sign(); S(); L(); AABBCC(FanSpeed,b40,TempMode,Mode,c10); term_sign(); noTone(pin); // выключаем светодиод delay (30000); //пауза } void L(){ //Стартовый бит noTone(pin); // выключаем светодиод delayMicroseconds(4400); // пауза tone(pin, 38000); // зажигаем светодиод delayMicroseconds(4400);// пауза } void S(){ //разделительный бит noTone(pin); // выключаем светодиод delayMicroseconds(540); // пауза tone(pin, 38000); // зажигаем светодиод delayMicroseconds(5220);// пауза } void zero(){ //ноль noTone(pin); // выключаем светодиод delayMicroseconds(540); // пауза tone(pin, 38000); // зажигаем светодиод delayMicroseconds(540);// пауза } void one (){ //единица noTone(pin); // выключаем светодиод delayMicroseconds(540); // пауза tone(pin, 38000); // зажигаем светодиод delayMicroseconds(1620);// пауза } void term_sign(){ //делитель noTone(pin); // выключаем светодиод delayMicroseconds(540); // пауза tone(pin, 38000); // зажигаем светодиод delayMicroseconds(540);// пауза } void AABBCC(byte FanSpeed,byte b40,byte TempMode,byte Mode,byte c10){ byte A= B10110010; //последовательность А byte B=FanSpeed^b40; //последовательность В byte C=TempMode^Mode^c10; //последовательность С byte invA =~A; //обратная последовательность А byte invB =~B; //обратная последовательность В byte invC =~C; //обратная последовательность С int code[] = { A,invA,B,invB,C,invC }; for (int t=0;t<3;t++){ //Serial.print(code[t],BIN); for ( int i=0;i<sizeof(code[t])*8;i++){ if (bitRead(code[t],i)==0){ zero(); } else{ one(); } } //Serial.println(""); } }
большая просьба помочь разобраться что у меня пошло не так, тк кондиционер не отвечает на сигнал
блин, случайно нажал enter не успев закончить название темы...
пульт ДУ для Сплит-системы LESSAR
есть целый проект про пульты http://www.pjrc.com/teensy/td_libs_IRremote.html
Получилось сделать проект?
Ну, совместными усилиями вроде бы получилось)
Здесь, правда выложена модификация для Меги (работа на 9 пине). На уно и др должно работать по-умолчанию на 3 (нужно удалить 8 и 9 строки pinMode и digitalWrite)
Отсылает пакет во время подачи питания (ну или после нажатия ресета) один раз.
осталось продумать пути доставки данных на ардуину (bluetooth, Wi-Fi, ну или сразу на ESP8266 делать без ардуины.)