Code to work with stadium.
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
Fork of StadiumHelper by
main.cpp@0:0927a4a6f549, 2016-04-24 (annotated)
- Committer:
- wongman
- Date:
- Sun Apr 24 21:08:37 2016 +0000
- Revision:
- 0:0927a4a6f549
- Child:
- 1:2f7eee3b65ee
Final commit for 4180 final project, 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); |
wongman | 0:0927a4a6f549 | 9 | DigitalOut fan(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 |
wongman | 0:0927a4a6f549 | 15 | Serial pc2(USBTX, USBRX); //this is a computer connected to the mbed for testing purposes |
wongman | 0:0927a4a6f549 | 16 | Mutex m; |
wongman | 0:0927a4a6f549 | 17 | class TMP36 |
wongman | 0:0927a4a6f549 | 18 | { |
wongman | 0:0927a4a6f549 | 19 | public: |
wongman | 0:0927a4a6f549 | 20 | TMP36(PinName pin); |
wongman | 0:0927a4a6f549 | 21 | TMP36(); |
wongman | 0:0927a4a6f549 | 22 | float read(); |
wongman | 0:0927a4a6f549 | 23 | private: |
wongman | 0:0927a4a6f549 | 24 | //class sets up the AnalogIn pin |
wongman | 0:0927a4a6f549 | 25 | AnalogIn _pin; |
wongman | 0:0927a4a6f549 | 26 | }; |
wongman | 0:0927a4a6f549 | 27 | TMP36::TMP36(PinName pin) : _pin(pin) {} //This is an initializer list … more to come in class |
wongman | 0:0927a4a6f549 | 28 | // _pin(pin) means pass pin to the AnalogIn constructor |
wongman | 0:0927a4a6f549 | 29 | float TMP36::read() |
wongman | 0:0927a4a6f549 | 30 | { |
wongman | 0:0927a4a6f549 | 31 | //convert sensor reading to temperature in degrees C |
wongman | 0:0927a4a6f549 | 32 | return ((_pin.read()*3.3)-0.500)*100.0; |
wongman | 0:0927a4a6f549 | 33 | } |
wongman | 0:0927a4a6f549 | 34 | TMP36 myTMP36(p15); |
wongman | 0:0927a4a6f549 | 35 | |
wongman | 0:0927a4a6f549 | 36 | void ttsThread(void const *args) { |
wongman | 0:0927a4a6f549 | 37 | printf("starting up\n\r"); |
wongman | 0:0927a4a6f549 | 38 | myTTS.volume(18); //max volume |
wongman | 0:0927a4a6f549 | 39 | string sentence; |
wongman | 0:0927a4a6f549 | 40 | char letter; |
wongman | 0:0927a4a6f549 | 41 | /* |
wongman | 0:0927a4a6f549 | 42 | Whlie there is stuff in the buffer, continue to take characters out of the buffer |
wongman | 0:0927a4a6f549 | 43 | and append it to the char array sentence |
wongman | 0:0927a4a6f549 | 44 | When hit with a punctuation, send to TTS module |
wongman | 0:0927a4a6f549 | 45 | If we see an *, which is sent by the toggle button, toggle the lamp. |
wongman | 0:0927a4a6f549 | 46 | Erase sentence when finished with a command |
wongman | 0:0927a4a6f549 | 47 | Need mutex so serial communications don't interrupt each other. |
wongman | 0:0927a4a6f549 | 48 | */ |
wongman | 0:0927a4a6f549 | 49 | while(1) { |
wongman | 0:0927a4a6f549 | 50 | if(pc.readable()){ |
wongman | 0:0927a4a6f549 | 51 | m.lock(); |
wongman | 0:0927a4a6f549 | 52 | myled2 = 1; |
wongman | 0:0927a4a6f549 | 53 | int a = pc.getc(); |
wongman | 0:0927a4a6f549 | 54 | myled2 = 0; |
wongman | 0:0927a4a6f549 | 55 | letter = (char)a; |
wongman | 0:0927a4a6f549 | 56 | sentence = sentence + letter; |
wongman | 0:0927a4a6f549 | 57 | if(letter == '!' || letter == '.' || letter == '?') { |
wongman | 0:0927a4a6f549 | 58 | sentence = "S" + sentence + "\r"; |
wongman | 0:0927a4a6f549 | 59 | myTTS.speakf("%s", sentence); |
wongman | 0:0927a4a6f549 | 60 | myTTS.ready(); |
wongman | 0:0927a4a6f549 | 61 | sentence = ""; |
wongman | 0:0927a4a6f549 | 62 | } else if (letter == '*') { |
wongman | 0:0927a4a6f549 | 63 | fan = !fan; |
wongman | 0:0927a4a6f549 | 64 | myled = !myled; |
wongman | 0:0927a4a6f549 | 65 | sentence = ""; |
wongman | 0:0927a4a6f549 | 66 | } |
wongman | 0:0927a4a6f549 | 67 | m.unlock(); |
wongman | 0:0927a4a6f549 | 68 | } |
wongman | 0:0927a4a6f549 | 69 | |
wongman | 0:0927a4a6f549 | 70 | Thread::wait(1); |
wongman | 0:0927a4a6f549 | 71 | } |
wongman | 0:0927a4a6f549 | 72 | } |
wongman | 0:0927a4a6f549 | 73 | int main() { |
wongman | 0:0927a4a6f549 | 74 | Thread thread1(ttsThread); |
wongman | 0:0927a4a6f549 | 75 | float tempC, tempF; |
wongman | 0:0927a4a6f549 | 76 | int blue, red, color; |
wongman | 0:0927a4a6f549 | 77 | while(1) { |
wongman | 0:0927a4a6f549 | 78 | tempC = myTMP36.read(); //convert to degrees F |
wongman | 0:0927a4a6f549 | 79 | tempF = (9.0*tempC)/5.0 + 32.0; //print current temp |
wongman | 0:0927a4a6f549 | 80 | uLCD.cls(); |
wongman | 0:0927a4a6f549 | 81 | red = (tempF) * 2.55; |
wongman | 0:0927a4a6f549 | 82 | (red <= 0 ? red = 0 : red = red); |
wongman | 0:0927a4a6f549 | 83 | (red >= 255 ? red = 255 : red = red); |
wongman | 0:0927a4a6f549 | 84 | blue = 255 - red; |
wongman | 0:0927a4a6f549 | 85 | red = red << 16; |
wongman | 0:0927a4a6f549 | 86 | color = red + blue; |
wongman | 0:0927a4a6f549 | 87 | uLCD.color(color); |
wongman | 0:0927a4a6f549 | 88 | m.lock(); |
wongman | 0:0927a4a6f549 | 89 | //send through xbee to pc |
wongman | 0:0927a4a6f549 | 90 | pc.printf("%f\n", tempC); |
wongman | 0:0927a4a6f549 | 91 | //send through usb for debugging |
wongman | 0:0927a4a6f549 | 92 | pc2.printf("%f\n\r", tempC); |
wongman | 0:0927a4a6f549 | 93 | uLCD.printf("%5.2f C \n\n%5.2f F \n\r\n", tempC, tempF); |
wongman | 0:0927a4a6f549 | 94 | if(tempF < 32) { |
wongman | 0:0927a4a6f549 | 95 | uLCD.printf("It's cold!"); |
wongman | 0:0927a4a6f549 | 96 | } else if (tempF < 50) { |
wongman | 0:0927a4a6f549 | 97 | uLCD.printf("It's a little\nchilly!"); |
wongman | 0:0927a4a6f549 | 98 | } else if (tempF < 70) { |
wongman | 0:0927a4a6f549 | 99 | uLCD.printf("It's not bad out,\nenjoy the day!"); |
wongman | 0:0927a4a6f549 | 100 | } else if (tempF < 85) { |
wongman | 0:0927a4a6f549 | 101 | uLCD.printf("Ahh room\ntemperature!"); |
wongman | 0:0927a4a6f549 | 102 | } else { |
wongman | 0:0927a4a6f549 | 103 | uLCD.printf("It's pretty hot!"); |
wongman | 0:0927a4a6f549 | 104 | } |
wongman | 0:0927a4a6f549 | 105 | m.unlock(); |
wongman | 0:0927a4a6f549 | 106 | Thread::wait(500); |
wongman | 0:0927a4a6f549 | 107 | } |
wongman | 0:0927a4a6f549 | 108 | } |