Всем привет. Помогите поправить код в нужную смторону. Собсветнно : Код (Text): #include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 #include "OasisLED.h" #include <Arduino.h> #include <IRremote.h> #include <RCSwitch.h> int RECV_PIN = 11; uint8_t clockPin = 3; uint8_t strobePin = 2; uint8_t dataPin = 4; OasisLED ledDisplay = OasisLED(clockPin, strobePin, dataPin); IRrecv irrecv(RECV_PIN); decode_results results; RCSwitch mySwitch = RCSwitch(); byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void setup() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; Wire.begin(); ledDisplay.initialize(); Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver mySwitch.enableTransmit(10); mySwitch.setPulseLength(251); second = 30; minute = 00; hour = 23; dayOfWeek = 7; dayOfMonth = 17; month = 5; year = 15; // setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); } void loop() { printTime(); } void printTime() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); ledDisplay.setValue(hour*100+minute); if(irrecv.decode(&results)) { Serial.println(results.value, HEX); if ((results.value == 0x37) || (results.value == 0x10037)) { mySwitch.send(836656,24); // если код код получен зажигаем зал } delay (500); irrecv.resume(); } } Отправляю с ИК пульта от ТВ команду на ИК приемник- ик приеник принимает код пульта philips 0x10037 и ардуина через 433 Transmitted отправляет команду на люстру в которой установлены реле. Собственно все работает. НО 1. Когда отключаю питание от ардуино - часы отстают, т.е. если отключил на 30 минут не заметно отставание, если на 2 дня, то все время ставить по новой и разница аж в несколько часов (((( 2. Как добавить в данный код такую логику: нажал кнопку на пульте (кнопка всегда одна и та же) - послалась 1 - команда на люстру, нажал еще раз -2 я , нажал 3-й - еще 1 команда. Спасибо.
Т.е. нужно перебирать команды? Для этого введите счетчик нажатий, зациклите его по количеству команд и из массива выбирайте код команды.
Вот сделал, но почему-то не хотит работать ((( Код (Text): int push_button=0; long buttons[]={836800,836656,836611}; .................. Serial.println(results.value, HEX); if ((results.value == 0x37) || (results.value == 0x10037) ) { push_button++; if (push_button==0){regim3;} if (push_button==1){regim1;} if (push_button==2){regim2;} if (push_button>2){push_button=0;} // mySwitch.send(buttons[0],24); } delay (500); irrecv.resume(); } } void regim1() { mySwitch.send(buttons[0],24); } void regim2() { mySwitch.send(buttons[1],24); } void regim3() { mySwitch.send(buttons[2],24); }
Поправил на Код (Text): if (push_button==0){regim3();} if (push_button==1){regim1();} if (push_button==2){regim2();} Вроде заработало. Осталось с часами разобраться.
Пробовал, стало намного точнее, но все равно за несколько дней убежали на 10 секунд вперед, ставил кварц с материнки, подумываю еще раз попробовать сменить кварц, а вообще лучше взять другой модуль
Вот и я о том же- везде данный модуль пользуют и у всех одни и теже проблемы. Интересно почему же на материнках он работает отлично (я про кварц), а на данный модуль ставят фигню ((( Типа дешевле?