Code to work with stadium.

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

Fork of StadiumHelper by Raymond Wong

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?

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);
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 }