Connections to Xively working; has 5 channels on Xively (axl_x, axl_y, axl_z, heater_status, temperature)

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 NTPClient libxively mbed-rtos mbed

Committer:
wren301
Date:
Tue Apr 29 06:50:11 2014 +0000
Revision:
0:785d351db1ad
Child:
1:0d467ac74808
HW3 part1, first checkin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wren301 0:785d351db1ad 1 #include "mbed.h"
wren301 0:785d351db1ad 2 #include "EthernetInterface.h"
wren301 0:785d351db1ad 3 #include "NTPClient.h"
wren301 0:785d351db1ad 4 #include "C12832_lcd.h"
wren301 0:785d351db1ad 5 #include "LM75B.h"
wren301 0:785d351db1ad 6 #include "MMA7660.h"
wren301 0:785d351db1ad 7
wren301 0:785d351db1ad 8 #define PST_OFFSET 7*60*60
wren301 0:785d351db1ad 9
wren301 0:785d351db1ad 10 Ticker timer;
wren301 0:785d351db1ad 11 C12832_LCD lcd; //Graphics LCD
wren301 0:785d351db1ad 12 EthernetInterface eth; //Networking functions
wren301 0:785d351db1ad 13 NTPClient ntp; //NTP client
wren301 0:785d351db1ad 14 LM75B tmp(p28,p27);
wren301 0:785d351db1ad 15 float setTemp = 74;
wren301 0:785d351db1ad 16 float temp;
wren301 0:785d351db1ad 17 int heaterOn = 0;
wren301 0:785d351db1ad 18 DigitalIn leftButton(p13);
wren301 0:785d351db1ad 19 DigitalIn rightButton(p16);
wren301 0:785d351db1ad 20 #define DEBOUNCE_DELAY 3
wren301 0:785d351db1ad 21 #define LOOP_DELAY_MS 100
wren301 0:785d351db1ad 22 #define TEMP_HYSTERESIS 2
wren301 0:785d351db1ad 23 //update time every 10 minutes
wren301 0:785d351db1ad 24 #define UPDATE_TIME 60*1
wren301 0:785d351db1ad 25 int pressed = 0;
wren301 0:785d351db1ad 26 int debounceCount = 0;
wren301 0:785d351db1ad 27 float avgTemp = 0;
wren301 0:785d351db1ad 28 MMA7660 MMA(p28, p27);
wren301 0:785d351db1ad 29 int updateTimeFromServer = 1;
wren301 0:785d351db1ad 30
wren301 0:785d351db1ad 31 void debouncedButtonCheck() {
wren301 0:785d351db1ad 32 if (leftButton || rightButton || pressed) {
wren301 0:785d351db1ad 33 if (leftButton && !pressed) {setTemp -= 2;}
wren301 0:785d351db1ad 34 if (rightButton && !pressed) {setTemp += 2;}
wren301 0:785d351db1ad 35 pressed = 1;
wren301 0:785d351db1ad 36 debounceCount++;
wren301 0:785d351db1ad 37 if (debounceCount >= DEBOUNCE_DELAY) {
wren301 0:785d351db1ad 38 debounceCount = 0;
wren301 0:785d351db1ad 39 pressed = 0;
wren301 0:785d351db1ad 40 printf("New set temp: %.0f\n\r", setTemp);
wren301 0:785d351db1ad 41 lcd.locate(0,0);
wren301 0:785d351db1ad 42 lcd.printf("\n\rTemp: %.0f F Set: %.0f\n\r", avgTemp, setTemp);
wren301 0:785d351db1ad 43 }
wren301 0:785d351db1ad 44 }
wren301 0:785d351db1ad 45 }
wren301 0:785d351db1ad 46 void connectToTheInternet() {
wren301 0:785d351db1ad 47 eth.init(); //Init and use DHCP
wren301 0:785d351db1ad 48 wait(2);
wren301 0:785d351db1ad 49 lcd.cls();
wren301 0:785d351db1ad 50 lcd.printf("Getting IP Address\r\n");
wren301 0:785d351db1ad 51 printf("Getting IP Address\r\n");
wren301 0:785d351db1ad 52 if(eth.connect(60000)!=0) {
wren301 0:785d351db1ad 53 lcd.printf("DHCP error - No IP");
wren301 0:785d351db1ad 54 wait(10);
wren301 0:785d351db1ad 55 } else {
wren301 0:785d351db1ad 56 lcd.printf("IP is %s\n", eth.getIPAddress());
wren301 0:785d351db1ad 57 printf("IP is %s\n", eth.getIPAddress());
wren301 0:785d351db1ad 58 wait(2);
wren301 0:785d351db1ad 59 }
wren301 0:785d351db1ad 60 lcd.cls();
wren301 0:785d351db1ad 61 }
wren301 0:785d351db1ad 62
wren301 0:785d351db1ad 63 void updateTime() {
wren301 0:785d351db1ad 64 updateTimeFromServer = 1;
wren301 0:785d351db1ad 65 }
wren301 0:785d351db1ad 66
wren301 0:785d351db1ad 67 int main()
wren301 0:785d351db1ad 68 {
wren301 0:785d351db1ad 69 connectToTheInternet();
wren301 0:785d351db1ad 70 //Variable to hold the current minute so we only update the display when the minute changes
wren301 0:785d351db1ad 71 char currentMinute[2];
wren301 0:785d351db1ad 72 currentMinute[1] = 'a';
wren301 0:785d351db1ad 73 char minute[2];
wren301 0:785d351db1ad 74 //float zaxis = MMA.z();
wren301 0:785d351db1ad 75
wren301 0:785d351db1ad 76 float currentTemp = -200;
wren301 0:785d351db1ad 77 lcd.printf("Updating time...\r\n");
wren301 0:785d351db1ad 78 printf("Updating time...\r\n");
wren301 0:785d351db1ad 79 if (ntp.setTime("0.pool.ntp.org") == 0) {
wren301 0:785d351db1ad 80 time_t ctTime;
wren301 0:785d351db1ad 81 lcd.printf("Set time successfully\r\n");
wren301 0:785d351db1ad 82 printf("Set time successfully\r\n");
wren301 0:785d351db1ad 83 lcd.cls();
wren301 0:785d351db1ad 84 timer.attach(&updateTime, UPDATE_TIME);
wren301 0:785d351db1ad 85 lcd.printf("\n\r\n\rHEATER OFF");
wren301 0:785d351db1ad 86 while(1) {
wren301 0:785d351db1ad 87
wren301 0:785d351db1ad 88 if(updateTimeFromServer) {
wren301 0:785d351db1ad 89 if (ntp.setTime("0.pool.ntp.org") == 0) {
wren301 0:785d351db1ad 90 printf("Time updated!");
wren301 0:785d351db1ad 91 } else {
wren301 0:785d351db1ad 92 lcd.locate(0,0);
wren301 0:785d351db1ad 93 printf("Time update failed \n\r");
wren301 0:785d351db1ad 94 lcd.printf("Time update failed");
wren301 0:785d351db1ad 95 }
wren301 0:785d351db1ad 96 updateTimeFromServer = 0;
wren301 0:785d351db1ad 97 }
wren301 0:785d351db1ad 98 //Checks button and sets setTemp accordingly
wren301 0:785d351db1ad 99 debouncedButtonCheck();
wren301 0:785d351db1ad 100 //Fetch the time
wren301 0:785d351db1ad 101 ctTime = time(NULL)- PST_OFFSET;
wren301 0:785d351db1ad 102 char timeBuffer[32];
wren301 0:785d351db1ad 103
wren301 0:785d351db1ad 104 //See if the minute has changed; set an update display flag if it has
wren301 0:785d351db1ad 105 strftime(minute, 8, "%M", localtime(&ctTime));
wren301 0:785d351db1ad 106 if ( (minute[1] != currentMinute[1]) ) {
wren301 0:785d351db1ad 107 //Formats the time for display
wren301 0:785d351db1ad 108 strftime(timeBuffer, 32, "%a %b %d %I:%M%p\n\r", localtime(&ctTime));
wren301 0:785d351db1ad 109 printf("%s\r", timeBuffer);
wren301 0:785d351db1ad 110 lcd.locate(0,0);
wren301 0:785d351db1ad 111 lcd.printf("%s\r", timeBuffer);
wren301 0:785d351db1ad 112 currentMinute[1] = minute[1];
wren301 0:785d351db1ad 113 }
wren301 0:785d351db1ad 114 //Update the temperature display if the temperature, set temp has changed
wren301 0:785d351db1ad 115 temp = tmp.read()*9.0/5.0 + 32.0;
wren301 0:785d351db1ad 116 //checks if the temperature (rounded to the nearest whole number) has changed
wren301 0:785d351db1ad 117 if (floor(temp+.5) != floor(currentTemp+.5)) {
wren301 0:785d351db1ad 118 printf("Temp: %.1f F Set: %.0f\n\r", temp, setTemp);
wren301 0:785d351db1ad 119 currentTemp = temp;
wren301 0:785d351db1ad 120 avgTemp = (temp+currentTemp)/2.0;
wren301 0:785d351db1ad 121 lcd.locate(0,0);
wren301 0:785d351db1ad 122 lcd.printf("\n\rTemp: %.0f F Set: %.0f\n\r", avgTemp, setTemp);
wren301 0:785d351db1ad 123 }
wren301 0:785d351db1ad 124 lcd.locate(0,0);
wren301 0:785d351db1ad 125 //Heater logic: turns off if it has gone 2 degrees over the set temp, or on if it's 2 degrees under
wren301 0:785d351db1ad 126 if (heaterOn && (temp > (setTemp + TEMP_HYSTERESIS)) ) {
wren301 0:785d351db1ad 127 printf("Heater turned OFF\n\r");
wren301 0:785d351db1ad 128 heaterOn = 0;
wren301 0:785d351db1ad 129 lcd.locate(0,0);
wren301 0:785d351db1ad 130 lcd.printf("\n\r\n\rHEATER OFF");
wren301 0:785d351db1ad 131 } else if (!heaterOn && (temp < (setTemp - TEMP_HYSTERESIS)) ) {
wren301 0:785d351db1ad 132 printf("Heater turned ON\n\r");
wren301 0:785d351db1ad 133 heaterOn = 1;
wren301 0:785d351db1ad 134 lcd.locate(0,0);
wren301 0:785d351db1ad 135 lcd.printf("\n\r\n\rHEATER ON");
wren301 0:785d351db1ad 136 }
wren301 0:785d351db1ad 137 wait(LOOP_DELAY_MS*.001);
wren301 0:785d351db1ad 138 }
wren301 0:785d351db1ad 139 } else {
wren301 0:785d351db1ad 140 lcd.printf("NTP Error\r\n");
wren301 0:785d351db1ad 141 }
wren301 0:785d351db1ad 142 eth.disconnect();
wren301 0:785d351db1ad 143 }