//----- Oled display --------------------------------------------------------------//
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//------ DHT sensor ---------------------------------//
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
//----- Include for time interrupts -----------------//
#include <TimerOne.h>
//---- Variables updated in interrupt --------//
volatile unsigned int halfsecond=0;
volatile unsigned int second=0;
volatile unsigned int minute=0;
volatile unsigned int hour=12;
//----- Include for debugging ----------------//
#include "ArduinoTrace.h"
//-------- myObjects instantiations -----------//
#include "oledDisplay.h"
#include "doProcess.h"
OledDisplay myOledDisplay;
DoProcess myDoProcess;
//---------------------------------------------//
//---- Task Scheduler ------------------------//
#include <TaskScheduler.h>
Scheduler ts;
//---- Tasks definitions----------------------//
void task1CB();
Task tTask1(100,TASK_FOREVER,&task1CB,&ts);
void task2CB();
Task tTask2(100,TASK_FOREVER,&task2CB,&ts);
//===== Tasks CallBacks ======================//
void task1CB()
{
Task1();
}
void task2CB()
{
Task2();
}
//======================== SETUP =====================//
void setup() {
// put your setup code here, to run once:
//---- Begin oled display ------------------------//
Serial.begin(115200);
// initialize and clear display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
//---- DHT begin ---------------------------------//
dht.begin();
//--- Pin configurations ------------------//
pinMode(3, INPUT_PULLUP); //slider switch
pinMode(4, INPUT_PULLUP); //button
//--- Display initial setting and clear ---//
display.setTextSize (2);
display.setTextColor (WHITE);
display.clearDisplay();
display.display();
//--- start message ---------//
Serial.println("INICIO: ");
//--- Enabling Interrupts ---//
Timer1.initialize(500000);
Timer1.attachInterrupt(timingISR); // timingISR to run every 0.5 seconds
//--- Enabling Tasks ------//
tTask1.enable();
tTask2.enable();
tTask2.delay(50);
}
//======================== LOOP =====================
void loop() {
ts.execute();
}
//======================= TASKS =====================
//---------------- TASK1 ----------------------------
void Task1()
{
myOledDisplay.run();
}
//---------------- TASK2 ----------------------------
void Task2()
{
myDoProcess.run();
}
//================== ISR ===============================
void timingISR()
{
halfsecond ++;
if(halfsecond == 2){
second ++;
if(second == 60)
{
minute ++;
if(minute == 60)
{
hour ++;
if(hour == 24)hour = 0;
minute = 0;
}
second = 0;
}
halfsecond = 0;
}
}
//=======================================================