IOT Greenhouse
Dependencies: HC_SR04_Ultrasonic_Library PixelArrayBuffer Servo TSL2561 mbed-rtos mbed
main.cpp@0:7ebf4813882d, 2018-05-01 (annotated)
- Committer:
- jsheu3
- Date:
- Tue May 01 13:59:00 2018 +0000
- Revision:
- 0:7ebf4813882d
IOT Greenhouse
Who changed what in which revision?
User | Revision | Line number | New 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 |