1
25
26
27
28
29
30#define BLYNK_TEMPLATE_ID "XXXXXXXXXXXX"
31#define BLYNK_TEMPLATE_NAME "XXXXXXXXXXXXX"
32#define BLYNK_AUTH_TOKEN "XXXXXXXXXXXXXXX"
33
34#include <SPI.h>
35#include <WiFiS3.h>
36#include <BlynkSimpleWifi.h>
37#include "Arduino_LED_Matrix.h"
38#include <EEPROM.h>
39
40#define moisture_sensor A0
41#define relay 7
42
43BlynkTimer timer;
44ArduinoLEDMatrix matrix;
45
46
47
48char ssid[] = "XXXXXXXXX";
49char pass[] = "XXXXXXXXX";
50
51int eeprom_addr = 0;
52int sensorValue = 0;
53int prev_pump_status = 0;
54int pump_status = 0;
55float moist_percent = 0.00;
56
57
58
59const uint32_t HAPPY_LED[] = {
60 0x3fc48a95,
61 0x58019fd9,
62 0x5889871
63};
64
65const uint32_t NORMAL_LED[] = {
66 0x3fc40298,
67 0xd98d8019,
68 0x5889871
69};
70
71const uint32_t SAD_LED[] = {
72 0x3fc48a9d,
73 0xd8898018,
74 0x71889905
75};
76
77
78BLYNK_WRITE(V1){
79 pump_status = param.asInt();
80 EEPROM.write(eeprom_addr,pump_status);
81 prev_pump_status = EEPROM.read(eeprom_addr);
82 Serial.println(prev_pump_status);
83 Serial.println(pump_status);
84}
85
86void sendSensor(){
87 Blynk.virtualWrite(V0,moist_percent);
88}
89
90void init_renesas_MCU_IO(){
91 pinMode(relay, OUTPUT);
92 pinMode(moisture_sensor, INPUT);
93 analogReadResolution(12);
94 matrix.begin();
95}
96
97void track_soil_moisture(){
98
99
100 sensorValue = analogRead(moisture_sensor);
101 moist_percent = 100 - ((float)sensorValue / 4096.0) * 100;
102
103 if(moist_percent >= 0 && moist_percent < 33.33){
104 Serial.println("DRY");
105 matrix.loadFrame(SAD_LED);
106 }
107 else if(moist_percent >= 33.33 && moist_percent < 66.66){
108 Serial.println("MODERATE");
109 matrix.loadFrame(NORMAL_LED);
110 }
111 else if(moist_percent >= 66.66 && moist_percent <= 100){
112 Serial.println("WET");
113 matrix.loadFrame(HAPPY_LED);
114 }
115}
116
117void setup()
118{
119
120 Serial.begin(9600);
121
122 Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
123
124 init_renesas_MCU_IO();
125
126 timer.setInterval(1000L,sendSensor);
127
128 prev_pump_status = EEPROM.read(eeprom_addr);
129 pump_status = prev_pump_status;
130}
131
132void loop()
133{
134 Blynk.run();
135 timer.run();
136
137 track_soil_moisture();
138 if(pump_status == 0){
139 Serial.println("Water pump is off");
140 digitalWrite(relay, LOW);
141 }
142 else if(pump_status == 1){
143 Serial.println("Water pump is on");
144 digitalWrite(relay,HIGH);
145 }
146 delay(500);
147}