push lib
This commit is contained in:
@ -0,0 +1,179 @@
|
||||
// FARM DATA RELAY SYSTEM
|
||||
//
|
||||
// Irrigation Controller
|
||||
//
|
||||
// Developed by Timm Bogner (timmbogner@gmail.com) in Urbana, Illinois, USA.
|
||||
//
|
||||
//
|
||||
#include "fdrs_node_config.h"
|
||||
#include <fdrs_node.h>
|
||||
|
||||
#define CONTROL_1 101 //Address for controller 1
|
||||
#define CONTROL_2 102 //Address for controller 2
|
||||
#define CONTROL_3 103 //Address for controller 3
|
||||
#define CONTROL_4 104 //Address for controller 4
|
||||
|
||||
#define COIL_1 4 //Coil Pin 1
|
||||
#define COIL_2 5 //Coil Pin 2
|
||||
#define COIL_3 13 //Coil Pin 3
|
||||
#define COIL_4 14 //Coil Pin 4
|
||||
|
||||
int status_1 = 0;
|
||||
int status_2 = 0;
|
||||
int status_3 = 0;
|
||||
int status_4 = 0;
|
||||
|
||||
bool isData = false;
|
||||
bool newStatus = false;
|
||||
|
||||
void fdrs_recv_cb(DataReading theData) {
|
||||
DBG(String(theData.id));
|
||||
switch (theData.t) {
|
||||
case 0: // Incoming command is to SET a value
|
||||
|
||||
switch (theData.id) {
|
||||
case CONTROL_1:
|
||||
status_1 = (int)theData.d;
|
||||
isData = true;
|
||||
break;
|
||||
case CONTROL_2:
|
||||
status_2 = (int)theData.d;
|
||||
isData = true;
|
||||
break;
|
||||
case CONTROL_3:
|
||||
status_3 = (int)theData.d;
|
||||
isData = true;
|
||||
break;
|
||||
case CONTROL_4:
|
||||
status_4 = (int)theData.d;
|
||||
isData = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: // Incoming command is to GET a value
|
||||
switch (theData.id) {
|
||||
case CONTROL_1:
|
||||
if (digitalRead(COIL_1) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_1);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_1);
|
||||
}
|
||||
break;
|
||||
case CONTROL_2:
|
||||
if (digitalRead(COIL_2) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_2);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_2);
|
||||
}
|
||||
break;
|
||||
case CONTROL_3:
|
||||
if (digitalRead(COIL_3) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_3);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_3);
|
||||
}
|
||||
break;
|
||||
case CONTROL_4:
|
||||
if (digitalRead(COIL_4) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_4);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_4);
|
||||
}
|
||||
break;
|
||||
}
|
||||
newStatus = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void checkCoils() { // Sends back a status report for each coil pin.
|
||||
if (digitalRead(COIL_1) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_1);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_1);
|
||||
}
|
||||
if (digitalRead(COIL_2) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_2);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_2);
|
||||
}
|
||||
if (digitalRead(COIL_3) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_3);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_3);
|
||||
}
|
||||
if (digitalRead(COIL_4) == HIGH) {
|
||||
loadFDRS(1, STATUS_T, CONTROL_4);
|
||||
} else {
|
||||
loadFDRS(0, STATUS_T, CONTROL_4);
|
||||
}
|
||||
if (sendFDRS()) {
|
||||
DBG("Packet received by gateway");
|
||||
} else {
|
||||
DBG("Unable to communicate with gateway!");
|
||||
}
|
||||
}
|
||||
|
||||
void updateCoils() { //These are set up for relay module which are active-LOW. Swap 'HIGH'and 'LOW' in this function to use the inverse.
|
||||
if (status_1) {
|
||||
digitalWrite(COIL_1, LOW);
|
||||
} else {
|
||||
digitalWrite(COIL_1, HIGH);
|
||||
}
|
||||
if (status_2) {
|
||||
digitalWrite(COIL_2, LOW);
|
||||
} else {
|
||||
digitalWrite(COIL_2, HIGH);
|
||||
}
|
||||
if (status_3) {
|
||||
digitalWrite(COIL_3, LOW);
|
||||
} else {
|
||||
digitalWrite(COIL_3, HIGH);
|
||||
}
|
||||
if (status_4) {
|
||||
digitalWrite(COIL_4, LOW);
|
||||
} else {
|
||||
digitalWrite(COIL_4, HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
beginFDRS();
|
||||
pingFDRS(1000);
|
||||
if (addFDRS(1000, fdrs_recv_cb)) {
|
||||
subscribeFDRS(CONTROL_1);
|
||||
subscribeFDRS(CONTROL_2);
|
||||
subscribeFDRS(CONTROL_3);
|
||||
subscribeFDRS(CONTROL_4);
|
||||
} else {
|
||||
DBG("Not Connected");
|
||||
}
|
||||
pinMode(COIL_1, OUTPUT);
|
||||
digitalWrite(COIL_1, HIGH);
|
||||
pinMode(COIL_2, OUTPUT);
|
||||
digitalWrite(COIL_2, HIGH);
|
||||
pinMode(COIL_3, OUTPUT);
|
||||
digitalWrite(COIL_3, HIGH);
|
||||
pinMode(COIL_4, OUTPUT);
|
||||
digitalWrite(COIL_4, HIGH);
|
||||
|
||||
DBG("FARM DATA RELAY SYSTEM :: Irrigation Module");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
loopFDRS();
|
||||
if (isData) {
|
||||
isData = false;
|
||||
updateCoils();
|
||||
checkCoils();
|
||||
}
|
||||
if (newStatus) {
|
||||
newStatus = false;
|
||||
if (sendFDRS()) {
|
||||
DBG("Packet received by gateway");
|
||||
} else {
|
||||
DBG("Unable to communicate with gateway!");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
// FARM DATA RELAY SYSTEM
|
||||
//
|
||||
// Sensor Configuration
|
||||
|
||||
#include <fdrs_globals.h>
|
||||
|
||||
#define READING_ID 1 //Unique ID for this sensor
|
||||
#define GTWY_MAC 0x01 //Address of the nearest gateway
|
||||
|
||||
#define USE_ESPNOW
|
||||
//#define USE_LORA
|
||||
//#define DEEP_SLEEP
|
||||
//#define POWER_CTRL 14
|
||||
#define FDRS_DEBUG
|
||||
|
||||
// LoRa Configuration
|
||||
#define RADIOLIB_MODULE SX1276 //Tested on SX1276
|
||||
#define LORA_SS 18
|
||||
#define LORA_RST 14
|
||||
#define LORA_DIO 26
|
||||
|
||||
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
|
||||
#define LORA_ACK // Request LoRa acknowledgment.
|
Reference in New Issue
Block a user