////////////////////////////////////////////////////////////////////////////////
// Name: waterflow-01 Florigs waterverbuik sensor //
// http://robots/includes/parts.php?idpart=331 //
// Created by: HARB rboek2@gmail.com may 2020 GPL copyrights //
// Platform: Arduino Mega 2560 //
// This program tests the interrupts on a MEGA 2560, but it //
// should run on any microcontroller that has at least 1 pin //
// available for user interrupts. //
// //
// 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 //
// //
// As inputs the following modules are mounted: //
// - LDR //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=46 //
// //
// For communications are mounted: //
// - Standard Serial Monitor output //
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=43 //
////////////////////////////////////////////////////////////////////////////////
// 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 <TimerOne.h> //Currently needed for reading waterflow sensor
// http://robotigs.nl/robotigs/includes/parts_header.php?idpart=197
//Define PINS ----------------------------------------------------------------
#define intWfwPin 2 //Waterflow sensor on pin 2, binds to interrupt 4
#define buzActPin 3 //Define DIO output pin connects ACTIV BUZZER
#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 LIBRARY variables ---------------------------------------------------
//Define EEPROM variables ----------------------------------------------------
//Define DATABASE VARIABLES --------------------------------------------------
//Define GENERAL variables ---------------------------------------------------
int tmp1; //Can be used anywhere
unsigned int cntr1 = 0; //Define waterflow interrupt counter
//Initialize OBJECTS ---------------------------------------------------------
//END OF PRECOMPILER OPTIONS ---------------------------------------------------
void setup() { //Setup runs once ***********************************************
disable_jtag(); //Disable jtag to free port C, enabled by default
//Timer1.initialize(10000000); //Timer creates an interrupt every 10 seconds
//Timer1.attachInterrupt( timerIsr ); //Starts the timer counting
//attachInterrupt(intWfwPin, doEncIsr, CHANGE); //Increase cntr on any change
Serial.begin(9600); //Nothing more needed for the Serial Monitor to function
pinMode(ledRedPin, OUTPUT); //Make the LED connections output pins
pinMode(ledGrePin, OUTPUT); //Make the LED connections output pins
pinMode(ledBluPin, OUTPUT); //Make the LED connections output pins
pinMode(LED_BUILTIN, OUTPUT); //Arduino boards contain an onboard LED_BUILTIN
pinMode(buzActPin, OUTPUT); //Set this pin as output to BUZZER
//pinMode(intWfwPin, INPUT); //Redundant, set waterflowpin as input, default
//digitalWrite(intWfwPin, HIGH); //Enable pullup resistor on waterflow pin
//pinMode(SpeedEncoL, INPUT_PULLUP); //Set pullup?
analogReference(DEFAULT); //Accurate enough for Battery Monitor
//Timer1.initialize(100000); //This timer will create an interrupt every 10 s
//Timer1.attachInterrupt( timerIsr ); //Start the timer
//attachInterrupt(2, docntrL, RISING); //Increase left cntr on any change
//attachInterrupt(3, docntrR, FALLING); //Increase right cntr on any change
//Test hardware and software -------------------------------------------------
toggle_LED_BUILTIN(); //Show we are awake
beep(10); //Create a beep (x5ms) with KY-012 active BUZZER
toggle_LED_BUILTIN(); //Show we are awake
}//--(end setup )---------------------------------------------------------------
void loop() { //KEEP ON RUNNING THIS LOOP FOREVER ******************************
tmp1 = digitalRead(intWfwPin); //Waterflow sensor on pin 2
digitalWrite(LED_BUILTIN, tmp1); //Set Arduino boards onboard LED
//toggle_LED_BUILTIN(); //Toggles the on-board LED on or off
} //End of void loop() ----------------------- KEEP ON RUNNING THIS LOOP FOREVER
void doEncIsr() { //Increases the left wheel speed sensor by 1 *****************
cntr1++; //Increase +1 the counter value
toggle_LED_BUILTIN(); //Toggles the on-board LED on or off
} //Exit docntLdoEncIsr---------------------------------------------------------
void timerIsr() { //Timer has reached its maximum *Interrupt Service Routine ***
Timer1.detachInterrupt(); //Stop the timer
toggle_LED_BUILTIN(); //Toggles the on-board LED on or off
Serial.print(cntr1, DEC);
Serial.println(" pulses per 10 s");
cntr1 = 0;
Timer1.attachInterrupt( timerIsr ); //Enable the timer again
} //Exit timerIsr --------------------------------------------------------------
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 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 ----------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// 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 - intWfwPin waterflow sensor I4 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 - buzActPin Activ buzzer 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 //
////////////////////////////////////////////////////////////////////////////////