Помогите зажечь светодиод в определенное время
- Войдите на сайт для отправки комментариев
Сб, 22/02/2014 - 21:01
Всем доброго дня, делаю какое то подобие контроллера для аквариума, сейчас оно включает в себя дисплей 1602, датчик DS18B20, часы 1307, это все работает и время показывает и температуру, теперь хочу сделать чтобы допустим с 18.00 часов до 23.00 часов загорался светодиод (в будущаем после отладки планируется подключение вместо него твердотельного реле и лампы) модскажите пожалуйста как этом можно сделать ?
Вот код:
#include <DS1307new.h> #include <Wire.h> // for i2c protocol #include <OneWire.h> // http://www.pjrc.com/teensy/td_libs_OneWire.html // http://milesburton.com/Dallas_Temperature_Control_Library OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2); // 0x20 is adresss for LCC 16x2 byte grad[8] = { B01110, B10001, B10001, B01110, B00000, B00000, B00000, }; int ics =0; //count number of sensor void setup(){ Serial.begin(9600); lcd.init(); lcd.backlight(); //backlight is now ON // set up the LCD's number of columns and rows: lcd.createChar(0, grad); lcd.begin(16, 2); // Print a logo message to the LCD. lcd.print("AQUACONTROLLER"); lcd.setCursor(0, 1); lcd.print("--------------"); delay (2500); lcd.clear(); // Print a message to the LCD. // lcd.setCursor(1, 0); // lcd.print("temperatura in"); // lcd.setCursor(1, 1); // lcd.print("mai multe zone"); // delay (2500); // lcd.clear(); } void loop(){ byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius; if ( !ds.search(addr)) { // lcd.clear(); lcd.setCursor(0, 1); // lcd.print("doar "); // lcd.print(ics); // lcd.print(" senzor(i)"); ds.reset_search(); ics=0; /// начало кода часов/// RTC.getTime(); if (RTC.hour < 10) { Serial.println(); Serial.print("0"); Serial.print(RTC.hour, DEC); } else { Serial.print(RTC.hour, DEC); } Serial.print(":"); if (RTC.minute < 10) { Serial.print("0"); Serial.print(RTC.minute, DEC); } else { Serial.print(RTC.minute, DEC); } Serial.print(":"); if (RTC.second < 10) { Serial.print("0"); Serial.print(RTC.second, DEC); } else { Serial.print(RTC.second, DEC); } Serial.print(" "); if (RTC.day < 10) { Serial.print("0"); Serial.print(RTC.day, DEC); } else { Serial.print(RTC.day, DEC); } Serial.print("-"); if (RTC.month < 10) { Serial.print("0"); Serial.print(RTC.month, DEC); } else { Serial.print(RTC.month, DEC); } Serial.print("-"); Serial.print(RTC.year, DEC); Serial.print(" "); switch (RTC.dow) { case 1: Serial.print("MON"); break; case 2: Serial.print("TUE"); break; case 3: Serial.print("WED"); break; case 4: Serial.print("THU"); break; case 5: Serial.print("FRI"); break; case 6: Serial.print("SAT"); break; case 7: Serial.print("SUN"); break; return; } ics++; ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(750); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } //lcd.clear(); //lcd.setCursor(0, 1); // lcd.print("ROM="); // for( i = 0; i < 8; i++) { // lcd.print(' '); // lcd.print(addr[i], HEX); // } if (OneWire::crc8(addr, 7) != addr[7]) { lcd.print("CRC is not valid!"); return; } celsius = (float)raw / 16.0; lcd.setCursor(0,0); lcd.print("Temp"); lcd.print(ics); lcd.print(" = "); lcd.print(celsius); lcd.write(byte(0)); lcd.print("C "); //вывод часов на дисплей// lcd.setCursor(0, 1); lcd.print(RTC.hour); lcd.print(":"); lcd.print(RTC.minute); lcd.print(":"); lcd.print(RTC.second); lcd.print(" "); //lcd.print(RTC.dow); //lcd.print(RTC.month); //lcd.print("-"); //lcd.print(RTC.year); lcd.setCursor(10, 1); switch (RTC.dow) // Friendly printout the weekday { case 1: lcd.print("MON"); break; case 2: lcd.print("TUE"); break; case 3: lcd.print("WED"); break; case 4: lcd.print("THU"); break; case 5: lcd.print("FRI"); break; case 6: lcd.print("SAT"); break; case 7: lcd.print("SUN"); break; } lcd.print("-"); lcd.print(RTC.day); delay(500); } }
И конструкцию
можно заменить равноценной:
И конструкцию
можно заменить равноценной:
Благодарю за совет, сегодня вечером попробую и отпишусь :)
Алгоритм суточного таймера | Аппаратная платформа Arduino
И конструкцию
можно заменить равноценной:
Спасибо, все заработало как надо :) и скетч маленько оптимизировал по вашему совету
Еще может быть кто подскажет почему не выводится день недели , ну тоесть MON,TUE,WED... вместо него кажет 0 и все, что на дисплее что в serial
---------------------
Все, исправил вот так все заработало
В операторе switch команду return применять нежелательно, а в твоем случае она вообще лишняя.
В операторе switch команду return применять нежелательно, а в твоем случае она вообще лишняя.
OK, подправил :)
В операторе switch команду return применять нежелательно, а в твоем случае она вообще лишняя.
Это где такое сказано? Ссылку, пожалуйста (я про нежелательное применение return внутри switch). Ваша фантазия?
Мужыки еще вопрос, есть идея подключить модуль сетевой w5100 подскажите какие пины он использует ?
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
в вышеприведенном коде какой смысл от использования return без аргументов? Только затрудняет понимание кода через пару месяцев ;)
Я ж не утверждаю, что это вообще запрещено, иногда даже уместно:
В том контексте прозвучало, что не стоит применять вообще, а в твоём случае - нафиг не нужно, потому и удивило
в вышеприведенном коде какой смысл от использования return без аргументов? Только затрудняет понимание кода через пару месяцев ;)
Я ж не утверждаю, что это вообще запрещено, иногда даже уместно:
Не, это будет баг какой то.
Не будет.
Всем доброго дня, пошел следующий этап разработки моего аквариумного "контроллера" :) и очередной затык, не могу вывести на страничку сервера из стандартного примера показания температуры, помогите пожалуйста кто может
Отвечу сам себе - победил я этот сервер, думаю стоит продолжить тему в форуме Проекты, а именно тут http://arduino.ru/forum/proekty/akvariumnyi-kontroller