IOT Greenhouse

Dependencies:   HC_SR04_Ultrasonic_Library PixelArrayBuffer Servo TSL2561 mbed-rtos mbed

Committer:
jsheu3
Date:
Tue May 01 13:59:00 2018 +0000
Revision:
0:7ebf4813882d
IOT Greenhouse

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jsheu3 0:7ebf4813882d 1 #include "mbed.h"
jsheu3 0:7ebf4813882d 2 #include "th02.h"
jsheu3 0:7ebf4813882d 3 #include "TSL2561.h"
jsheu3 0:7ebf4813882d 4 #include "ultrasonic.h"
jsheu3 0:7ebf4813882d 5 #include "Servo.h"
jsheu3 0:7ebf4813882d 6 #include "neopixel.h"
jsheu3 0:7ebf4813882d 7 #include "stdlib.h"
jsheu3 0:7ebf4813882d 8 #include "rtos.h"
jsheu3 0:7ebf4813882d 9 #include "support.h"
jsheu3 0:7ebf4813882d 10
jsheu3 0:7ebf4813882d 11 using namespace std;
jsheu3 0:7ebf4813882d 12
jsheu3 0:7ebf4813882d 13 DigitalOut temp_alert(p21);
jsheu3 0:7ebf4813882d 14 float tankHeight = 9.5f; //INITIALIZE!!!
jsheu3 0:7ebf4813882d 15
jsheu3 0:7ebf4813882d 16 //Thread t1;
jsheu3 0:7ebf4813882d 17 //Thread t2;
jsheu3 0:7ebf4813882d 18
jsheu3 0:7ebf4813882d 19 void dist(int distance){ //save plant height in inches!
jsheu3 0:7ebf4813882d 20 //prev_height = plant_height;
jsheu3 0:7ebf4813882d 21 plant_height =(distance*0.0393701);
jsheu3 0:7ebf4813882d 22 }
jsheu3 0:7ebf4813882d 23 ultrasonic mu(p6, p7, .1, 1, &dist);
jsheu3 0:7ebf4813882d 24
jsheu3 0:7ebf4813882d 25
jsheu3 0:7ebf4813882d 26 void Irrigation(void const *args) {
jsheu3 0:7ebf4813882d 27 while(1){
jsheu3 0:7ebf4813882d 28 moisture_level = moisture;
jsheu3 0:7ebf4813882d 29 if (!watering && moisture_level > 0.3f)
jsheu3 0:7ebf4813882d 30 water_plant();
jsheu3 0:7ebf4813882d 31 Thread::wait(2000); //SET CORRECT INTERVAL
jsheu3 0:7ebf4813882d 32 }
jsheu3 0:7ebf4813882d 33 }
jsheu3 0:7ebf4813882d 34
jsheu3 0:7ebf4813882d 35 void Status(void const *args) {
jsheu3 0:7ebf4813882d 36 while(1){
jsheu3 0:7ebf4813882d 37 read_temp();
jsheu3 0:7ebf4813882d 38 read_humidity();
jsheu3 0:7ebf4813882d 39 mu.checkDistance();
jsheu3 0:7ebf4813882d 40 lux = sensor.lux();
jsheu3 0:7ebf4813882d 41 moisture_level = moisture;
jsheu3 0:7ebf4813882d 42
jsheu3 0:7ebf4813882d 43 if (temperature < 15.0f || temperature > 30.0f)
jsheu3 0:7ebf4813882d 44 temp_alert = 1;
jsheu3 0:7ebf4813882d 45 else
jsheu3 0:7ebf4813882d 46 temp_alert = 0;
jsheu3 0:7ebf4813882d 47
jsheu3 0:7ebf4813882d 48 if (moisture_level > 0.8f)
jsheu3 0:7ebf4813882d 49 water_plant();
jsheu3 0:7ebf4813882d 50
jsheu3 0:7ebf4813882d 51 if (lux < 5.0f){
jsheu3 0:7ebf4813882d 52 lights_on = true;
jsheu3 0:7ebf4813882d 53 switch_lights();
jsheu3 0:7ebf4813882d 54 } else {
jsheu3 0:7ebf4813882d 55 lights_on = false;
jsheu3 0:7ebf4813882d 56 switch_lights();
jsheu3 0:7ebf4813882d 57 }
jsheu3 0:7ebf4813882d 58
jsheu3 0:7ebf4813882d 59 Thread::wait(5000); //SET CORRECT INTERVAL
jsheu3 0:7ebf4813882d 60 }
jsheu3 0:7ebf4813882d 61 }
jsheu3 0:7ebf4813882d 62
jsheu3 0:7ebf4813882d 63
jsheu3 0:7ebf4813882d 64 int main() {
jsheu3 0:7ebf4813882d 65 char c=0;
jsheu3 0:7ebf4813882d 66 pi.baud(9600);
jsheu3 0:7ebf4813882d 67 mu.startUpdates();
jsheu3 0:7ebf4813882d 68 moisture_level = moisture;
jsheu3 0:7ebf4813882d 69
jsheu3 0:7ebf4813882d 70 //t1.start(Irrigation);
jsheu3 0:7ebf4813882d 71 //t2.start(Status);
jsheu3 0:7ebf4813882d 72 Thread t1(Irrigation);
jsheu3 0:7ebf4813882d 73 Thread t2(Status);
jsheu3 0:7ebf4813882d 74
jsheu3 0:7ebf4813882d 75 while(1) {
jsheu3 0:7ebf4813882d 76 c = pi.getc();
jsheu3 0:7ebf4813882d 77 if (c != 0) {
jsheu3 0:7ebf4813882d 78 switch(c){
jsheu3 0:7ebf4813882d 79 case '1':
jsheu3 0:7ebf4813882d 80 {
jsheu3 0:7ebf4813882d 81 lights_on = true;
jsheu3 0:7ebf4813882d 82 switch_lights();
jsheu3 0:7ebf4813882d 83 break;
jsheu3 0:7ebf4813882d 84 }
jsheu3 0:7ebf4813882d 85 case '0':
jsheu3 0:7ebf4813882d 86 {
jsheu3 0:7ebf4813882d 87 lights_on = false;
jsheu3 0:7ebf4813882d 88 switch_lights();
jsheu3 0:7ebf4813882d 89 break;
jsheu3 0:7ebf4813882d 90 }
jsheu3 0:7ebf4813882d 91 case '2':
jsheu3 0:7ebf4813882d 92 {
jsheu3 0:7ebf4813882d 93 water_plant();
jsheu3 0:7ebf4813882d 94 break;
jsheu3 0:7ebf4813882d 95 }
jsheu3 0:7ebf4813882d 96 case '3':
jsheu3 0:7ebf4813882d 97 {
jsheu3 0:7ebf4813882d 98 std::string s = patch::to_string((float)moisture_level);
jsheu3 0:7ebf4813882d 99 //std::string s = patch::to_string((float)sensor.lux());
jsheu3 0:7ebf4813882d 100 pi.printf("%s",s);
jsheu3 0:7ebf4813882d 101 break;
jsheu3 0:7ebf4813882d 102 }
jsheu3 0:7ebf4813882d 103 case '4':
jsheu3 0:7ebf4813882d 104 {
jsheu3 0:7ebf4813882d 105 read_temp();
jsheu3 0:7ebf4813882d 106 std::string s = patch::to_string((float)temperature);
jsheu3 0:7ebf4813882d 107 pi.printf("%s",s);
jsheu3 0:7ebf4813882d 108 break;
jsheu3 0:7ebf4813882d 109 }
jsheu3 0:7ebf4813882d 110 case '5':
jsheu3 0:7ebf4813882d 111 {
jsheu3 0:7ebf4813882d 112 read_humidity();
jsheu3 0:7ebf4813882d 113 std::string s = patch::to_string((float)humidity);
jsheu3 0:7ebf4813882d 114 pi.printf("%s",s);
jsheu3 0:7ebf4813882d 115 break;
jsheu3 0:7ebf4813882d 116 }
jsheu3 0:7ebf4813882d 117 case '6':
jsheu3 0:7ebf4813882d 118 {
jsheu3 0:7ebf4813882d 119 mu.checkDistance();
jsheu3 0:7ebf4813882d 120 std::string s = patch::to_string((float)plant_height);
jsheu3 0:7ebf4813882d 121 pi.printf("%s",s);
jsheu3 0:7ebf4813882d 122 break;
jsheu3 0:7ebf4813882d 123 }
jsheu3 0:7ebf4813882d 124 default:
jsheu3 0:7ebf4813882d 125 break;
jsheu3 0:7ebf4813882d 126
jsheu3 0:7ebf4813882d 127 }
jsheu3 0:7ebf4813882d 128 pi.putc(0);
jsheu3 0:7ebf4813882d 129 }
jsheu3 0:7ebf4813882d 130 wait(1);
jsheu3 0:7ebf4813882d 131 }
jsheu3 0:7ebf4813882d 132
jsheu3 0:7ebf4813882d 133 return 0;
jsheu3 0:7ebf4813882d 134 }
jsheu3 0:7ebf4813882d 135
jsheu3 0:7ebf4813882d 136
jsheu3 0:7ebf4813882d 137
jsheu3 0:7ebf4813882d 138
jsheu3 0:7ebf4813882d 139
jsheu3 0:7ebf4813882d 140
jsheu3 0:7ebf4813882d 141
jsheu3 0:7ebf4813882d 142
jsheu3 0:7ebf4813882d 143
jsheu3 0:7ebf4813882d 144
jsheu3 0:7ebf4813882d 145
jsheu3 0:7ebf4813882d 146
jsheu3 0:7ebf4813882d 147
jsheu3 0:7ebf4813882d 148