помогите с небольшой проблемкой
- Войдите на сайт для отправки комментариев
Пт, 24/10/2014 - 21:42
0.96" Oled дисплей i2c.
ds1302 часики
dht11 термодатчик.
написал вот такой кодик. хотел добавить такую функцию, чтобы каждый час, ну или по заданным параметрам
времени в самом коде либо мигал диодиком,ну или бибикал. типа в 18:22 включал свет на 5 мин . и что-бы с термодатчиком так-же можно было делать. перепробывал разные подходы , ну никак не заставить. в програмировании я слабоват. Помогите если кто может.
#include <Arduino.h>
#include <Wire.h>
#include <MicroLCD.h>
#include <dht.h>
#include <DS1302.h>
#define dht_dpin A0 //no ; here. Set equal to channel sensor is on
DS1302 rtc(2, 3, 4);
dht DHT;
//LCD_SH1106 lcd; /* for SH1106 OLED module */
LCD_SSD1306 lcd; /* for SSD1306 OLED module */
static const PROGMEM uint8_t cels[] =
{
0x00, 0x00, 0xF0, 0xF8, 0x18, 0x18, 0x18, 0x38, 0x30, 0x00, 0x00, 0x30, 0x48, 0x48, 0x30, 0x00,
0x00, 0x00, 0x0F, 0x1F, 0x18, 0x18, 0x18, 0x1C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static const PROGMEM uint8_t perc[] ={
0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x80, 0xC0, 0x60, 0x38, 0x1C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x20, 0x38, 0x1C, 0x06, 0x03, 0x01, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00
};
static const PROGMEM uint8_t smile[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE8, 0xEC, 0xCE, 0x8E, 0x8E, 0x8C,
0x88, 0x80, 0x80, 0x00, 0x3C, 0x78, 0xF0, 0xC0, 0xC0, 0xDC, 0x58, 0x10, 0x00, 0xFE, 0xFE, 0xFE,
0x26, 0x6E, 0xFC, 0xF8, 0xD0, 0x80, 0x00, 0xFE, 0xFE, 0xFE, 0x6E, 0x6E, 0x6C, 0x48, 0x00, 0x00,
0x00, 0xFE, 0xFE, 0xFE, 0xCE, 0xCE, 0xDE, 0xFC, 0xF8, 0x30, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x1E,
0x3C, 0x78, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0xF0, 0xF8, 0xFC, 0x9E, 0x0E, 0x0E, 0x0E, 0x9E, 0xFC,
0xF8, 0x70, 0x00, 0xE0, 0xE8, 0xEC, 0xCE, 0x8E, 0x2E, 0x6C, 0xE8, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02,
0x00, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
0xFF, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC,
0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0x10, 0x08, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x18, 0x30, 0xF8, 0xFE, 0xFF, 0xFF,
0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x0F, 0xFF, 0x7F, 0xFF, 0x0C, 0x10, 0x30, 0x60, 0x60, 0xC0, 0xC0, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x60, 0x20, 0x30, 0x18, 0xFE, 0xFF, 0xBF, 0x1F, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x3E, 0x78, 0xF1, 0xF2, 0xE2, 0xE2, 0xC6, 0x04, 0x0D, 0x0F, 0x1E, 0x00,
0x00, 0x00, 0x1C, 0x0F, 0x0D, 0x0D, 0xC4, 0xE6, 0xE2, 0xF2, 0xF1, 0xF9, 0x7C, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x1F, 0x00, 0x00, 0x06, 0x1E,
0x1E, 0x1E, 0x0E, 0x02, 0x00, 0x00, 0x1F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7E, 0x7E, 0x4A, 0x4A, 0x4A, 0x40, 0x00, 0x7E, 0x7E, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7E,
0x7E, 0x4A, 0x4A, 0x4A, 0x40, 0x00, 0x3C, 0x7E, 0x62, 0x42, 0x42, 0x42, 0x00, 0x02, 0x7E, 0x7E,
0x02, 0x02, 0x02, 0x00, 0x7E, 0x7E, 0x26, 0x6E, 0x7C, 0x58, 0x00, 0x3C, 0x7E, 0x62, 0x62, 0x7E,
0x3E, 0x00, 0x7E, 0x7E, 0x18, 0x30, 0x7E, 0x7E, 0x00, 0x42, 0x7E, 0x7E, 0x00, 0x3C, 0x7E, 0x62,
0x42, 0x42, 0x42, 0x00, 0x5C, 0x5E, 0x5A, 0x7A, 0x7A, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x42, 0x7E, 0x7E, 0x00, 0x7E, 0x7E, 0x18, 0x30, 0x7E, 0x7E, 0x00, 0x3C, 0x7E, 0x62, 0x42,
0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const PROGMEM uint8_t tick[16 * 16 / 8] =
{0x00,0x80,0xC0,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x78,0x30,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00};
const PROGMEM uint8_t cross[16 * 16 / 8] =
{0x00,0x0C,0x1C,0x3C,0x78,0xF0,0xE0,0xC0,0xE0,0xF0,0x78,0x3C,0x1C,0x0C,0x00,0x00,0x00,0x30,0x38,0x3C,0x1E,0x0F,0x07,0x03,0x07,0x0F,0x1E,0x3C,0x38,0x30,0x00,0x00};
void setup()
{
lcd.begin();
lcd.draw(smile, 128, 64);
delay(1000);
lcd.clear();
}
void loop()
{
DHT.read11(dht_dpin);
lcd.setCursor(0, 0);
lcd.println(rtc.getDOWStr());
lcd.setCursor(50, 0);
lcd.println(rtc.getDateStr());
lcd.setFontSize(FONT_SIZE_MEDIUM);
lcd.setCursor(0, 2);
lcd.println(rtc.getTimeStr());
lcd.setFontSize(FONT_SIZE_SMALL);
delay(100);
lcd.setCursor(0, 5);
lcd.print(" T=");
lcd.print(DHT.temperature);
lcd.print(" Celsius");
lcd.setCursor(0, 6);
lcd.print(" H=");
lcd.print(DHT.humidity);
lcd.print(" %");
}
Можно вот так:
#include <Arduino.h> #include <Wire.h> #include <MicroLCD.h> #include <dht.h> #include <DS1302.h> #define dht_dpin A0 //no ; here. Set equal to channel sensor is on DS1302 rtc(2, 3, 4); dht DHT; //LCD_SH1106 lcd; /* for SH1106 OLED module */ LCD_SSD1306 lcd; /* for SSD1306 OLED module */ int ledPin = 13; // Светодиод подключенный к вход/выходу 13 unsigned long lastTime = 0; void setup() { pinMode(ledPin, OUTPUT); // устанавливает режим работы - выход lcd.begin(); lcd.draw(smile, 128, 64); delay(1000); lcd.clear(); lastTime = millis(); } void loop() { if (millis() - lastTime > 3600000) { // 3600 тысяч миллисекунд = 1 час lastTime = millis(); digitalWrite(ledPin, HIGH); // включает светодиод delay(1000); // ждет секунду digitalWrite(ledPin, LOW); // выключает светодиод } DHT.read11(dht_dpin); lcd.setCursor(0, 0); lcd.println(rtc.getDOWStr()); lcd.setCursor(50, 0); lcd.println(rtc.getDateStr()); lcd.setFontSize(FONT_SIZE_MEDIUM); lcd.setCursor(0, 2); lcd.println(rtc.getTimeStr()); lcd.setFontSize(FONT_SIZE_SMALL); delay(100); lcd.setCursor(0, 5); lcd.print(" T="); lcd.print(DHT.temperature); lcd.print(" Celsius"); lcd.setCursor(0, 6); lcd.print(" H="); lcd.print(DHT.humidity); lcd.print(" %"); }Спасибо. попробую
Я так понимаю что надо что то делать в заданное время, а не через промежуток времени (несмотря на то, что часто это может значить одно и то же)
Вариант предложенный leds, предусматривает не использовать модуль часов, и не будет зависить от времени вобще. Т.е. через час после заливки скетча и каждый час.
и там ещё можно напоротся на переполнение millis и обнуление...
Я бы предпочёл читать время из модуля часов и после этого что то уже делать.
Вы правы hugoboss317. именно это мне и надо. я пробывал несколько вариантов из других скечей. но неполучается. я пока не силен в програмировании.
Можно попробовать сделать следущее:
Добавить в библиотеку функцию для чтения значений времени, но не для формирования массива символов, как это уже есть.
т.е. не
а, допустим (как назвать решаем сами):
и соответственно в файл cpp вставляем
byte DS1302::getTimeD(uint8_t poss) //считать время { byte time; _burstRead(); switch(poss) { case REG_SEC: time = _decode(_burstArray[0]); break; case REG_MIN: time = _decode(_burstArray[1]); break; case REG_HOUR:time = _decodeH(_burstArray[2]);break; case REG_DATE:time = _decode(_burstArray[3]); break; case REG_MON: time = _decode(_burstArray[4]); break; case REG_DOW: time = _burstArray[5]; break; case REG_YEAR:time = _decode(_burstArray[6]); break; } return time; }где poss от 0 до 6 и прочитает секунды, минуты ..... год ( 0 -> секунды , 6 -> год)
а в файл .h нужно впихнуть прототип этой функции
сразу после
Выглядить в итоге должно примерно так:
byte m, ch; m = getTimeD(1); //присваеваем значение текущих минут сh = getTimeD(2); // ...текущего часа if(ch == 14 && m == 20) {} // делаем что надо (целую минуту)я так понял добовлять надо в библиотеку часов. или в сам скеч?
я так понял добовлять надо в библиотеку часов. или в сам скеч?
Часов конечно. .cpp и .h это файлы библиотеки. На сколько я вижу, Вы используете DS1302.
ok попробуем.