////////////////////////////////////////////////////////////////////////////////
// Name: Couveuse1-04 //
// 01 = WIFI test and optimizing. //
// 02 = Data output adapted to PHP an clock handling optimized. //
// Wifimodule present checked. //
// 03 = Homecomming. First tests in new casing. //
// LED, Reset, Relais, DS18B20, Wifi //
// 04 = Homecomming, Ethernet. First tests in new casing. //
// Not yet implemented: LEDdisplay, SD-card //
// http://robotigs.com/robotigs/includes/bots_header.php?idbot=17 //
// Robot that controls Couveuse1 //
// Created by: HARB rboek2@gmail.com May 2020 GPL copyrights //
// Platform: Arduino Mega 2560 //
////////////////////////////////////////////////////////////////////////////////
// As outputs the following modules are mounted: //
// - Standard Arduino Onboard LED (PWM) //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=185 //
// - 3 color LED (PWM) //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=293 //
// - Activ loudspeaker / buzzer //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=240 //
// - 220 Vac Relay //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=189 //
// //
// As inputs the following modules are mounted: //
// - DS1307 Real Time Clock //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=289 //
// - Temp DS18B20 //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=180 //
// //
// For communications and statistics are mounted: //
// - Standard Serial Monitor output //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=43 //
// - Lan ENC28J60 unit //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=313 //
// - SD card //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=116 //
// - Wifi card //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=238 //
////////////////////////////////////////////////////////////////////////////////
// SET PRECOMPILER OPTIONS *****************************************************
//Initialse conditional compiling, uncomment to include, comment to exclude --
// Do comment for runtime versions
//#define RS232 //Uncomment to include Serial Monitor sections
//Define the needed header files for the precompiler, no charge if not used --
#include <RTClib.h> //Manipulates clock via I2C needs Wire.h lib DS1307
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=289
#include <Wire.h> //Needed ao by RTClib: Two Wire Interface lib TWI DS1307
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=31
#include <OneWire.h> //Library can be installed through Arduino IDE DS18B20
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=180
#include <EEPROM.h> //Needed to read or write settings in EEPROM
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=312
#include <SPI.h> //Serial Peripheral Interface requiered by software SD-CARD
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=28
//#include <SD.h> //Include SD library software for SD-CARD
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=116
#include <EtherCard.h> //Librairy for Lan ENC28J60 unit
//http://robotigs.nl/robotigs/includes/parts_header.php?idpart=313
#include <WiFiEsp.h> //Librairy for ESP01 Wifi unit
//http://robotigs.nl/robotigs/includes/parts_header.php?idpart=238
//Define PINS ----------------------------------------------------------------
OneWire term1(38); //Connects to pin 17, but may be any DIO pin DS1820
#define heaterPin 40 //220Vac DIO output pin connects VERWARMING RELAY1
#define lightPin 42 //220Vac DIO output pin connects VERLICHTING RELAY2
#define ledRedPin 44 //3 Colour LED, which PWM pin connects RED LED
#define ledGrePin 45 //3 Colour LED, which PWM pin connects GREEN LED
#define ledBluPin 46 //3 Colour LED, which PWM pin connects BLUE LED
#define buzActPin A0 //Define DIO output pin connects ACTIV BUZZER
#define clockChisel 32 //Device select line intended for TWI DS1307
const int chipSelect = 49;//SPI Chip select LAN pin mut be 53, so SDcard is 49
//#define SpiMISO 50 //PB3 -- MISO/PCINT3 SPI pin LAN ENC28J60
//#define SpiMOSI 51 //PB2 -- MOSI/PCINT2 SPI pin LAN ENC28J60
//#define SpiSCK 52 //PB1 -- SCK/PCINT1 SPI pin LAN ENC28J60
//#define SpiSS 53 //PB0 -- CS/PCINT0 SPI pin LAN ENC28J60
//Define LIBRARY variables ---------------------------------------------------
//Sd2Card card; //Set up variables using the SD utility library functions
//SdVolume volume; //Set up variables using the SD utility library functions
//SdFile root; //Set up variables using the SD utility library functions
//Define EEPROM variables ----------------------------------------------------
int progHeater = EEPROM.read(1); //VERWARMING 1=off 2=auto 3=on RELAY1
int tempOn = EEPROM.read(2); //Temp Celcius verwarming ON RELAY1
int tempOff = EEPROM.read(3); //Temp Celcius verwarming OFF RELAY1
int progLed = EEPROM.read(4); //VERLICHTING 1=off 2=auto 3=on RELAY2
int hoursLed = EEPROM.read(5); //Burning hours around 13:00 RELAY2
int ledRedBril = EEPROM.read(6); //Current brillance of RED LED
int ledGreBril = EEPROM.read(7); //Current brillance of GREEN LED
int ledBluBril = EEPROM.read(8); //Current brillance of BLUE LED
int freqMeasSec= EEPROM.read(9); //Measurement sensors every seconds SYS
int versionMaj = EEPROM.read(10); //Versie Major SYS
int versionMin = EEPROM.read(11); //Versie Minor SYS
int versionRev = EEPROM.read(12); //Versie Revision SYS
int serialNum = EEPROM.read(13); //Serial Number SYS
char ssid[] = "Ranonkel9"; //Network SSID (name) WIFI
char pass[] = "Kat14_-5"; //Network password WIFI
//Define DATABASE VARIABLES --------------------------------------------------
int jaar = 1991; //Read or set the year DS1307
int maand = 12; //Read or set the month DS1307
int dag = 31; //Read or set the dag DS1307
int uur = 23; //Read or set the uur DS1307
int minuut = 59; //Read or set the minuut DS1307
int seconde = 59; //Read or set the seconds DS1307
float tempDS18B20; //Sensor temperature in Celsius DS18B20
bool heaterStatus = HIGH; //Status HIGH=off or LOW=on VERWARMING RELAY1
bool lightStatus = HIGH; //Status 1=off, 0=on VERLICHTING RELAY2
bool wifiPresent = false; //Test if a wifi card is installed
//Define variables -----------------------------------------------------------
bool ledOnBoardVal = LOW; //You choose HIGH=on or LOW=off for LED_BUILTIN
static byte mymac[] = {0x00,0x01,0x02,0x03,0x04,0x16}; //For LAN ENC28J60
String inStri = "No answer received"; //Set basic string LAN ENC28J60
String striLine = ""; //LAN ENC28J60
byte present = 0; //Used for oneWire, present = ds.reset() DS18B20
byte i; //Used for oneWire, loopcounter byte array DS18B20
byte data[12]; //Used for oneWire to store data read from DS18B20
byte type1_s = 0; //Type 0 = ok, except old DS1820=1, DS18B20
byte addr1[8]; //Array with first 8 bytes, inc/address DS18B20
int status = WL_IDLE_STATUS; //Status of the ESP01 WIFI
static String html = ""; //Creating response string INTERNET
word readCounter = 0; //Read sensors if counted down to zero SENSORS
int startHour; //Switch ON time VERLICHTING
int finishHour; //Switch OFF time VERLICHTING
int panel = 1; //Panel to PERFORM
char commando = 0; //Command to PERFORM
int value = 6; //Set a temperature or hours for PERFORM
char char5[5]; //Needed to convert float to string LAN ENC28J60
String receiveStr = ""; //Commands received by html INTERNET
int tmp1; //Can be used anywhere
String tmpStr = " "; //Can be used anywhere
//Initialize OBJECTS ---------------------------------------------------------
uint8_t Ethernet::buffer[700]; //For internet communication use LAN ENC28J60
BufferFiller bfill; //LAN ENC28J60
DS1307 rtc; //Initialize Real Time Clock object DS1307
WiFiEspServer server(80); //Start the webserver WIFI
RingBuffer buf2(8); //Ringbuffer increases speed and reduces memory WIFI
//END OF PRECOMPILER OPTIONS ---------------------------------------------------
void setup() { //Setup runs once ***********************************************
disable_jtag(); //Disable jtag to free port C, enabled by default SYSTEM
Serial.begin(115200); //Nothing more needed for the Serial Monitor RS232
Serial1.begin(57600); //This cannel is used for WIFI
Serial1.setTimeout(1000); //Max wait in ms before returning as an error WIFI
//Was 1000 naar 2000 vanwege klok op tijdzetten probleem
pinMode(LED_BUILTIN, OUTPUT); //Arduino boards contain an onboard LED_BUILTIN
//pinMode(buzActPin, OUTPUT); //Set this pin as output to BUZZER
pinMode(ledRedPin, OUTPUT); //Set this pin as output to redLED
pinMode(ledBluPin, OUTPUT); //Set this pin as output to blueLED
pinMode(ledGrePin, OUTPUT); //Set this pin as output to greenLED
pinMode(heaterPin, OUTPUT); //Set this pin as output to RELAY1
digitalWrite(heaterPin, heaterStatus); //Switches OFF the RELAY1
pinMode(lightPin, OUTPUT); //Set this pin as output to RELAY2
digitalWrite(lightPin, lightStatus); //Switches OFF the RELAY2
//Start objects --------------------------------------------------------------
freqMeasSec = 4000; //Enkel nodig tijdens testen, anders loopt het te snel
//EEPROMfirstTime(); //First time use, set values in EEPROM
Wire.begin(); //Start the Two Wire Interface object I2C DS1307
rtc.begin(); //Initialize Wire.begin first. Start the object running DS1307
//rtc.adjust(DateTime(__DATE__, __TIME__)); //Set to time compiled DS1307
DS1820_init(); //Determins the type of DS1820 and reads properties DS1820
initWiFI(); //Initializes and connects to network WIFI
initVerlichting(); //Calculate start and finisch time VERLICHTING
//Test hardware and software -------------------------------------------------
testLEDs(); //PWM fade in and fade out for 3in1 + on board LED
//testRelay(); //Switches ON for 2 seconds the RELAY
testLAN(); //Ethernet obtain an IP-address by DHCP and show on monitor
//testSdCard(); //Contact SD card and show all info on monitor
//ESP01setSpeed(); //Initializes the modem to 57600 ESP01 WIFI
//testWIfi(); //AT system test & AT+GMR version show on monitor
Serial.println(" "); //Show the user the setup is done RS232
Serial.println("Setup completed"); //Show the user the setup is done RS232
Serial.println(" "); //Show the user the setup is done RS232
//beep(1); //Create a test beep with KY-012 active BUZZER
} //End of setup ---------------------------------------------------------------
static word homePage() { //Setting up internet buffer filler -------------------
long t = millis() / 1000;
word h = t / 3600;
byte m = (t / 60) % 60;
byte s = t % 60;
bfill = ether.tcpOffset();
bfill.emit_p(PSTR(
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n"
"\r\n"
"$D $D $D $D $D $D $S $D $D $D $D $D $D $D\r\n"),
jaar,
maand,
dag,
uur,
minuut,
seconde,
dtostrf(tempDS18B20,3,2,char5),
heaterStatus,
progHeater,
tempOn,
tempOff,
lightStatus,
progLed,
hoursLed
);
return bfill.position();
} //End of Setting up internet buffer filler -----------------------------------
void loop() { //KEEP ON RUNNING THIS LOOP FOREVER *****************************
readClock(); //Read timestamp and write results into variables DS1307
readSensors(); //Read sensors at timed intervals only
checkWifi(); //Check if any request available and if so then respond WIFI
checkEthernet(); //Check if valid ethernet data is received LAN ENC28J60
//checkRS232(); //Check if valid data is received RS232
//toggle_ledOnBoard(); //Toggles on-board LED ON or OFF LED_BUILTIN
} //End of void loop() ----------------------- KEEP ON RUNNING THIS LOOP FOREVER
void readClock(){ //Read timestamp and write results into variables DS1307 *****
DateTime now = rtc.now(); //Read clock object DS1307
jaar = now.year(); //Needed to http respond the right date and time
maand = now.month(); //Needed to http respond the right date and time
dag = now.day(); //Needed to http respond the right date and time
uur = now.hour(); //Needed to http respond the right date and time
minuut = now.minute(); //Needed to http respond and watering switch
seconde = now.second(); //Needed to http respond the right date and time
} //Exit readClock -------------------------------------------------------------
void readSensors() { //Read sensors at timed intervals only ********************
if (readCounter == 0){ //Only perform measurements if counted down TIMER
analogWrite(ledGrePin, ledGreBril); //Green HIGH=on, LOW=off activityLED
DS1820_read(); //Reads the temperature in Celsius from DS18B20
setRelay1(); //VERWARMING switch, calculate and set RELAY1
setRelay2(); //VERLICHTING switch, calculate and set RELAY2
readCounter = freqMeasSec; //RESET the counter TIMER
refreshAnswer(); //Replace the old answer by a new one WIFI
Serial.println(html); //Show activity to the user RS232
digitalWrite(ledGrePin, LOW); //Blue HIGH=on, LOW=off activityLED
}else{ //Meaning counter was not yet zero TIMER
readCounter--; //Decrement of the timer counter TIMER
} //End of if (moistureCnt1 == 0)Perform measurements if counted down TIMER
} //Exit readSensors -----------------------------------------------------------
void refreshAnswer(void) { //Replace the old answer by a new one WIFI **********
html = String(jaar) + " "; //Timestamp
html += String(maand) + " "; //Timestamp
html += String(dag) + " "; //Timestamp
html += String(uur) + " "; //Timestamp
html += String(minuut) + " "; //Timestamp
html += String(seconde) + " "; //Timestamp
html += String(tempDS18B20) + " "; //Temperature in Celcius DS18B20
html += String(heaterStatus) + " "; //Status HIGH=off LOW=on VERWARMING RELAY1
html += String(progHeater) + " "; //VERWARMING 1=off 2=auto 3=on RELAY1
html += String(tempOn) + " "; //Temperature Celcius verwarming ON RELAY1
html += String(tempOff) + " "; //Temperature Celcius verwarming OFF RELAY1
html += String(lightStatus) + " "; //Status HIGH=off LOW=on VERLICHTING RELAY2
html += String(progLed) + " "; //VERLICHTING 1=off 2=aut 3=off RELAY2
html += String(hoursLed) + " "; //Hours around 13:00h VERLICHTING RELAY2
html += String(freqMeasSec); //How often will the sensors be read
} //Exit refreshAnswer ---------------------------------------------------------
void checkRS232() { //Check if valid data is received RS232 ********************
if (Serial.available() > 0) { //Check bytes received, -1 is empty buffer RS232
receiveStr = Serial.readStringUntil('\r'); //Read until CR Carriage Return
performCommand(); //Do as user orders to do for all streams
}//End of serial available
} //Exit checkRS232 ------------------------------------------------------------
void sendHttpResponse(WiFiEspClient client) { //Sends measurements WIFI ********
client.println("HTTP/1.1 200 OK"); //Start answer to the request WIFI
client.println("Connection: close"); //Close after html is finished WIFI
client.println("Content-Type: text/html"); //Needed to be compatible WIFI
client.println(" /n \n"); //Needed to end the headers WIFI
client.println(html); //Broadcast the message to be shown in browser WIFI
} //Exit sendHttpResponse ------------------------------------------------------
void checkWifi(){ //Check if any request available and if so then respond WIFI
if (wifiPresent == true) { //Wifi is up and running
WiFiEspClient client = server.available();//Listen for incoming clients WIFI
if (client) { //If you get a client then do WIFI
digitalWrite(ledBluPin, HIGH); //Blue HIGH=on, LOW=off activityLED
receiveStr = client.readStringUntil('\n'); //Read until first CRLF
client.flush(); //Empty the buffer with the rest of the request
performCommand(); //Do as user orders to do for all streams
sendHttpResponse(client); //Meaning the end of the HTTP request
client.stop(); //Close the Wifi connection WIFI
digitalWrite(ledBluPin, LOW); //Blue HIGH=on, LOW=off activityLED
} //End of if (client) //If you get a client then do WIFI
} // End of if (wifiPresent == true) //Wifi is up and running
} //Exit checkWifi -------------------------------------------------------------
void checkEthernet() { //Check if valid ethernet data is received LAN ENC28J60 *
word pos = ether.packetLoop(ether.packetReceive()); //Read and empty buffer
if (pos) { //Check if valid tcp data is received
digitalWrite(ledRedPin, HIGH); //BLUE HIGH=on, LOW=off BLUE LED
receiveStr = (char *) Ethernet::buffer + pos; //Reads from HTML
performCommand(); //Do as user orders to do for all streams
ether.httpServerReply(homePage()); //Send web page data
digitalWrite(ledRedPin, LOW); //Blue HIGH=on, LOW=off Switch OFF BLUE LED
} //End of if (pos) Check if valid tcp data is received
} //Exit checkBuffer -----------------------------------------------------------
void performCommand() { //Check if any command has been raised *****************
tmpStr = receiveStr.substring(7, 8); //Extract command 01-99
panel = tmpStr.toInt(); //Translate the function to a executable
Serial.println(panel); //Showing we handeld a request RS232
tmpStr = receiveStr.substring(9, 10); //Extract command 01-99
commando = tmpStr.toInt(); //Translate the function to a executable
tmpStr = receiveStr.substring(11,15); //Extract value 01-255
value = tmpStr.toInt(); //Translate into a temerature or hours setting
Serial.print("-"); //Showing we handeld a request RS232
Serial.print(receiveStr); //Showing we handeld a request RS232
Serial.print("-"); //Showing we handeld a request RS232
Serial.print(panel); //Showing we handeld a request RS232
Serial.print("-"); //Showing we handeld a request RS232
Serial.print(commando + 48); //Showing we handeld a request RS232
Serial.println("-"); //Showing we handeld a request RS232
switch (panel) { //Go to the according panel /flora/includes/florabot.php
case 1: //==================================== Command panel 1 = DS1307 KLOK
switch (commando) { //Go to the according procedure
case 1: //Adjust clock with given time DS1307
tmpStr = receiveStr.substring(11, 15); //Extract 0000-9999
jaar = tmpStr.toInt(); //Translate the data into a year
tmpStr = receiveStr.substring(16, 18); //Extract 01-12
maand = tmpStr.toInt(); //Translate the data into a month
tmpStr = receiveStr.substring(19, 21); //Extract 01-31
dag = tmpStr.toInt(); //Translate the data into a day
tmpStr = receiveStr.substring(22, 24); //Extract 00-23
uur = tmpStr.toInt(); //Translate the data into a hour
tmpStr = receiveStr.substring(25, 27); //Extract 00-59
minuut = tmpStr.toInt(); //Translate the data into a minute
tmpStr = receiveStr.substring(28, 30); //Extract 00-59
seconde = tmpStr.toInt(); //Translate the data into a seconds
Serial.println("YES"); //Showing we handeld a request RS232
Serial.println(uur); //Showing data at RS232
Serial.println(minuut); //Showing data at RS232
Serial.println(seconde); //Showing data at RS232
rtc.adjust(DateTime(jaar, maand, dag, uur, minuut, seconde)); //DS1307
setRelay2(); //VERLICHTING switch, calculate and set RELAY2
break; //case 1: Adjust clock with given time DS1307
} //End of switch (commando) Go to the according procedure
break; //Command panel 1 = DS1307 KLOK
case 2: //===================================== Command panel 2 = VERWARMING
switch (commando) { //Go to the according procedure
case 1: //Set program 1 => VERWARMING OFF
progHeater = 1; //0=unknown, 1=off, 2=on, 3=auto
EEPROM.write(1, 1); //Write 1 byte into eeprom
setRelay1(); //Calculate and set relay1
break;
case 2: //Set program 2 => VERWARMING AUTO
progHeater = 2; //0=unknown, 1=off, 2=on, 3=auto
EEPROM.write(1, 2); //Write 1 byte into eeprom
setRelay1(); //Calculate and set relay1
break;
case 3: //Set program 3 => VERWARMING ON
progHeater = 3; //0=unknown, 1=off, 2=on, 3=auto
EEPROM.write(1, 3); //Write 1 byte into eeprom
setRelay1(); //Calculate and set relay1
break;
case 4: //Set aanschakeltemperatuur VERWARMING
tempOn = value; //Set to reading
EEPROM.write(2, tempOn); //Write 1 byte into eeprom
setRelay1(); //Calculate and set relay1
break;
case 5: //Set uitschakeltemperatuur VERWARMING
tempOff = value; //Set to reading
EEPROM.write(3, tempOff); //Write 1 byte into eeprom
setRelay1(); //Calculate and set relay1
break;
} //End of switch (commando)
break; //Command panel 2 = VERWARMING
case 3: //==================================== Command panel 3 = VERLICHTING
switch (commando) { //Go to the according procedure
case 1: //Set program 1 => VERLICHTING OFF
progLed = 1; //0=unknown, 1=off, 2=on, 3=auto
EEPROM.write(4, 1); //Write 1 byte into eeprom
setRelay2(); //Calculate and set relay2
break;
case 2: //Set program 2 => VERLICHTING AUTO
progLed = 2; //0=unknown, 1=off, 2=on, 3=auto
EEPROM.write(4, 2); //Write 1 byte into eeprom
setRelay2(); //Calculate and set relay2
break;
case 3: //Set program 3 => VERLICHTING ON
progLed = 3; //0=unknown, 1=off, 2=on, 3=auto
EEPROM.write(4, 3); //Write 1 byte into eeprom
setRelay2(); //Calculate and set relay2
break;
case 4: //Set aanschakeltemperatuur VERLICHTING
hoursLed = value; //Set to reading
EEPROM.write(5, hoursLed); //Write 1 byte into eeprom
initVerlichting(); //Calculate start and finisch time verlichting
setRelay2(); //Calculate and set relay2
break;
} //End of switch (commando)
break; //Command panel 3 = VERLICHTING
} //End of switch (panel) the according panel /flora/includes/florabot.php
refreshAnswer(); //Replace the old answer by a new one WIFI
} //Exit performCommand --------------------------------------------------------
void setRelay1(){ //HEATER switch, calculate and set RELAY1 ********************
switch (progHeater) { //HEATER program: 1=off 2=auto 3=on RELAY1
case 1: //Program = 1 = Set program VERWARMINGSMAT OFF
heaterStatus = HIGH; //Status HIGH=off, LOW=on VERWARMINGSMAT RELAIS1
break; //End of Program = 1 = Set program VERWARMINGSMAT OFF
case 2: //Program = 3 = Set program VERWARMINGSMAT AUTO
if (tempDS18B20 < tempOn){ //If treshold measurement TURN ON
heaterStatus = LOW; //Status HIGH=off or LOW=on HEATER ON RELAY1
} //End of If treshold measurement TURN ON
if (tempDS18B20 > tempOff){ //If treshold measurement TURN OFF
heaterStatus = HIGH; //Status HIGH=off or LOW=on HEATER ON RELAY1
} //End of If treshold measurement TURN OFF
break; //End of Program = 2 = Set program COIL HEATER AUTO
case 3: //Program = 3 = Set program VERWARMINGSMAT ON
heaterStatus = LOW; //Status HIGH=off or LOW=on VERWARMINGSMAT RELAY3
break; //End of Program = 3 = Set program VERWARMINGSMAT ON
} //End of switch HEATER
digitalWrite(heaterPin, heaterStatus); //Switches RELAY1
} //Exit setRelay1 -------------------------------------------------------------
void setRelay2(){ //VERLICHTING switch, calculate and set RELAY2 ***************
switch (progLed) { //VERLICHTING program: 1=off 2=auto 3=on RELAY2
case 1: //Program = 1 = Set program GROEIVERLICHTING OFF
lightStatus = HIGH; //Status HIGH=off or LOW=on GROEIVERLICHTING RELAY4
break; //Case 1 End of Program = 1 = Set program GROEIVERLICHTING OFF
case 2: //Program = 2 = Set program VERLICHTING AUTO
if (uur < startHour){ //Too early, VERLICHTING OFF
lightStatus = HIGH; //Switch OFF , HIGH=off LOW=on VERLICHTING OFF
} //End of if (currenthour < starthours){ //Too early, VERLICHTING OFF
if (uur > finishHour){ //Too late, VERLICHTING OFF
lightStatus = HIGH; //Switch OFF , HIGH=off LOW=on VERLICHTING OFF
} //End of if (currenthour > finishhours) Too late, VERLICHTING OFF
if (uur > (startHour-1) && uur < (finishHour)){ //ON
lightStatus = LOW; //Switch ON , HIGH=off LOW=on VERLICHTING ON
} //End of if (currenthour > (starthours-1) && currenthour <(finishhours)
break; //Case 2 End of Program = 2 = Set program VERLICHTING AUTO
case 3: //Program = 3 = Set program VERLICHTING ON
lightStatus = LOW; //Status HIGH=off or LOW=on VERLICHTING RELAY2
break; //Case 3 End of Program = 3 = Set program VERLICHTING ON
} //End of switch (progLed) VERLICHTING program: 1=off 2=auto 3=on RELAY2
digitalWrite(lightPin, lightStatus); //Switch VERLICHTING RELAY2
} //Exit setRelay2 -------------------------------------------------------------
void initVerlichting() { //Calculate start and finisch time VERLICHTING ********
startHour = 13 - (hoursLed / 2); //Calculate switch ON time VERLICHTING
finishHour = 13 + (hoursLed / 2); //Calculate switch OFF time VERLICHTING
} //Exit initVerlichting -------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// PIN ALLOCATIONS TABLE ARDUINO MEGA 2560 //
// Board -Atmel- PIN - Function - External Connection FUNC //
// //
// CONNECTIONS RAILS RIGHT TOP: DIGITAL PWM<~> ****************************** //
// SCL - 43 - PD0 - SCL/INT0 - Clock DS1307 purple TWI //
// SDA - 44 - PD1 - SDA/INT1 - Clock DS1307 white TWI //
// AREF - 98 - REF - AREF - REF //
// 13 PWM - 26 - PB7 - OC0A/OC1C/PCINT17 - LED Arduino LED_BUILTIN PWM //
// 12 PWM - 25 - PB6 - OC1B/PCINT16 - PWM //
// 11 PWM - 24 - PB5 - OC1A/PCINT5 - PWM //
// 10 PWM - 23 - PB4 - OC2A/PCINT4 - PWM //
// 9 PWM - 18 - PH6 - OC2B - PWM //
// 8 PWM - 17 - PH5 - OC4C - PWM //
// //
// CONNECTIONS RAILS RIGHT MIDDLE: DIGITAL PWM<~> *************************** //
// 7 PWM - 16 - PH4 - OC4B - PWM //
// 6 PWM - 15 - PH3 - OC4A - PWM //
// 5 PWM - 5 - PE3 - OC3A/AIN1 - PWM //
// 4 PWM - 1 - PG5 - OC0B - PWM //
// 3 PWM - 7 - PE5 - OC3C/INT5 - INT //
// 2 PWM - 6 - PE4 - OC3B/INT4 - INT //
// 1 TX0 - 3 - PE1 - TXD0 - Serial monitor PC TX0 //
// 0 RX0 - 2 - PE0 - RXD0/PCINT8 - Serial monitor PC RX0 //
// //
// CONNECTIONS RAILS RIGHT BOTTOM: DIGITAL PWM<~> *************************** //
// 14 TX3 - 64 - PJ1 - TXD3/PCINT10 - TX3 //
// 15 RX3 - 63 - PJ0 - RXD3/PCINT9 - RX3 //
// 16 TX2 - 13 - PH1 - TXD2 - TX2 //
// 17 RX2 - 12 - PH0 - RXD2 - RX2 //
// 18 TX1 - 46 - PD3 - TXD1/INT3 - WIFI SERIAL INT TX1 //
// 19 RX1 - 45 - PD2 - RXD1/INT2 - WIFI SERIAL INT RX1 //
// 20 SDA - 44 - PD1 - SDA/INT1 - DS1307 I2C Clock white TWI //
// 21 SCL - 43 - PD0 - SCL/INT0 - DS1307 I2C Clock purple TWI //
// //
// CONNECTIONS RAILS LEFT TOP: POWER **************************************** //
// NC - - - - Not Connected //
// IOREF - - - 3.3/5Vdc - Outputs controller voltage //
// 5V - 7 - VCC - VCC - VCC //
// RES - 1 - RES - PCINT14/RESET - RES //
// 3.3V - - - - //
// 5V - - - - //
// GND - - - - //
// GND - - - - //
// Vin - - - 7/9Vdc power in - //
// //
// CONNECTIONS RAILS LEFT MIDDLE : ANALOG IN ******************************** //
// A0 - 97 - PF0 - ADC0 - ADC //
// A1 - 96 - PF1 - ADC1 - ADC //
// A2 - 95 - PF2 - ADC2 - ADC //
// A3 - 94 - PF3 - ADC3 - ADC //
// A4 - 93 - PF4 - ADC4/TCK - ADC //
// A5 - 92 - PF5 - ADC5/TMS - ADC //
// A6 - 91 - PF6 - ADC6/TDO - ADC //
// A7 - 90 - PF7 - ADC7/TDI - ADC //
// //
// CONNECTIONS RAILS LEFT BOTTOM: ANALOG IN ********************************* //
// A8 - 89 - PK0 - ADC8/PCINT16 - ADC //
// A9 - 88 - PK1 - ADC9/PCINT17 - ADC //
// A10 - 87 - PK2 - ADC10/PCINT18 - ADC //
// A11 - 86 - PK3 - ADC11/PCINT19 - ADC //
// A12 - 85 - PK4 - ADC12/PCINT20 - ADC //
// A13 - 84 - PK5 - ADC13/PCINT21 - ADC //
// A14 - 83 - PK6 - ADC14/PCINT22 - ADC //
// A15 - 82 - PK7 - ADC15/PCINT23 - ADC //
// //
// CONNECTIONS DOUBLE RAILS BOTTOM ****************************************** //
// Board -Atmel- PIN - Function - External Connection FUNC //
// 5V - - 5Vdc- 5Vdc - VCC //
// 5V - - 5Vdc- 5Vdc - VCC //
// 22 - 78 - PA0 - AD0 - DIO //
// 23 - 77 - PA1 - AD1 - DIO //
// 24 - 76 - PA2 - AD2 - DIO //
// 25 - 75 - PA3 - AD3 - DIO //
// 26 - 74 - PA4 - AD4 - DIO //
// 27 - 73 - PA5 - AD5 - DIO //
// 28 - 72 - PA6 - AD6 - DIO //
// 29 - 71 - PA7 - AD7 - DIO //
// 30 - 60 - PC7 - A14 - DIO //
// 31 - 59 - PC6 - A15 - DIO //
// 32 - 58 - PC5 - A13 - DIO //
// 33 - 57 - PC4 - A12 - DIO //
// 34 - 56 - PC3 - A11 - DIO //
// 35 - 55 - PC2 - A10 - DIO //
// 36 - 54 - PC1 - A9 - DIO //
// 37 - 53 - PC0 - A8 - DIO //
// 38 - 50 - PD7 - T0 - DS18B20 Soil temperature DIO //
// 39 - 70 - PG2 - ALE - DIO //
// 40 - 52 - PG1 - RD - Relay1 VERWARMING DIO //
// 41 - 51 - PG0 - WR - DIO //
// 42 - 42 - PL7 - - Relay2 VERLICHTING DIO //
// 43 - 41 - PL6 - - DIO //
// 44 - 40 - PL5 - OC5C - 3 Color led Red PWM //
// 45 - 39 - PL4 - OC5B - 3 Color led Green PWM //
// 46 - 38 - PL3 - OC5A - 3 Color led Blue PWM //
// 47 - 37 - PL2 - T5 - DIO //
// 48 - 36 - PL1 - ICP5 - DIO //
// 49 - 35 - PL0 - ICP4 - SDcard Chip Select green DIO //
// 50 - 22 - PB3 - MISO/PCINT3 - Lan ENC28J60 / SDcard orange SPI //
// 51 - 21 - PB2 - MOSI/PCINT2 - Lan ENC28J60 / SDcard yellow SPI //
// 52 - 20 - PB1 - SCK/PCINT1 - Lan ENC28J60 / SDcard blue SPI //
// 53 - 19 - PB1 - SS/PCINT0 - ENC28J60 Chip Select green SPI //
// GND - - GND - GND - GND //
// GND - - GND - GND - GND //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// EEPROM MEMORY MAP: //
// Start End Number Description //
// 0000 0000 1 Never use this memory location to be AVR compatible //
// 0001 0001 1 WATER propWaterProg program 1=off 2=on 3=auto RELAY1 //
// 0002 0002 1 If capac1 reaches this propWaterON*10 then set RELAY1 //
// 0003 0003 1 Number seconds*10 propWaterSecs water on RELAY1 //
// 0004 0004 1 GROEILED1 propLED1Prog program 1=off 2=on 3=auto RELAY2 //
// 0005 0005 1 Number of propLED1hours around noon groeiled1 RELAY2 //
// 0006 0006 1 VERWARMING propHeatProg program 1=off 2=on 3=auto RELAY3 //
// 0007 0007 1 propHeatON/10 (0-25,5) aanschakeltemperatuur RELAY3 //
// 0008 0008 1 propHeatOFF/10 (0-25,5) uitschakeltemperatuur RELAY3 //
// 0009 0009 1 GROEILED2 propLED2prog program 1=off 2=on 3=auto RELAY4 //
// 0010 0010 1 Number of propLED2hours around noon groeiled2 RELAY4 //
////////////////////////////////////////////////////////////////////////////////
//345678911234567892123456789312345678941234567895123456789612345678971234567898
////////////////////////////////////////////////////////////////////////////////
// FUSES (can always be altered by using the STK500) //
// On-Chip Debug Enabled: off (OCDEN=0) //
// JTAG Interface Enabled: off (JTAGEN=0) //
// Preserve EEPROM mem through the Chip Erase cycle: On (EESAVE = 0) //
// Boot Flash section = 2048 words, Boot startaddr=$3800 (BOOTSZ=00) //
// Boot Reset vector Enabled, default address=$0000 (BOOTSTR=0) //
// CKOPT fuse (operation dependent of CKSEL fuses (CKOPT=0) //
// Brown-out detection level at VCC=2,7V; (BODLEVEL=0) //
// Ext. Cr/Res High Freq.; Start-up time: 16K CK + 64 ms (CKSEL=1111 SUT=11) //
// //
// LOCKBITS (are dangerous to change, since they cannot be reset) //
// Mode 1: No memory lock features enabled //
// Application Protect Mode 1: No lock on SPM and LPM in Application Section //
// Boot Loader Protect Mode 1: No lock on SPM and LPM in Boot Loader Section //
////////////////////////////////////////////////////////////////////////////////
void DS1820_read(void) { //Reads the temperature from DS1820 in Celsius ********
term1.reset(); //Reset whatever still was running
term1.select(addr1); //Set the parameters for the library
term1.write(0x44); //Start conversion, with parasite power on at the end
delay(800); //Maybe 750ms is enough, maybe not, takes a lot of time though
present = term1.reset(); //We assume that the conversion is ready
term1.select(addr1); //Set the parameters for the library
term1.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { //We need 9 bytes
data[i] = term1.read(); //Read byte by byte
} //End of reading bytes
int16_t raw = (data[1] << 8) | data[0]; //Rotate the data
tempDS18B20 = (float)raw / 16.0; //Untill they are in the correct position
} //Exit DS1820_read -----------------------------------------------------------
void initWiFI(){ //Initializes and connects to network WIFI ********************
WiFi.init(&Serial1); //Initialize ESP01 module WIFI
if (WiFi.status() == WL_NO_SHIELD) { //Check the presence of the module WIFI
Serial.println("Geen wifi module gevonden"); //Show error to the user RS232
}else{ //Else of if (WiFi.status() == WL_NO_SHIELD)
while (status != WL_CONNECTED) { //Attempt connecting to WiFi network WIFI
Serial.print("Attempting to connect to WPA SSID: "); //Show info at RS232
Serial.println(ssid); //Show fixed network name to the user RS232
status = WiFi.begin(ssid, pass); //Connected to WPA/WPA2 network
} //End of while (status != WL_CONNECTED)Keep on trying until connected WIFI
printWifiStatus(); //Show relevant network settings to the user RS232
server.begin(); //Start the web server on port 80 WIFI
wifiPresent = true; //Wifi is up and running
} //End of if (WiFi.status() == WL_NO_SHIELD) Check the presence WIFI
} //End of initWiFI(){ Initializes and connects to network ---------------------
void printWifiStatus() { //Show relevant network settings to the user RS232 ****
Serial.println("You're connected to the network"); //Used at initialisation
Serial.print("SSID: "); //Print the SSID of the network you're attached to
Serial.println(WiFi.SSID()); //Print Router name
IPAddress ip = WiFi.localIP(); //Print your IP address
Serial.print("IP Address: "); //Print text for understanding
Serial.println(ip); //IP address
} //Exit printWifiStatus -------------------------------------------------------
void writeSDdata() { //Write the statistical data to the SD card ***************
/*
analogWrite(ledRedPin, 255); //Red HIGH=on, LOW=off activityLED
if (SD.begin(SDssPin)){ //Initialiseer SPI verbinding, bij mislukking sla over
//myFile = SD.open(filename, FILE_WRITE); //Open or create file to write
//myFile.print (hoursLed); //Burning hours around noon groeiled RELAY2
//myFile.print (" "); //Print a space to separate data
//myFile.println (freqMeasSec); //Show on SERIAL MONITOR
myFile.close(); //Poppetje gezien, kastje dicht
}//End of if (SD.begin(SDssPin))
digitalWrite(ledRedPin, LOW); //Red HIGH=on, LOW=off activityLED
*/
} //Exit writeSDdata -----------------------------------------------------------
void spawnData() { //Export the data of this program to a PC through RS232 *****
//Serial.print (" "); //Print a space to separate data
//currentData += versionMaj; //Versie Major SYS
//Serial.print (" "); //Print a space to separate data
//currentData += versionMin; //Versie Minor SYS
//Serial.print (" "); //Print a space to separate data
//currentData += versionRev; //Versie Revision SYS
//Serial.print (" "); //Print a space to separate data
//Serial.println (serialNum); //Serial Number SYS
} //Exit spawnData -------------------------------------------------------------
void DS1820_init(void) { //Determins the type of DS1820 thermometer1 ***********
if (!term1.search(addr1)) { //Term1 is an objest created by ONEWIRE
term1.reset_search(); //So if the variables are still empty
delay(250); //The variables must be filled and that costs some time
return; //Are you sure any DS1820 is connected
} //End of if (!term1.search(addr1))
if (OneWire::crc8(addr1, 7) != addr1[7]) {
return;
}
switch (addr1[0]) { //The first ROM byte indicates which tupe of chip
case 0x10:
type1_s = 1;
break;
case 0x28:
type1_s = 0;
break;
case 0x22:
type1_s = 0;
break;
default:
return;
}
term1.reset();
term1.select(addr1);
term1.write(0x44, 1); //Start conversion, with parasite power on at the end
delay(800); //Maybe 750ms is enough, maybe not, takes a lot of time though
present = term1.reset();
term1.select(addr1);
term1.write(0xBE); //Read Scratchpad
for ( i = 0; i < 9; i++) { //We need 9 bytes
data[i] = term1.read();
}
int16_t raw = (data[1] << 8) | data[0];
if (type1_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 { //// default is 12 bit resolution, 750 ms conversion time
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
}
tempDS18B20 = (float)raw / 16.0;
} //Exit DS1820_init -----------------------------------------------------------
void testWIfi(void) { //AT system test & AT+GMR version ************************
/*
Serial.println(" "); //Show the user the setup is done RS232
Serial.print("AT: "); //ANSWERS: OK
Serial1.println("AT"); //Test if AT system works correctly
delay(50); //You can test your own patience here
readESP01(); //Receives data from the ESP01 Wifi module
Serial.println(inStri); //Show the answer to the user
Serial.print("AT+GMR: "); //ANSWERS: Version number
Serial1.println("AT+GMR"); //Show version info ESP8266 AT-software
delay(900); //You can test your own patience here
readESP01(); //Receives data from the ESP01 Wifi module
Serial.println(inStri); //Show the answer to the user
Serial.print("Set mode 1=STA 2=AP 3=BOTH: AT+CWMODE=1: "); //Set modus
Serial1.println("AT+CWMODE=1"); //Set Wifi mode to 1=station
delay(900); //You can test your own patience here
readESP01(); //Receives data from the ESP01 Wifi module
Serial.println(inStri); //Show the answer to the user
Serial.print("Restart AT+RST: "); //Restart after a change in modus
Serial1.setTimeout(5000); //Max wait in ms before returning as an error
Serial1.println("AT+RST"); //Restart is nodig na mode setten
delay(900); //You can test your own patience here
readESP01(); //Receives data from the ESP01 Wifi module
Serial.println(inStri); //Show the answer to the user
Serial.print("AT+CWMODE? Show current WifiMode: "); //ANSWERS:+CWMODE:1+ OK
Serial1.println("AT+CWMODE?"); //Query current Wifi mode
delay(900); //You can test your own patience here
readESP01(); //Receives data from the ESP01 Wifi module
Serial.println(inStri); //Show the answer to the user
Serial.println("AT+CWLAP Lists Access Points **"); //ANSWERS: LIST +OK
Serial1.println("AT+CWLAP"); //List currently Available access Points
delay(4900); //You can test your own patience here
Serial1.setTimeout(5000); //Max wait in ms before returning as an error
readESP01(); //Receives data from the ESP01 Wifi module
Serial.println(inStri); //Show the answer to the user
Serial.println(" "); //Print empty line
Serial.println("Set to slower communication rate: "); //General set ESP01
Serial1.println("AT+UART_DEF=57600,8,1,0,0"); //Send command to the ESP01
delay(900); //You can test your own patience here
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
*/
} //End of testWIfi: AT system test & AT+GMR version ---------------------------
void readESP01(void){ //Receive and proces AT data from the ESP01 **************
/*
delay(10); //Give some time to answer ESP01
inStri = ""; //Reset receive string WIFI
while (Serial1.available() > 0) { //Check if any request available WIFI
inStri = inStri + Serial1.readString(); //Read incoming characters ESP01
delay(500); //Give some time to retreive data from the net ESP01
} //End of while (Serial1.available() > 0) Entire block has been read ESP01
if (inStri == "") { //Check if any error is made WIFI
inStri = "No answer received"; //Default answer if nothing received WIFI
} //End of if (inStri <> "") Check if any error is made WIFI
*/
} //Exit readESP01 -------------------------------------------------------------
void testLAN(void) { //Obtain an IP-address by DHCP and show on monitor ********
Serial.println(""); //Original author: Andrew Lindsay
Serial.println("TEST LAN ******************");
Serial.print("MAC: ");
for (byte i = 0; i < 6; ++i) {
Serial.print(mymac[i], HEX);
if (i < 5)
Serial.print(':');
}
Serial.println();
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
Serial.println(F("Setting up DHCP"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
} //Exit testLAN ---------------------------------------------------------------
void testSdCard(void) { //Contact SD card and show all info on monitor *********
//This routine is honestly stolen from Limor Fried and modified by Tom Igoe
Serial.print("\nInitializing SD card...");
/*
if (!card.init(SPI_HALF_SPEED, chipSelect)) { //We'll use the initialization
//code from the utility libraries // since we're just testing if the card is
//working!
Serial.println("initialization failed. Things to check:");
Serial.println("* Is a card inserted?");
Serial.println("* Is your wiring correct?");
Serial.println("* Did you change chipSelect pin to match your shield?");
while (1);
} else {
Serial.println("Wiring is correct and a card is present.");
}
// print the type of card
Serial.println();
Serial.print("Card type: ");
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Unknown");
}
Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
while (1);
}
Serial.print("Clusters: ");
Serial.println(volume.clusterCount());
Serial.print("Blocks x Cluster: ");
Serial.println(volume.blocksPerCluster());
Serial.print("Total Blocks: ");
Serial.println(volume.blocksPerCluster() * volume.clusterCount());
Serial.println();
// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print("Volume type is: FAT");
Serial.println(volume.fatType(), DEC);
volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we'll have a lot of clusters
volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB)
Serial.print("Volume size (Kb): ");
Serial.println(volumesize);
Serial.print("Volume size (Mb): ");
volumesize /= 1024;
Serial.println(volumesize);
Serial.print("Volume size (Gb): ");
Serial.println((float)volumesize / 1024.0);
Serial.println("\nFiles found on the card (name, date and size in bytes): ");
root.openRoot(volume);
root.ls(LS_R | LS_DATE | LS_SIZE); //List all files with date and size
*/
} //Exit testSdCard ------------------------------------------------------------
void ESP01setSpeed(){ //Initializes the modem to 57600 WIFI ESP01 **************
/*
readESP01(); //Empty serial buffers
Serial.println("Test if AT system works correctly: "); //General test ESP01
Serial1.println("AT"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Restart ESP01: "); //Reset to defaults ESP01
Serial1.println("AT+RST"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Print firmware version: "); //Firmware of the ESP01
Serial1.println("AT+GMR"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Lists all valid modes: "); //Modes of Wifi on the ESP01
Serial1.println("AT+CWMODE?"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Lists available Access Points: "); //Networks for ESP01
Serial1.println("AT+CWLAP"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Test if AT system works correctly: "); //General test ESP01
Serial1.println("AT"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Set to slower communication rate: "); //General set ESP01
Serial1.println("AT+UART_DEF=57600,8,1,0,0"); //Send command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
Serial.println("Test if AT system works correctly: "); //General test ESP01
Serial1.println("AT"); //Send the AT command to the ESP01
readESP01(); //Receive data from the ESP01
Serial.println(inStri); //Show answer at the SERIAL MONITOR
*/
} //Exit ESP01setSpeed ---------------------------------------------------------
void EEPROMfirstTime() { //First time use, set values in EEPROM ****************
EEPROM.write(1, 2); //progHeater program 1=off 2=auto 3=on RELAY1
EEPROM.write(2, 15); //tempOn Temperature Celcius verwarming ON RELAY1
EEPROM.write(3, 20); //tempOff Temperature Celcius verwarming OFF RELAY1
EEPROM.write(4, 2); //progLed program 1=off 2=auto 3=on RELAY2
EEPROM.write(5, 14); //hoursLed Burning hours around noon groeiled RELAY2
EEPROM.write(6, 10); //ledRedBril Current brillance of RED LED
EEPROM.write(7, 5); //ledGreBril Current brillance of GREEN LED
EEPROM.write(8, 10); //ledBluBril Current brillance of BLUE LED
EEPROM.write(9, 255); //freqMeasSec Measurement every freqMeasSec seconds SYS
EEPROM.write(10, 0); //Versie Major SYS
EEPROM.write(11, 1); //Versie Minor SYS
EEPROM.write(12, 1); //Versie Revision SYS
EEPROM.write(13, 4); //Serial Number SYS
//char ssid[] = "*********"; //Network SSID (name) WIFI
//char pass[] = "********"; //Network password WIFI
} //Exit EEPROMfirstTime -------------------------------------------------------
void testLEDs(void){ //PWM fade in and fade out for 3in1 + on board LED ********
tmp1 = 0; //Brightness of any color, just to test PWM LED
while (tmp1<20){
analogWrite(ledRedPin, tmp1); //Set LED to desired PWM value RED
tmp1++;
delay (10);
}
while (tmp1>0){
analogWrite(ledRedPin, tmp1); //Set LED to desired PWM value RED
tmp1--;
delay (10);
}
analogWrite(ledRedPin, 0); //Set LED to desired PWM value = off RED
while (tmp1<20){
analogWrite(ledGrePin, tmp1); //Set LED to desired PWM value GREEN
tmp1++;
delay (10);
}
while (tmp1>0){
analogWrite(ledGrePin, tmp1); //Set LED to desired PWM value GREEN
tmp1--;
delay (10);
}
analogWrite(ledGrePin, 0); //Set LED to desired PWM value = off GREEN
while (tmp1<20){
analogWrite(ledBluPin, tmp1); //Set LED to desired PWM value BLUE
tmp1++;
delay (10);
}
while (tmp1>0){
analogWrite(ledBluPin, tmp1); //Set LED to desired PWM value BLUE
tmp1--;
delay (10);
}
analogWrite(ledBluPin, 0); //Set LED to desired PWM value = off BLUE
while (tmp1<20){
analogWrite(LED_BUILTIN, tmp1); //Set to desired PWM value LED_BUILTIN
tmp1++;
delay (10);
}
while (tmp1>0){
analogWrite(LED_BUILTIN, tmp1); //Set to desired PWM value LED_BUILTIN
tmp1--;
delay (10);
}
analogWrite(LED_BUILTIN, 0); //Set LED to desired PWM value = off LED_BUILTIN
} //Exit test_LEDs -------------------------------------------------------------
void testRelay(){ //Switches ON for 2 seconds all RELAY ************************
digitalWrite(heaterPin, LOW); //Switches ON the RELAY1
delay (2000); //Wait for 2 seconds
digitalWrite(heaterPin, HIGH); //Switches OFF the RELAY1
digitalWrite(lightPin, LOW); //Switches ON the RELAY2
delay (2000); //Wait for 2 seconds
digitalWrite(lightPin, HIGH); //Switches OFF the RELAY2
} //End of testRelay(){ Switches ON for 2 seconds the RELAY --------------------
void beep(uint8_t ms) { //Create a beep (x5ms) with KY-012 active BUZZER **
digitalWrite(buzActPin,HIGH); //Turn on BUZZER
while (ms > 0){ //Timer of the duration of the beep BUZZER
delay(5); //Wait milliseconds BUZZER
ms--; //Countdown untill we reached zero BUZZER
} //Timer of the duration has been counted down to zero BUZZER
digitalWrite(buzActPin,LOW); //Turn annoying sound off BUZZER
} //Exit beep ------------------------------------------------------------------
void toggle_LED_BUILTIN(void){ //Toggles the on-board LED on or off ************
//ledBuiltInVal = !ledBuiltInVal; //Toggle value
//digitalWrite(LED_BUILTIN, ledBuiltInVal); //Set Arduino onboard LED
} //Exit toggle_LED_BUILTIN ----------------------------------------------------
void disable_jtag(void) { //Disable jtag to free port C, enabled by default ****
#if defined(JTD) //Not all AVR controller include jtag
MCUCR |= ( 1 << JTD ); //Write twice to disable
MCUCR |= ( 1 << JTD ); //So stutter once
#endif //End of conditional compiling
} //Exit jtag_disable ----------------------------------------------------------