This is the final project for UCSC - June 9 2014

Dependencies:   C12832_lcd EthernetInterface libxively mbed-rtos mbed

Committer:
sqnewton
Date:
Mon Jun 09 20:19:30 2014 +0000
Revision:
1:125edf3ee8f9
Parent:
0:ae48035646b3
FINAL PROJECT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sqnewton 0:ae48035646b3 1 //IOT Class, Final Program, June 9,2014 , Santiago Quijano
sqnewton 0:ae48035646b3 2
sqnewton 0:ae48035646b3 3 #include "mbed.h"
sqnewton 0:ae48035646b3 4 #include "EthernetInterface.h"
sqnewton 0:ae48035646b3 5 #include "app_board_io.h"
sqnewton 0:ae48035646b3 6 #include "xively.h"
sqnewton 0:ae48035646b3 7 #include "xi_err.h"
sqnewton 0:ae48035646b3 8 #include "C12832_lcd.h"
sqnewton 0:ae48035646b3 9
sqnewton 0:ae48035646b3 10 #define XI_FEED_ID 1820036198 // set Xively Feed ID (numerical, no quoutes)
sqnewton 0:ae48035646b3 11 #define XI_API_KEY "IVX62a6sYvtBLwJfHIww9s8VTMJPyKOEgtQICXEjxEE4dZpM" // set Xively API key (double-quoted string)
sqnewton 0:ae48035646b3 12
sqnewton 0:ae48035646b3 13 #define UPDATE_RATE 15.0 // rate to update the feed in secs
sqnewton 0:ae48035646b3 14 #define DISPLAY_DELAY 1.0 // delay displaying refresh
sqnewton 0:ae48035646b3 15 #define DELAY 0x800000
sqnewton 0:ae48035646b3 16
sqnewton 0:ae48035646b3 17 C12832_LCD lcd; // define LCD
sqnewton 0:ae48035646b3 18 AnalogIn gas_sensor(p17); // define gas sensor
sqnewton 0:ae48035646b3 19 AnalogIn pot1(p19); // define pot1 for demo
sqnewton 0:ae48035646b3 20 DigitalOut red(p23); // define LEDS
sqnewton 0:ae48035646b3 21 DigitalOut green(p24);
sqnewton 0:ae48035646b3 22 DigitalOut blue(p25);
sqnewton 0:ae48035646b3 23 DigitalOut led1(LED1);
sqnewton 0:ae48035646b3 24 DigitalOut led3(LED3); // real sensor
sqnewton 0:ae48035646b3 25 DigitalOut led4(LED4); // demo pot
sqnewton 0:ae48035646b3 26
sqnewton 0:ae48035646b3 27 DigitalIn up(p15); // define joystick for demo
sqnewton 0:ae48035646b3 28 DigitalIn down(p12);
sqnewton 0:ae48035646b3 29
sqnewton 0:ae48035646b3 30 float level; // gas level
sqnewton 0:ae48035646b3 31 int demo = 0; // demo control 0=no demo, 1 = demo
sqnewton 0:ae48035646b3 32 int count; // counter for loop
sqnewton 0:ae48035646b3 33
sqnewton 0:ae48035646b3 34 int main()
sqnewton 0:ae48035646b3 35 {
sqnewton 0:ae48035646b3 36 red = 1; // turn LEDs off. Negative logic
sqnewton 0:ae48035646b3 37 green = 1;
sqnewton 0:ae48035646b3 38 blue = 1;
sqnewton 0:ae48035646b3 39
sqnewton 0:ae48035646b3 40 lcd.cls(); // clear screen
sqnewton 0:ae48035646b3 41 lcd.locate(0,0); // write next text in upper line
sqnewton 0:ae48035646b3 42 lcd.printf("Initializing...");
sqnewton 0:ae48035646b3 43
sqnewton 0:ae48035646b3 44
sqnewton 0:ae48035646b3 45 // Init ethernet interface
sqnewton 0:ae48035646b3 46 EthernetInterface eth;
sqnewton 0:ae48035646b3 47
sqnewton 0:ae48035646b3 48 int s = eth.init(); //try to Init ethernet connection. Use DHCP
sqnewton 0:ae48035646b3 49
sqnewton 0:ae48035646b3 50 if( s != NULL )
sqnewton 0:ae48035646b3 51 {
sqnewton 0:ae48035646b3 52 // failed to init
sqnewton 0:ae48035646b3 53 lcd_printf( "Could not initialize. Will halt!\n" );
sqnewton 0:ae48035646b3 54 red = 0;
sqnewton 0:ae48035646b3 55 green = 1;
sqnewton 0:ae48035646b3 56 blue = 1;
sqnewton 0:ae48035646b3 57 exit( 0 );
sqnewton 0:ae48035646b3 58 }
sqnewton 0:ae48035646b3 59
sqnewton 0:ae48035646b3 60 s = eth.connect(); // try to connect
sqnewton 0:ae48035646b3 61
sqnewton 0:ae48035646b3 62 if( s != NULL )
sqnewton 0:ae48035646b3 63 {
sqnewton 0:ae48035646b3 64 // failed to connect
sqnewton 0:ae48035646b3 65 lcd_printf( "Could not connect. Will halt!\n" );
sqnewton 0:ae48035646b3 66 red = 0;
sqnewton 0:ae48035646b3 67 green = 1;
sqnewton 0:ae48035646b3 68 blue = 1;
sqnewton 0:ae48035646b3 69 exit( 0 );
sqnewton 0:ae48035646b3 70 }
sqnewton 0:ae48035646b3 71 else // connected. display IP address
sqnewton 0:ae48035646b3 72 {
sqnewton 0:ae48035646b3 73 lcd.locate(0,0);
sqnewton 0:ae48035646b3 74 lcd_printf( "IP: %s\n", eth.getIPAddress() );
sqnewton 0:ae48035646b3 75 red = 1;
sqnewton 0:ae48035646b3 76 green = 0;
sqnewton 0:ae48035646b3 77 blue = 1;
sqnewton 0:ae48035646b3 78 }
sqnewton 0:ae48035646b3 79
sqnewton 0:ae48035646b3 80 wait(2.0);
sqnewton 0:ae48035646b3 81
sqnewton 0:ae48035646b3 82 xi_feed_t feed; // create Xively feed
sqnewton 0:ae48035646b3 83 memset( &feed, NULL, sizeof( xi_feed_t ) );
sqnewton 0:ae48035646b3 84
sqnewton 0:ae48035646b3 85 feed.feed_id = XI_FEED_ID;
sqnewton 0:ae48035646b3 86 feed.datastream_count = 1;
sqnewton 0:ae48035646b3 87
sqnewton 0:ae48035646b3 88 feed.datastreams[0].datapoint_count = 1;
sqnewton 0:ae48035646b3 89 xi_datastream_t* gas_level_datastream = &feed.datastreams[0];
sqnewton 0:ae48035646b3 90 strcpy( gas_level_datastream->datastream_id, "Gas" );
sqnewton 0:ae48035646b3 91 xi_datapoint_t* current_gas_level = &gas_level_datastream->datapoints[0];
sqnewton 0:ae48035646b3 92
sqnewton 0:ae48035646b3 93 // create the xively library context
sqnewton 0:ae48035646b3 94 xi_context_t* xi_context
sqnewton 0:ae48035646b3 95 = xi_create_context( XI_HTTP, XI_API_KEY, feed.feed_id );
sqnewton 0:ae48035646b3 96
sqnewton 0:ae48035646b3 97 // check if everything works
sqnewton 0:ae48035646b3 98 if( xi_context == NULL )
sqnewton 0:ae48035646b3 99 {
sqnewton 0:ae48035646b3 100 led1 = 1;
sqnewton 0:ae48035646b3 101 return -1;
sqnewton 0:ae48035646b3 102 }
sqnewton 0:ae48035646b3 103
sqnewton 0:ae48035646b3 104 while(1)
sqnewton 0:ae48035646b3 105 {
sqnewton 0:ae48035646b3 106
sqnewton 0:ae48035646b3 107 if (demo == 0)
sqnewton 0:ae48035646b3 108 level = gas_sensor.read(); // read gas level
sqnewton 0:ae48035646b3 109 else
sqnewton 0:ae48035646b3 110 level = pot1;
sqnewton 0:ae48035646b3 111
sqnewton 0:ae48035646b3 112 lcd.locate(0,12); // display an update and update LEDS
sqnewton 0:ae48035646b3 113 lcd_printf( "Value: %.3f", level);
sqnewton 0:ae48035646b3 114
sqnewton 0:ae48035646b3 115 xi_set_value_f32( current_gas_level, level ); // set the value
sqnewton 0:ae48035646b3 116
sqnewton 0:ae48035646b3 117 lcd.locate(0,22); // display an update and update LEDS
sqnewton 0:ae48035646b3 118 lcd_printf( "Updating...\n" );
sqnewton 0:ae48035646b3 119 red = 1;
sqnewton 0:ae48035646b3 120 green = 1;
sqnewton 0:ae48035646b3 121 blue = 0;
sqnewton 0:ae48035646b3 122 xi_feed_update( xi_context, &feed );
sqnewton 0:ae48035646b3 123 wait(DISPLAY_DELAY);
sqnewton 0:ae48035646b3 124 lcd.locate(0,22);
sqnewton 0:ae48035646b3 125 lcd_printf( "Done... \n" );
sqnewton 0:ae48035646b3 126 red = 1;
sqnewton 0:ae48035646b3 127 green = 0;
sqnewton 0:ae48035646b3 128 blue = 1;
sqnewton 0:ae48035646b3 129
sqnewton 0:ae48035646b3 130 count = DELAY;
sqnewton 0:ae48035646b3 131 while (count != 0)
sqnewton 0:ae48035646b3 132 {
sqnewton 0:ae48035646b3 133 count--;
sqnewton 0:ae48035646b3 134 if (up == 1) // whiel waiting check if demo
sqnewton 0:ae48035646b3 135 {
sqnewton 0:ae48035646b3 136 demo = 1;
sqnewton 0:ae48035646b3 137 led4 = 1;
sqnewton 0:ae48035646b3 138 led3 = 0;
sqnewton 0:ae48035646b3 139 }
sqnewton 0:ae48035646b3 140
sqnewton 0:ae48035646b3 141 if (down == 1) // check if real sensor
sqnewton 0:ae48035646b3 142 {
sqnewton 0:ae48035646b3 143 demo = 0;
sqnewton 0:ae48035646b3 144 led4 = 0;
sqnewton 0:ae48035646b3 145 led3 = 1;
sqnewton 0:ae48035646b3 146 }
sqnewton 0:ae48035646b3 147 }
sqnewton 0:ae48035646b3 148
sqnewton 0:ae48035646b3 149 //wait( UPDATE_RATE - DISPLAY_DELAY );
sqnewton 0:ae48035646b3 150 }
sqnewton 0:ae48035646b3 151 }
sqnewton 0:ae48035646b3 152
sqnewton 0:ae48035646b3 153
sqnewton 0:ae48035646b3 154 /* ******* TEST REPORT **********
sqnewton 0:ae48035646b3 155
sqnewton 0:ae48035646b3 156 PROGRAM COMPILES W/O WARNINGS OR ERRORS: PASS
sqnewton 0:ae48035646b3 157 SYSTEM BOOTS UP CORRECTLY: PASS
sqnewton 0:ae48035646b3 158 DISPLAYS INITIALIZATION SETTINGS INTERACTIVELY: PASS
sqnewton 0:ae48035646b3 159 GAS VALUES DETECTION: PASS
sqnewton 0:ae48035646b3 160 CONNECTION VIA ETHERNET: PASS
sqnewton 0:ae48035646b3 161 ESTABILISH CONNECYTION TO XIVELY: PASS
sqnewton 0:ae48035646b3 162 SYSTEM TRANSMITS PERIODIC INFORMATION: PASS
sqnewton 1:125edf3ee8f9 163 EXCEEDING THRESHOLDS GENERATES AN ALARM/TEXT MESSAGE: PASS
sqnewton 1:125edf3ee8f9 164 OVERALL: PASS
sqnewton 0:ae48035646b3 165
sqnewton 0:ae48035646b3 166 SYSTEM TESTED ON MON-JUNE 9-2014 @ 10:04 AM
sqnewton 0:ae48035646b3 167 TESTED BY: SANTIAGO QUIJANO
sqnewton 0:ae48035646b3 168 *** END OF REPORT ****
sqnewton 0:ae48035646b3 169
sqnewton 0:ae48035646b3 170 */