Code to work with stadium.

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed

Fork of StadiumHelper by Raymond Wong

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?

UserRevisionLine numberNew 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 }