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 #ifndef SUPPORT_H
jsheu3 0:7ebf4813882d 2 #define SUPPORT_H
jsheu3 0:7ebf4813882d 3 #include <string>11
jsheu3 0:7ebf4813882d 4 #include <sstream>
jsheu3 0:7ebf4813882d 5
jsheu3 0:7ebf4813882d 6
jsheu3 0:7ebf4813882d 7 #define DATA_PIN p5
jsheu3 0:7ebf4813882d 8
jsheu3 0:7ebf4813882d 9 Mutex lightmutex;
jsheu3 0:7ebf4813882d 10 Mutex watermutex;
jsheu3 0:7ebf4813882d 11
jsheu3 0:7ebf4813882d 12 DigitalOut myled(LED1);
jsheu3 0:7ebf4813882d 13 AnalogIn moisture(A0);
jsheu3 0:7ebf4813882d 14 RawSerial pi(USBTX, USBRX);
jsheu3 0:7ebf4813882d 15 Servo myservo(p24);
jsheu3 0:7ebf4813882d 16 TH02 MyTH02 (p9,p10,TH02_I2C_ADDR<<1);
jsheu3 0:7ebf4813882d 17 TSL2561 sensor(p28, p27);
jsheu3 0:7ebf4813882d 18
jsheu3 0:7ebf4813882d 19 bool lights_on = false;
jsheu3 0:7ebf4813882d 20 bool watering = false;
jsheu3 0:7ebf4813882d 21 //float prev_height = 0.0f;
jsheu3 0:7ebf4813882d 22 float plant_height = 0.0f;
jsheu3 0:7ebf4813882d 23 float temperature = 0.0f;
jsheu3 0:7ebf4813882d 24 float humidity = 0.0f;
jsheu3 0:7ebf4813882d 25 float moisture_level = 0.0f;
jsheu3 0:7ebf4813882d 26 float lux = 0.0f;
jsheu3 0:7ebf4813882d 27
jsheu3 0:7ebf4813882d 28 //patch::to_string()
jsheu3 0:7ebf4813882d 29 namespace patch
jsheu3 0:7ebf4813882d 30 {
jsheu3 0:7ebf4813882d 31 template < typename T > std::string to_string( const T& n )
jsheu3 0:7ebf4813882d 32 {
jsheu3 0:7ebf4813882d 33 std::ostringstream stm ;
jsheu3 0:7ebf4813882d 34 stm << n ;
jsheu3 0:7ebf4813882d 35 return stm.str() ;
jsheu3 0:7ebf4813882d 36 }
jsheu3 0:7ebf4813882d 37 }
jsheu3 0:7ebf4813882d 38
jsheu3 0:7ebf4813882d 39 //function to water the plant
jsheu3 0:7ebf4813882d 40 void water_plant() {
jsheu3 0:7ebf4813882d 41 watering = true;
jsheu3 0:7ebf4813882d 42 watermutex.lock();
jsheu3 0:7ebf4813882d 43 for(float p=0; p<1.5; p += 0.05) {
jsheu3 0:7ebf4813882d 44 myservo = p;
jsheu3 0:7ebf4813882d 45 wait(0.1);
jsheu3 0:7ebf4813882d 46 }
jsheu3 0:7ebf4813882d 47 wait(1);
jsheu3 0:7ebf4813882d 48 for(float p=1.5; p>0.0; p -= 0.05) {
jsheu3 0:7ebf4813882d 49 myservo = p;
jsheu3 0:7ebf4813882d 50 wait(0.1);
jsheu3 0:7ebf4813882d 51 }
jsheu3 0:7ebf4813882d 52 watermutex.unlock();
jsheu3 0:7ebf4813882d 53 watering = false;
jsheu3 0:7ebf4813882d 54 }
jsheu3 0:7ebf4813882d 55
jsheu3 0:7ebf4813882d 56 //function to turn on/off neo-pixels
jsheu3 0:7ebf4813882d 57 void switch_lights() {
jsheu3 0:7ebf4813882d 58 DigitalIn(DATA_PIN, PullDown);
jsheu3 0:7ebf4813882d 59 neopixel::PixelArray array(DATA_PIN);
jsheu3 0:7ebf4813882d 60 uint16_t numPixels = 32;
jsheu3 0:7ebf4813882d 61 neopixel::Pixel pixels[numPixels];
jsheu3 0:7ebf4813882d 62 if (lights_on){
jsheu3 0:7ebf4813882d 63 for (int i=0; i<numPixels; ++i){
jsheu3 0:7ebf4813882d 64 pixels[i].red = 255;
jsheu3 0:7ebf4813882d 65 pixels[i].green = 255;
jsheu3 0:7ebf4813882d 66 pixels[i].blue = 255;
jsheu3 0:7ebf4813882d 67 }
jsheu3 0:7ebf4813882d 68 } else {
jsheu3 0:7ebf4813882d 69 for (int i=0; i<numPixels; ++i){
jsheu3 0:7ebf4813882d 70 pixels[i].red = 0;
jsheu3 0:7ebf4813882d 71 pixels[i].green = 0;
jsheu3 0:7ebf4813882d 72 pixels[i].blue = 0;
jsheu3 0:7ebf4813882d 73 }
jsheu3 0:7ebf4813882d 74 }
jsheu3 0:7ebf4813882d 75 lightmutex.lock();
jsheu3 0:7ebf4813882d 76 array.update(pixels, numPixels);
jsheu3 0:7ebf4813882d 77 lightmutex.unlock();
jsheu3 0:7ebf4813882d 78 }
jsheu3 0:7ebf4813882d 79
jsheu3 0:7ebf4813882d 80
jsheu3 0:7ebf4813882d 81 void read_temp(){
jsheu3 0:7ebf4813882d 82 int iTemp;
jsheu3 0:7ebf4813882d 83 MyTH02.startTempConv(true,true);
jsheu3 0:7ebf4813882d 84 MyTH02.waitEndConversion();
jsheu3 0:7ebf4813882d 85 iTemp= MyTH02.getConversionValue();
jsheu3 0:7ebf4813882d 86 temperature = iTemp/10.0;
jsheu3 0:7ebf4813882d 87 }
jsheu3 0:7ebf4813882d 88
jsheu3 0:7ebf4813882d 89
jsheu3 0:7ebf4813882d 90 void read_humidity() {
jsheu3 0:7ebf4813882d 91 int iRH;
jsheu3 0:7ebf4813882d 92 MyTH02.startRHConv(true,true);
jsheu3 0:7ebf4813882d 93 MyTH02.waitEndConversion();
jsheu3 0:7ebf4813882d 94 iRH= MyTH02.getConversionValue();
jsheu3 0:7ebf4813882d 95 humidity = iRH/10.0;
jsheu3 0:7ebf4813882d 96 }
jsheu3 0:7ebf4813882d 97
jsheu3 0:7ebf4813882d 98
jsheu3 0:7ebf4813882d 99
jsheu3 0:7ebf4813882d 100 #endif