final
Dependencies: mbed Servo NeoMatrix mbed-rtos 4DGL-uLCD-SE PinDetect PololuLedStrip
main.cpp@6:c3d7597d2129, 2020-12-02 (annotated)
- Committer:
- oscargao
- Date:
- Wed Dec 02 21:49:58 2020 +0000
- Revision:
- 6:c3d7597d2129
- Parent:
- 5:61e7a1d16b21
final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
oscargao | 0:941787ae3c86 | 1 | #include "mbed.h" |
oscargao | 1:5ceaf94b79e4 | 2 | #include "uLCD_4DGL.h" |
oscargao | 1:5ceaf94b79e4 | 3 | #include "PinDetect.h" |
oscargao | 2:95f72e92b370 | 4 | #include "rtos.h" |
oscargao | 2:95f72e92b370 | 5 | #include "Servo.h" |
oscargao | 5:61e7a1d16b21 | 6 | //#include "PololuLedStrip.h" |
oscargao | 5:61e7a1d16b21 | 7 | #include "NeoMatrix.h" |
oscargao | 5:61e7a1d16b21 | 8 | #define LED_COUNT 24 // uses a 24-led ring |
oscargao | 1:5ceaf94b79e4 | 9 | |
oscargao | 1:5ceaf94b79e4 | 10 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
oscargao | 2:95f72e92b370 | 11 | Serial pc(USBTX, USBRX); // tx, rx |
oscargao | 5:61e7a1d16b21 | 12 | Timeout countdown; // for alarm duration |
oscargao | 1:5ceaf94b79e4 | 13 | |
oscargao | 2:95f72e92b370 | 14 | // pb |
oscargao | 2:95f72e92b370 | 15 | PinDetect button1(p7,PullDown); |
oscargao | 2:95f72e92b370 | 16 | PinDetect button2(p8,PullDown); |
oscargao | 2:95f72e92b370 | 17 | |
oscargao | 2:95f72e92b370 | 18 | // sensors |
oscargao | 0:941787ae3c86 | 19 | AnalogIn waterSensor(p20); |
oscargao | 0:941787ae3c86 | 20 | AnalogIn moistureSensor(p19); |
oscargao | 0:941787ae3c86 | 21 | AnalogIn lightSensor(p18); |
oscargao | 2:95f72e92b370 | 22 | |
oscargao | 2:95f72e92b370 | 23 | // outputs |
oscargao | 0:941787ae3c86 | 24 | PwmOut speaker(p21); |
oscargao | 0:941787ae3c86 | 25 | PwmOut led(p22); |
oscargao | 2:95f72e92b370 | 26 | PwmOut led1(LED1); |
oscargao | 2:95f72e92b370 | 27 | // motors |
oscargao | 2:95f72e92b370 | 28 | Servo Shade(p23); |
oscargao | 2:95f72e92b370 | 29 | Servo Pipe(p24); |
oscargao | 5:61e7a1d16b21 | 30 | // led panel |
oscargao | 5:61e7a1d16b21 | 31 | NeoArr array(p5, 1); |
oscargao | 2:95f72e92b370 | 32 | |
oscargao | 5:61e7a1d16b21 | 33 | // global variables |
oscargao | 2:95f72e92b370 | 34 | Mutex myMut; |
oscargao | 5:61e7a1d16b21 | 35 | //volatile int button1_push = 0; |
oscargao | 5:61e7a1d16b21 | 36 | //volatile int button2_push = 0; |
oscargao | 5:61e7a1d16b21 | 37 | volatile float setWaterLevel = 0; |
oscargao | 5:61e7a1d16b21 | 38 | volatile float setMoistLevel = 0.0; |
oscargao | 5:61e7a1d16b21 | 39 | volatile float setLightLevelHigh = 0.5; |
oscargao | 5:61e7a1d16b21 | 40 | volatile float setLightLevelLow = 0.2; |
oscargao | 4:2a561107cc01 | 41 | volatile float shadePosition = 0.0; |
oscargao | 4:2a561107cc01 | 42 | volatile float pipePosition = 0.0; |
oscargao | 2:95f72e92b370 | 43 | |
oscargao | 5:61e7a1d16b21 | 44 | // debug varibles |
oscargao | 2:95f72e92b370 | 45 | volatile int counting = 0; // keep track of how many seconds has passed |
oscargao | 2:95f72e92b370 | 46 | |
oscargao | 2:95f72e92b370 | 47 | // sensor readings |
oscargao | 2:95f72e92b370 | 48 | volatile float water = 0.0; |
oscargao | 2:95f72e92b370 | 49 | volatile float light = 0.0; |
oscargao | 2:95f72e92b370 | 50 | volatile float moist = 0.0; |
oscargao | 2:95f72e92b370 | 51 | |
oscargao | 2:95f72e92b370 | 52 | // callback functinos for 2 pushbuttons |
oscargao | 5:61e7a1d16b21 | 53 | void Button1_Callback (void){ |
oscargao | 5:61e7a1d16b21 | 54 | setLightLevelHigh -= .1; |
oscargao | 5:61e7a1d16b21 | 55 | setLightLevelHigh = setLightLevelHigh>0? setLightLevelHigh:0; |
oscargao | 5:61e7a1d16b21 | 56 | } |
oscargao | 5:61e7a1d16b21 | 57 | void Button2_Callback (void){ |
oscargao | 5:61e7a1d16b21 | 58 | setLightLevelHigh += .1; |
oscargao | 5:61e7a1d16b21 | 59 | setLightLevelHigh = setLightLevelHigh<1? setLightLevelHigh:1; |
oscargao | 1:5ceaf94b79e4 | 60 | } |
oscargao | 1:5ceaf94b79e4 | 61 | |
oscargao | 2:95f72e92b370 | 62 | // move the servos, also light an LED |
oscargao | 2:95f72e92b370 | 63 | void motors_function(void const *argument){ |
oscargao | 2:95f72e92b370 | 64 | while(1){ |
oscargao | 5:61e7a1d16b21 | 65 | if (light>setLightLevelHigh) |
oscargao | 5:61e7a1d16b21 | 66 | { |
oscargao | 5:61e7a1d16b21 | 67 | array.fillScreen(0,0,0,0); |
oscargao | 5:61e7a1d16b21 | 68 | array.write(); |
oscargao | 5:61e7a1d16b21 | 69 | /* |
oscargao | 5:61e7a1d16b21 | 70 | code for lower the shade here |
oscargao | 5:61e7a1d16b21 | 71 | */ |
oscargao | 5:61e7a1d16b21 | 72 | pc.printf("case 1\n\r"); |
oscargao | 5:61e7a1d16b21 | 73 | } |
oscargao | 5:61e7a1d16b21 | 74 | else if (light<setLightLevelLow) |
oscargao | 5:61e7a1d16b21 | 75 | { |
oscargao | 5:61e7a1d16b21 | 76 | array.fillScreen(0,255,255,255); |
oscargao | 5:61e7a1d16b21 | 77 | array.write(); |
oscargao | 5:61e7a1d16b21 | 78 | pc.printf("case 2\n\r"); |
oscargao | 5:61e7a1d16b21 | 79 | } |
oscargao | 5:61e7a1d16b21 | 80 | else |
oscargao | 5:61e7a1d16b21 | 81 | { |
oscargao | 5:61e7a1d16b21 | 82 | array.fillScreen(0,0,0,0); |
oscargao | 5:61e7a1d16b21 | 83 | array.write(); |
oscargao | 5:61e7a1d16b21 | 84 | Shade = 0; |
oscargao | 5:61e7a1d16b21 | 85 | /* |
oscargao | 5:61e7a1d16b21 | 86 | code for openning the shade here |
oscargao | 5:61e7a1d16b21 | 87 | */ |
oscargao | 5:61e7a1d16b21 | 88 | pc.printf("case 3\n\r"); |
oscargao | 5:61e7a1d16b21 | 89 | |
oscargao | 5:61e7a1d16b21 | 90 | } |
oscargao | 5:61e7a1d16b21 | 91 | |
oscargao | 4:2a561107cc01 | 92 | pipePosition = moist<0.6? 1:0; |
oscargao | 4:2a561107cc01 | 93 | Pipe = pipePosition; |
oscargao | 2:95f72e92b370 | 94 | Thread::wait(1000); |
oscargao | 2:95f72e92b370 | 95 | } |
oscargao | 2:95f72e92b370 | 96 | } |
oscargao | 2:95f72e92b370 | 97 | |
oscargao | 0:941787ae3c86 | 98 | int main() { |
oscargao | 1:5ceaf94b79e4 | 99 | uLCD.printf("\n\rstart printing\n"); |
oscargao | 2:95f72e92b370 | 100 | uLCD.cls(); |
oscargao | 2:95f72e92b370 | 101 | speaker.period(1.0/800.0); |
oscargao | 5:61e7a1d16b21 | 102 | |
oscargao | 5:61e7a1d16b21 | 103 | // led init |
oscargao | 5:61e7a1d16b21 | 104 | array.setBrightness(.1); // set brightness to 0.1 |
oscargao | 5:61e7a1d16b21 | 105 | array.clear(); |
oscargao | 2:95f72e92b370 | 106 | |
oscargao | 5:61e7a1d16b21 | 107 | // attach button callbacks |
oscargao | 2:95f72e92b370 | 108 | button1.attach_deasserted(&Button1_Callback); |
oscargao | 2:95f72e92b370 | 109 | button1.setSampleFrequency(); |
oscargao | 2:95f72e92b370 | 110 | button2.attach_deasserted(&Button2_Callback); |
oscargao | 2:95f72e92b370 | 111 | button2.setSampleFrequency(); |
oscargao | 2:95f72e92b370 | 112 | |
oscargao | 5:61e7a1d16b21 | 113 | // attach threads |
oscargao | 2:95f72e92b370 | 114 | Thread motors(motors_function); |
oscargao | 5:61e7a1d16b21 | 115 | |
oscargao | 0:941787ae3c86 | 116 | while(1) { |
oscargao | 0:941787ae3c86 | 117 | water = waterSensor.read(); |
oscargao | 0:941787ae3c86 | 118 | moist = moistureSensor.read(); |
oscargao | 0:941787ae3c86 | 119 | light = lightSensor.read(); |
oscargao | 2:95f72e92b370 | 120 | myMut.lock(); |
oscargao | 2:95f72e92b370 | 121 | uLCD.locate(0,2); |
oscargao | 1:5ceaf94b79e4 | 122 | uLCD.printf("%d:\n\r",counting); |
oscargao | 2:95f72e92b370 | 123 | uLCD.printf("water: %f\n\r",water); |
oscargao | 2:95f72e92b370 | 124 | uLCD.printf("moist: %f\n\r",moist); |
oscargao | 2:95f72e92b370 | 125 | uLCD.printf("light: %f\n\r",light); |
oscargao | 5:61e7a1d16b21 | 126 | |
oscargao | 5:61e7a1d16b21 | 127 | uLCD.locate(0,10); |
oscargao | 5:61e7a1d16b21 | 128 | uLCD.printf("SetLightHigh: %1.1f\n\r", setLightLevelHigh); |
oscargao | 5:61e7a1d16b21 | 129 | uLCD.printf("SetLightLow: %1.1f\n\r", setLightLevelLow); |
oscargao | 5:61e7a1d16b21 | 130 | uLCD.printf("SetMoistLevel: %1.1f\n\r", setMoistLevel); |
oscargao | 2:95f72e92b370 | 131 | myMut.unlock(); |
oscargao | 0:941787ae3c86 | 132 | counting++; |
oscargao | 2:95f72e92b370 | 133 | |
oscargao | 2:95f72e92b370 | 134 | // sound the alarm if water level too low |
oscargao | 5:61e7a1d16b21 | 135 | speaker = moist<setMoistLevel? 0.01:0; |
oscargao | 5:61e7a1d16b21 | 136 | Thread::wait(1000); // every one second |
oscargao | 0:941787ae3c86 | 137 | } |
oscargao | 2:95f72e92b370 | 138 | } |