Code to work with stadium.
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
Fork of StadiumHelper by
main.cpp@1:2f7eee3b65ee, 2016-05-01 (annotated)
- Committer:
- nambvarun
- Date:
- Sun May 01 03:50:49 2016 +0000
- Revision:
- 1:2f7eee3b65ee
- Parent:
- 0:0927a4a6f549
Updated Stadium Helper;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wongman | 0:0927a4a6f549 | 1 | #include "mbed.h" |
wongman | 0:0927a4a6f549 | 2 | #include "uLCD_4DGL.h" |
wongman | 0:0927a4a6f549 | 3 | #include <iostream> |
wongman | 0:0927a4a6f549 | 4 | #include <stdio.h> |
wongman | 0:0927a4a6f549 | 5 | #include <stdlib.h> |
wongman | 0:0927a4a6f549 | 6 | #include "rtos.h" |
wongman | 0:0927a4a6f549 | 7 | DigitalOut myled(LED1); |
wongman | 0:0927a4a6f549 | 8 | DigitalOut myled2(LED2); |
nambvarun | 1:2f7eee3b65ee | 9 | DigitalOut SSR(p20); |
wongman | 0:0927a4a6f549 | 10 | #include "emic2.h" |
wongman | 0:0927a4a6f549 | 11 | uLCD_4DGL uLCD(p28, p27, p29); |
wongman | 0:0927a4a6f549 | 12 | emic2 myTTS(p9, p10); //serial RX,TX pins to emic |
wongman | 0:0927a4a6f549 | 13 | //uLCD_4DGL uLCD(p28, p27, p29); |
wongman | 0:0927a4a6f549 | 14 | Serial pc(p13, p14); //this is the xbee |
nambvarun | 1:2f7eee3b65ee | 15 | //Serial pc(USBTX, USBRX); //this is a computer connected to the mbed for testing purposes |
wongman | 0:0927a4a6f549 | 16 | Mutex m; |
nambvarun | 1:2f7eee3b65ee | 17 | |
nambvarun | 1:2f7eee3b65ee | 18 | InterruptIn zerocross(p22); |
nambvarun | 1:2f7eee3b65ee | 19 | Timeout SSRtriggerOn; |
nambvarun | 1:2f7eee3b65ee | 20 | volatile float dim; |
nambvarun | 1:2f7eee3b65ee | 21 | volatile float saveDim; |
nambvarun | 1:2f7eee3b65ee | 22 | const float powerlinefrequency=60.000; |
nambvarun | 1:2f7eee3b65ee | 23 | |
nambvarun | 1:2f7eee3b65ee | 24 | void triggerOn() |
nambvarun | 1:2f7eee3b65ee | 25 | { |
nambvarun | 1:2f7eee3b65ee | 26 | SSR = 1; |
nambvarun | 1:2f7eee3b65ee | 27 | } |
nambvarun | 1:2f7eee3b65ee | 28 | |
nambvarun | 1:2f7eee3b65ee | 29 | void dimmer() |
nambvarun | 1:2f7eee3b65ee | 30 | { |
nambvarun | 1:2f7eee3b65ee | 31 | // turn off SSR at zero crossing |
nambvarun | 1:2f7eee3b65ee | 32 | SSR = 0; |
nambvarun | 1:2f7eee3b65ee | 33 | // compute time delay using dim value and set timer interrupt |
nambvarun | 1:2f7eee3b65ee | 34 | // triggers SSR after a small post zero crossing time delay |
nambvarun | 1:2f7eee3b65ee | 35 | SSRtriggerOn.attach(&triggerOn,(1.001 - dim)/(2*powerlinefrequency)); |
nambvarun | 1:2f7eee3b65ee | 36 | } |
nambvarun | 1:2f7eee3b65ee | 37 | |
wongman | 0:0927a4a6f549 | 38 | class TMP36 |
wongman | 0:0927a4a6f549 | 39 | { |
wongman | 0:0927a4a6f549 | 40 | public: |
wongman | 0:0927a4a6f549 | 41 | TMP36(PinName pin); |
wongman | 0:0927a4a6f549 | 42 | TMP36(); |
wongman | 0:0927a4a6f549 | 43 | float read(); |
wongman | 0:0927a4a6f549 | 44 | private: |
wongman | 0:0927a4a6f549 | 45 | //class sets up the AnalogIn pin |
wongman | 0:0927a4a6f549 | 46 | AnalogIn _pin; |
wongman | 0:0927a4a6f549 | 47 | }; |
wongman | 0:0927a4a6f549 | 48 | TMP36::TMP36(PinName pin) : _pin(pin) {} //This is an initializer list … more to come in class |
wongman | 0:0927a4a6f549 | 49 | // _pin(pin) means pass pin to the AnalogIn constructor |
wongman | 0:0927a4a6f549 | 50 | float TMP36::read() |
wongman | 0:0927a4a6f549 | 51 | { |
wongman | 0:0927a4a6f549 | 52 | //convert sensor reading to temperature in degrees C |
wongman | 0:0927a4a6f549 | 53 | return ((_pin.read()*3.3)-0.500)*100.0; |
wongman | 0:0927a4a6f549 | 54 | } |
wongman | 0:0927a4a6f549 | 55 | TMP36 myTMP36(p15); |
wongman | 0:0927a4a6f549 | 56 | |
wongman | 0:0927a4a6f549 | 57 | void ttsThread(void const *args) { |
wongman | 0:0927a4a6f549 | 58 | printf("starting up\n\r"); |
wongman | 0:0927a4a6f549 | 59 | myTTS.volume(18); //max volume |
wongman | 0:0927a4a6f549 | 60 | string sentence; |
wongman | 0:0927a4a6f549 | 61 | char letter; |
wongman | 0:0927a4a6f549 | 62 | /* |
wongman | 0:0927a4a6f549 | 63 | Whlie there is stuff in the buffer, continue to take characters out of the buffer |
wongman | 0:0927a4a6f549 | 64 | and append it to the char array sentence |
wongman | 0:0927a4a6f549 | 65 | When hit with a punctuation, send to TTS module |
wongman | 0:0927a4a6f549 | 66 | If we see an *, which is sent by the toggle button, toggle the lamp. |
wongman | 0:0927a4a6f549 | 67 | Erase sentence when finished with a command |
wongman | 0:0927a4a6f549 | 68 | Need mutex so serial communications don't interrupt each other. |
wongman | 0:0927a4a6f549 | 69 | */ |
nambvarun | 1:2f7eee3b65ee | 70 | bool on = true; |
wongman | 0:0927a4a6f549 | 71 | while(1) { |
wongman | 0:0927a4a6f549 | 72 | if(pc.readable()){ |
wongman | 0:0927a4a6f549 | 73 | m.lock(); |
wongman | 0:0927a4a6f549 | 74 | myled2 = 1; |
wongman | 0:0927a4a6f549 | 75 | int a = pc.getc(); |
wongman | 0:0927a4a6f549 | 76 | myled2 = 0; |
wongman | 0:0927a4a6f549 | 77 | letter = (char)a; |
wongman | 0:0927a4a6f549 | 78 | sentence = sentence + letter; |
wongman | 0:0927a4a6f549 | 79 | if(letter == '!' || letter == '.' || letter == '?') { |
wongman | 0:0927a4a6f549 | 80 | sentence = "S" + sentence + "\r"; |
wongman | 0:0927a4a6f549 | 81 | myTTS.speakf("%s", sentence); |
wongman | 0:0927a4a6f549 | 82 | myTTS.ready(); |
wongman | 0:0927a4a6f549 | 83 | sentence = ""; |
nambvarun | 1:2f7eee3b65ee | 84 | // } else if (letter == '*') { |
nambvarun | 1:2f7eee3b65ee | 85 | // dim = 0; |
nambvarun | 1:2f7eee3b65ee | 86 | // wait(0.5); |
nambvarun | 1:2f7eee3b65ee | 87 | // myled = !myled; |
nambvarun | 1:2f7eee3b65ee | 88 | // sentence = ""; |
nambvarun | 1:2f7eee3b65ee | 89 | } else if (letter == '#') { |
nambvarun | 1:2f7eee3b65ee | 90 | while(!pc.readable()){ |
nambvarun | 1:2f7eee3b65ee | 91 | } |
nambvarun | 1:2f7eee3b65ee | 92 | a = pc.getc(); |
nambvarun | 1:2f7eee3b65ee | 93 | letter = (char)a; |
nambvarun | 1:2f7eee3b65ee | 94 | float b = (float)letter - 48; |
nambvarun | 1:2f7eee3b65ee | 95 | dim = b * 0.1; |
nambvarun | 1:2f7eee3b65ee | 96 | wait(.05); |
nambvarun | 1:2f7eee3b65ee | 97 | sentence = ""; |
wongman | 0:0927a4a6f549 | 98 | } |
wongman | 0:0927a4a6f549 | 99 | m.unlock(); |
wongman | 0:0927a4a6f549 | 100 | } |
wongman | 0:0927a4a6f549 | 101 | |
wongman | 0:0927a4a6f549 | 102 | Thread::wait(1); |
wongman | 0:0927a4a6f549 | 103 | } |
wongman | 0:0927a4a6f549 | 104 | } |
wongman | 0:0927a4a6f549 | 105 | int main() { |
nambvarun | 1:2f7eee3b65ee | 106 | zerocross.mode(PullNone); |
nambvarun | 1:2f7eee3b65ee | 107 | wait(0.2); |
nambvarun | 1:2f7eee3b65ee | 108 | zerocross.rise(&dimmer); |
wongman | 0:0927a4a6f549 | 109 | Thread thread1(ttsThread); |
wongman | 0:0927a4a6f549 | 110 | float tempC, tempF; |
wongman | 0:0927a4a6f549 | 111 | int blue, red, color; |
wongman | 0:0927a4a6f549 | 112 | while(1) { |
wongman | 0:0927a4a6f549 | 113 | tempC = myTMP36.read(); //convert to degrees F |
wongman | 0:0927a4a6f549 | 114 | tempF = (9.0*tempC)/5.0 + 32.0; //print current temp |
wongman | 0:0927a4a6f549 | 115 | uLCD.cls(); |
wongman | 0:0927a4a6f549 | 116 | red = (tempF) * 2.55; |
wongman | 0:0927a4a6f549 | 117 | (red <= 0 ? red = 0 : red = red); |
wongman | 0:0927a4a6f549 | 118 | (red >= 255 ? red = 255 : red = red); |
wongman | 0:0927a4a6f549 | 119 | blue = 255 - red; |
wongman | 0:0927a4a6f549 | 120 | red = red << 16; |
wongman | 0:0927a4a6f549 | 121 | color = red + blue; |
wongman | 0:0927a4a6f549 | 122 | uLCD.color(color); |
wongman | 0:0927a4a6f549 | 123 | m.lock(); |
wongman | 0:0927a4a6f549 | 124 | //send through xbee to pc |
wongman | 0:0927a4a6f549 | 125 | pc.printf("%f\n", tempC); |
wongman | 0:0927a4a6f549 | 126 | //send through usb for debugging |
nambvarun | 1:2f7eee3b65ee | 127 | // pc2.printf("%f\n\r", tempC); |
wongman | 0:0927a4a6f549 | 128 | uLCD.printf("%5.2f C \n\n%5.2f F \n\r\n", tempC, tempF); |
wongman | 0:0927a4a6f549 | 129 | if(tempF < 32) { |
wongman | 0:0927a4a6f549 | 130 | uLCD.printf("It's cold!"); |
wongman | 0:0927a4a6f549 | 131 | } else if (tempF < 50) { |
wongman | 0:0927a4a6f549 | 132 | uLCD.printf("It's a little\nchilly!"); |
wongman | 0:0927a4a6f549 | 133 | } else if (tempF < 70) { |
wongman | 0:0927a4a6f549 | 134 | uLCD.printf("It's not bad out,\nenjoy the day!"); |
wongman | 0:0927a4a6f549 | 135 | } else if (tempF < 85) { |
wongman | 0:0927a4a6f549 | 136 | uLCD.printf("Ahh room\ntemperature!"); |
wongman | 0:0927a4a6f549 | 137 | } else { |
wongman | 0:0927a4a6f549 | 138 | uLCD.printf("It's pretty hot!"); |
wongman | 0:0927a4a6f549 | 139 | } |
wongman | 0:0927a4a6f549 | 140 | m.unlock(); |
wongman | 0:0927a4a6f549 | 141 | Thread::wait(500); |
wongman | 0:0927a4a6f549 | 142 | } |
wongman | 0:0927a4a6f549 | 143 | } |