Public Repository for IoT demo, leveraging the FRDM-K64F, WNC Cellular Modem, and AT&T M2X platform. Expects GPIO input from a sensor to send a discrete value to M2X.

Dependencies:   ConfigFile M2XStreamClient-JMF PinDetect SDFileSystem WNCInterface jsonlite mbed-rtos mbed

Fork of SVP_IoT_M2X_Cellular by Casey Bleeker

Committer:
geekbleek
Date:
Sat Feb 18 22:51:09 2017 +0000
Revision:
5:f03cda4a4cc9
Parent:
4:b9f2193b27cf
Child:
6:67203388294b
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:62feed0f1fd9 1 //
JMF 0:62feed0f1fd9 2 // This file contains an example implementation of M2X using the HTTP interface as the underlying
JMF 0:62feed0f1fd9 3 // transport.
JMF 0:62feed0f1fd9 4 //
JMF 0:62feed0f1fd9 5
JMF 0:62feed0f1fd9 6 #include "mbed.h"
geekbleek 5:f03cda4a4cc9 7 #include "PinDetect.h"
JMF 0:62feed0f1fd9 8 #include "WNCInterface.h"
JMF 0:62feed0f1fd9 9
JMF 0:62feed0f1fd9 10 #define MBED_PLATFORM
JMF 0:62feed0f1fd9 11 #define M2X_ENABLE_READER
JMF 0:62feed0f1fd9 12
JMF 0:62feed0f1fd9 13 #include <jsonlite.h>
JMF 0:62feed0f1fd9 14 #include "M2XStreamClient.h"
JMF 0:62feed0f1fd9 15
JMF 0:62feed0f1fd9 16 #define CRLF "\n\r"
JMF 0:62feed0f1fd9 17
geekbleek 4:b9f2193b27cf 18 char deviceId[] = "3263056a467bc4eacd787bb0af9c1ad6"; // Device you want to post to
geekbleek 4:b9f2193b27cf 19 char m2xKey[] = "0aad274b67c7faa8110769ae9d739033"; // Your M2X API Key or Master API Key
JMF 0:62feed0f1fd9 20
JMF 0:62feed0f1fd9 21 const char *hstreamName = "humidity";
JMF 0:62feed0f1fd9 22 const char *tstreamName = "temperature";
JMF 0:62feed0f1fd9 23 const char *streamNames[] = { tstreamName, hstreamName };
JMF 0:62feed0f1fd9 24 char name[] = "Wake Forest"; // Name of current location of datasource
JMF 0:62feed0f1fd9 25
JMF 0:62feed0f1fd9 26 int counts[] = { 2, 1 };
JMF 0:62feed0f1fd9 27 const char *ats[] = { "2016-09-09T02:05:14.692Z",
JMF 0:62feed0f1fd9 28 "2016-09-09T02:05:14.700Z",
JMF 0:62feed0f1fd9 29 "2016-09-09T02:05:14.692Z" };
JMF 0:62feed0f1fd9 30 double values[] = { 10.9, 11.2, 6.1 };
JMF 0:62feed0f1fd9 31
JMF 0:62feed0f1fd9 32 char fromTime[]= "1969-12-31T19:00:01.000Z"; // yyyy-mm-ddTHH:MM:SS.SSSZ
JMF 0:62feed0f1fd9 33 char endTime[25];
JMF 0:62feed0f1fd9 34
JMF 0:62feed0f1fd9 35 double latitude = 33.007872; // You could read these values from a GPS but
JMF 0:62feed0f1fd9 36 double longitude = -96.751614; // for now, will just hardcode them
JMF 0:62feed0f1fd9 37 double elevation = 697.00;
JMF 0:62feed0f1fd9 38
geekbleek 5:f03cda4a4cc9 39 //DigitalIn mypin(A2);
geekbleek 5:f03cda4a4cc9 40 //DigitalOut led_green(LED_GREEN);
geekbleek 5:f03cda4a4cc9 41 //DigitalOut led_red(LED_RED);
geekbleek 5:f03cda4a4cc9 42 //DigitalOut led_blue(LED_BLUE);
geekbleek 4:b9f2193b27cf 43
geekbleek 4:b9f2193b27cf 44
JMF 0:62feed0f1fd9 45 WNCInterface eth;
JMF 0:62feed0f1fd9 46 Client client;
JMF 0:62feed0f1fd9 47 M2XStreamClient m2xClient(&client, m2xKey);
JMF 0:62feed0f1fd9 48 TimeService timeService(&m2xClient);
JMF 1:1c840717deea 49 MODSERIAL pc(USBTX,USBRX,256,256);
JMF 0:62feed0f1fd9 50
JMF 0:62feed0f1fd9 51 void on_data_point_found(const char* at, const char* value, int index, void* context, int type) {
JMF 2:eb0768c06c1b 52 pc.printf(">>Found a data point, index: %d type: %d" CRLF, index, type);
JMF 2:eb0768c06c1b 53 pc.printf(">>At: %s" CRLF " Value: %s" CRLF, at, value);
JMF 0:62feed0f1fd9 54 }
JMF 0:62feed0f1fd9 55
JMF 0:62feed0f1fd9 56
JMF 0:62feed0f1fd9 57 void on_command_found(const char* id, const char* name, int index, void *context) {
JMF 2:eb0768c06c1b 58 pc.printf(">>Found a command, index: %d" CRLF, index);
JMF 2:eb0768c06c1b 59 pc.printf(">>ID: %s\n Name: %s" CRLF, id, name);
JMF 0:62feed0f1fd9 60 }
JMF 0:62feed0f1fd9 61
JMF 0:62feed0f1fd9 62 void on_location_found(const char* name,
JMF 0:62feed0f1fd9 63 double latitude,
JMF 0:62feed0f1fd9 64 double longitude,
JMF 0:62feed0f1fd9 65 double elevation,
JMF 0:62feed0f1fd9 66 const char* timestamp,
JMF 0:62feed0f1fd9 67 int index,
JMF 0:62feed0f1fd9 68 void* context) {
JMF 2:eb0768c06c1b 69 pc.printf(">>Found a location, index: %d" CRLF, index);
JMF 2:eb0768c06c1b 70 pc.printf(">>Name: %s" CRLF ">>Latitude: %lf" CRLF ">>Longitude: %lf" CRLF, name, latitude, longitude);
JMF 2:eb0768c06c1b 71 pc.printf(">>Elevation: %lf" CRLF ">>Timestamp: %s" CRLF, elevation, timestamp);
JMF 0:62feed0f1fd9 72 }
JMF 0:62feed0f1fd9 73
geekbleek 4:b9f2193b27cf 74 //********************************************************************************************************************************************
geekbleek 4:b9f2193b27cf 75 //* Set the RGB LED's Color
geekbleek 4:b9f2193b27cf 76 //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue)
geekbleek 4:b9f2193b27cf 77 //********************************************************************************************************************************************
geekbleek 5:f03cda4a4cc9 78 //void SetLedColor(unsigned char ucColor)
geekbleek 5:f03cda4a4cc9 79 //{
geekbleek 5:f03cda4a4cc9 80 // //Note that when an LED is on, you write a 0 to it:
geekbleek 5:f03cda4a4cc9 81 // led_red = !(ucColor & 0x1); //bit 0
geekbleek 5:f03cda4a4cc9 82 // led_green = !(ucColor & 0x2); //bit 1
geekbleek 5:f03cda4a4cc9 83 // led_blue = !(ucColor & 0x4); //bit 2
geekbleek 5:f03cda4a4cc9 84 //} //SetLedColor()
geekbleek 4:b9f2193b27cf 85
geekbleek 4:b9f2193b27cf 86
geekbleek 4:b9f2193b27cf 87
geekbleek 4:b9f2193b27cf 88
geekbleek 4:b9f2193b27cf 89 //int main() {
geekbleek 4:b9f2193b27cf 90 // char timestamp[25];
geekbleek 4:b9f2193b27cf 91 // int length = 25;
geekbleek 4:b9f2193b27cf 92 // char amb_temp[6];
geekbleek 4:b9f2193b27cf 93 // char amb_humd[6];
geekbleek 4:b9f2193b27cf 94 // int response, cnt=1;
geekbleek 4:b9f2193b27cf 95 // double temp=0.00; //we will just increment these 0.01 each time through the loop
geekbleek 4:b9f2193b27cf 96 // double humid=0.00; //we will just increment these 1 each time through the loop wrapping at 100
geekbleek 4:b9f2193b27cf 97 //
geekbleek 4:b9f2193b27cf 98 // pc.baud(115200);
geekbleek 4:b9f2193b27cf 99 // pc.printf("Start m2x-demo-all by initializng the network" CRLF);
geekbleek 4:b9f2193b27cf 100 // response = eth.init();
geekbleek 4:b9f2193b27cf 101 // pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response);
geekbleek 4:b9f2193b27cf 102 // if( !response ) {
geekbleek 4:b9f2193b27cf 103 // pc.printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
geekbleek 4:b9f2193b27cf 104 // while(1);
geekbleek 4:b9f2193b27cf 105 // }
geekbleek 4:b9f2193b27cf 106 //
geekbleek 4:b9f2193b27cf 107 // response = eth.connect();
geekbleek 4:b9f2193b27cf 108 // pc.printf("IP Address: %s " CRLF CRLF, eth.getIPAddress());
geekbleek 4:b9f2193b27cf 109 //
geekbleek 4:b9f2193b27cf 110 // pc.printf("initialize the M2X time service" CRLF);
geekbleek 4:b9f2193b27cf 111 // if (!m2x_status_is_success(timeService.init()))
geekbleek 4:b9f2193b27cf 112 // pc.printf("Cannot initialize time service!" CRLF);
geekbleek 4:b9f2193b27cf 113 // else {
geekbleek 4:b9f2193b27cf 114 // timeService.getTimestamp(timestamp, &length);
geekbleek 4:b9f2193b27cf 115 // pc.printf("Current timestamp: %s" CRLF, timestamp);
geekbleek 4:b9f2193b27cf 116 // strcpy(endTime,timestamp);
geekbleek 4:b9f2193b27cf 117 // }
geekbleek 4:b9f2193b27cf 118 //
geekbleek 4:b9f2193b27cf 119 //// pc.printf("Now delete all existing values" CRLF);
geekbleek 4:b9f2193b27cf 120 //// // Delete values
geekbleek 4:b9f2193b27cf 121 //// pc.printf("Delete humidity values..." CRLF);
geekbleek 4:b9f2193b27cf 122 //// response = m2xClient.deleteValues(deviceId,hstreamName, fromTime, endTime);
geekbleek 4:b9f2193b27cf 123 //// pc.printf("Delete response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 124 ////
geekbleek 4:b9f2193b27cf 125 //// pc.printf("Delete temp values..." CRLF);
geekbleek 4:b9f2193b27cf 126 //// response = m2xClient.deleteValues(deviceId,tstreamName, fromTime, endTime);
geekbleek 4:b9f2193b27cf 127 //// pc.printf("Delete response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 128 ////
geekbleek 4:b9f2193b27cf 129 //// pc.printf("Delete location values..." CRLF);
geekbleek 4:b9f2193b27cf 130 //// response = m2xClient.deleteLocations(deviceId, fromTime, endTime);
geekbleek 4:b9f2193b27cf 131 //// pc.printf("Delete response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 132 //
geekbleek 4:b9f2193b27cf 133 // pc.printf("Query for possible commands using this device..." CRLF);
geekbleek 4:b9f2193b27cf 134 // response = m2xClient.listCommands(deviceId, on_command_found, NULL);
geekbleek 4:b9f2193b27cf 135 // pc.printf("listCommands response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 136 //
geekbleek 4:b9f2193b27cf 137 //
geekbleek 4:b9f2193b27cf 138 //
geekbleek 4:b9f2193b27cf 139 //
geekbleek 4:b9f2193b27cf 140 // while (true) {
geekbleek 4:b9f2193b27cf 141 // // read temp -- for now, just use a fixed temp, but will need to read the HTS221
geekbleek 4:b9f2193b27cf 142 // // and put it into a 6 byte string formatted as "%0.2f"
geekbleek 4:b9f2193b27cf 143 // sprintf(amb_temp,"%0.2f",temp);
geekbleek 4:b9f2193b27cf 144 // sprintf(amb_humd,"%0.2f",humid);
geekbleek 4:b9f2193b27cf 145 // temp += .01;
geekbleek 4:b9f2193b27cf 146 // humid += 1.0;
geekbleek 4:b9f2193b27cf 147 // humid = fmod(humid,100.0);
geekbleek 4:b9f2193b27cf 148 // pc.printf("cnt=%d\r\n",cnt++);
geekbleek 4:b9f2193b27cf 149 //
geekbleek 4:b9f2193b27cf 150 // // post the temp value
geekbleek 4:b9f2193b27cf 151 // //pc.printf("Post updateStreamValue (temp)..." CRLF);
geekbleek 4:b9f2193b27cf 152 //// response = m2xClient.updateStreamValue(deviceId, "water-sensor", temp);
geekbleek 4:b9f2193b27cf 153 //// pc.printf("Post response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 154 //
geekbleek 4:b9f2193b27cf 155 // timeService.getTimestamp(timestamp, &length);
geekbleek 4:b9f2193b27cf 156 // pc.printf("Thats all folks, got to wait 5 seconds... (%s)" CRLF CRLF CRLF, timestamp);
geekbleek 4:b9f2193b27cf 157 //
geekbleek 4:b9f2193b27cf 158 // // wait 5 secs and then loop
geekbleek 4:b9f2193b27cf 159 // delay(5000);
geekbleek 4:b9f2193b27cf 160 //
geekbleek 4:b9f2193b27cf 161 //
geekbleek 4:b9f2193b27cf 162 // }
geekbleek 4:b9f2193b27cf 163 //}
geekbleek 4:b9f2193b27cf 164
geekbleek 4:b9f2193b27cf 165
geekbleek 4:b9f2193b27cf 166
geekbleek 4:b9f2193b27cf 167
geekbleek 5:f03cda4a4cc9 168 //int main() {
geekbleek 5:f03cda4a4cc9 169 // int response, cnt=1;
geekbleek 5:f03cda4a4cc9 170 // pc.baud(115200);
geekbleek 5:f03cda4a4cc9 171 // pc.printf("Start m2x-demo-all by initializng the network" CRLF);
geekbleek 5:f03cda4a4cc9 172 // response = eth.init();
geekbleek 5:f03cda4a4cc9 173 // pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response);
geekbleek 5:f03cda4a4cc9 174 // if( !response ) {
geekbleek 5:f03cda4a4cc9 175 // pc.printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
geekbleek 5:f03cda4a4cc9 176 // while(1);
geekbleek 5:f03cda4a4cc9 177 // }
geekbleek 5:f03cda4a4cc9 178 //
geekbleek 5:f03cda4a4cc9 179 // // check mypin object is initialized and connected to a pin
geekbleek 5:f03cda4a4cc9 180 // if(mypin.is_connected()) {
geekbleek 5:f03cda4a4cc9 181 // pc.printf("mypin is connected and initialized! \n\r");
geekbleek 5:f03cda4a4cc9 182 // }
geekbleek 5:f03cda4a4cc9 183 //
geekbleek 5:f03cda4a4cc9 184 // // Optional: set mode as PullUp/PullDown/PullNone/OpenDrain
geekbleek 5:f03cda4a4cc9 185 // mypin.mode(PullUp);
geekbleek 5:f03cda4a4cc9 186 //
geekbleek 5:f03cda4a4cc9 187 // while(true) {
geekbleek 5:f03cda4a4cc9 188 // //pc.printf("mypin has value : %d \n\r", mypin.read());
geekbleek 5:f03cda4a4cc9 189 // if (mypin) {
geekbleek 5:f03cda4a4cc9 190 // SetLedColor(1);
geekbleek 5:f03cda4a4cc9 191 // };
geekbleek 5:f03cda4a4cc9 192 // if (!mypin) {
geekbleek 5:f03cda4a4cc9 193 // SetLedColor(4);
geekbleek 5:f03cda4a4cc9 194 // };
geekbleek 5:f03cda4a4cc9 195 // wait(0.25);
geekbleek 5:f03cda4a4cc9 196 // }
geekbleek 5:f03cda4a4cc9 197 //}
geekbleek 5:f03cda4a4cc9 198
geekbleek 5:f03cda4a4cc9 199
geekbleek 5:f03cda4a4cc9 200
geekbleek 5:f03cda4a4cc9 201 //InterruptIn button(A2);
geekbleek 5:f03cda4a4cc9 202 //DigitalOut red(LED_RED);
geekbleek 5:f03cda4a4cc9 203 //DigitalOut blue(LED_BLUE);
geekbleek 5:f03cda4a4cc9 204 //
geekbleek 5:f03cda4a4cc9 205 //void flip() {
geekbleek 5:f03cda4a4cc9 206 // red = !red;
geekbleek 5:f03cda4a4cc9 207 // blue = !blue;
geekbleek 5:f03cda4a4cc9 208 //};
geekbleek 5:f03cda4a4cc9 209 //
geekbleek 5:f03cda4a4cc9 210 //int main() {
geekbleek 5:f03cda4a4cc9 211 // blue = !blue;
geekbleek 5:f03cda4a4cc9 212 // button.rise(&flip);
geekbleek 5:f03cda4a4cc9 213 // button.fall(&flip); // attach the address of the flip function to the rising edge
geekbleek 5:f03cda4a4cc9 214 //}
geekbleek 5:f03cda4a4cc9 215
geekbleek 5:f03cda4a4cc9 216 //DigitalOut Red(LED1);
geekbleek 5:f03cda4a4cc9 217 //DigitalOut Blue(LED3);
geekbleek 5:f03cda4a4cc9 218 //InterruptIn Interrupt(A2);
geekbleek 5:f03cda4a4cc9 219 //
geekbleek 5:f03cda4a4cc9 220 //
geekbleek 5:f03cda4a4cc9 221 //void blink()
geekbleek 5:f03cda4a4cc9 222 //{
geekbleek 5:f03cda4a4cc9 223 // wait(.4);
geekbleek 5:f03cda4a4cc9 224 // Red=1;
geekbleek 5:f03cda4a4cc9 225 // Blue=0;
geekbleek 5:f03cda4a4cc9 226 // wait(.4);
geekbleek 5:f03cda4a4cc9 227 // Blue=1;
geekbleek 5:f03cda4a4cc9 228 // wait(.4);
geekbleek 5:f03cda4a4cc9 229 //}
geekbleek 5:f03cda4a4cc9 230 //
geekbleek 5:f03cda4a4cc9 231 //int main()
geekbleek 5:f03cda4a4cc9 232 //{
geekbleek 5:f03cda4a4cc9 233 // Interrupt.mode(PullUp); // Enable internal pullup
geekbleek 5:f03cda4a4cc9 234 // Interrupt.fall(&blink);
geekbleek 5:f03cda4a4cc9 235 // Blue=1;
geekbleek 5:f03cda4a4cc9 236 // while (1)
geekbleek 5:f03cda4a4cc9 237 // {
geekbleek 5:f03cda4a4cc9 238 // Red=!Red;
geekbleek 5:f03cda4a4cc9 239 // wait(.4);
geekbleek 5:f03cda4a4cc9 240 // }
geekbleek 5:f03cda4a4cc9 241 //}
geekbleek 5:f03cda4a4cc9 242
geekbleek 5:f03cda4a4cc9 243
geekbleek 5:f03cda4a4cc9 244
geekbleek 5:f03cda4a4cc9 245
geekbleek 5:f03cda4a4cc9 246 PinDetect pin ( A2 );
geekbleek 5:f03cda4a4cc9 247 DigitalOut led1( LED1 );
geekbleek 5:f03cda4a4cc9 248 DigitalOut led2( LED2 );
geekbleek 5:f03cda4a4cc9 249 DigitalOut led3( LED3 );
geekbleek 5:f03cda4a4cc9 250 DigitalOut led4( LED4 );
geekbleek 5:f03cda4a4cc9 251
geekbleek 5:f03cda4a4cc9 252
geekbleek 5:f03cda4a4cc9 253
geekbleek 5:f03cda4a4cc9 254
geekbleek 5:f03cda4a4cc9 255 /*
geekbleek 5:f03cda4a4cc9 256 * Note, the PinDetect can be defined thus:-
geekbleek 5:f03cda4a4cc9 257 * PinDetect pin( p21, PullDown );
geekbleek 5:f03cda4a4cc9 258 * This allows you to specify the DigitalIn pinmode
geekbleek 5:f03cda4a4cc9 259 * when you create the PinDetect object. This means
geekbleek 5:f03cda4a4cc9 260 * using pin.mode() later is then no longer required.
geekbleek 5:f03cda4a4cc9 261 */
geekbleek 5:f03cda4a4cc9 262
geekbleek 5:f03cda4a4cc9 263 // C function callbacks follow.
geekbleek 5:f03cda4a4cc9 264
geekbleek 5:f03cda4a4cc9 265 void keyPressed( void ) {
geekbleek 5:f03cda4a4cc9 266 led2 = 1;
geekbleek 5:f03cda4a4cc9 267 led3 = 0;
geekbleek 5:f03cda4a4cc9 268 led4 = 0;
geekbleek 5:f03cda4a4cc9 269 pc.printf("Key Pressed\n");
geekbleek 5:f03cda4a4cc9 270 }
geekbleek 5:f03cda4a4cc9 271
geekbleek 5:f03cda4a4cc9 272 void keyReleased( void ) {
geekbleek 5:f03cda4a4cc9 273 led2 = 0;
geekbleek 5:f03cda4a4cc9 274 led3 = 0;
geekbleek 5:f03cda4a4cc9 275 led4 = 0;
geekbleek 5:f03cda4a4cc9 276 pc.printf("Key Released\n");
geekbleek 5:f03cda4a4cc9 277 }
geekbleek 5:f03cda4a4cc9 278
geekbleek 5:f03cda4a4cc9 279 void keyPressedHeld( void ) {
geekbleek 5:f03cda4a4cc9 280 led3 = 1;
geekbleek 5:f03cda4a4cc9 281 pc.printf("Key Pressed Held\n");
geekbleek 5:f03cda4a4cc9 282 }
geekbleek 5:f03cda4a4cc9 283
geekbleek 5:f03cda4a4cc9 284 void keyReleasedHeld( void ) {
geekbleek 5:f03cda4a4cc9 285 led4 = 1;
geekbleek 5:f03cda4a4cc9 286 pc.printf("Key Released Held\n");
geekbleek 5:f03cda4a4cc9 287 }
geekbleek 5:f03cda4a4cc9 288
geekbleek 5:f03cda4a4cc9 289 // The main program.
geekbleek 5:f03cda4a4cc9 290
JMF 0:62feed0f1fd9 291 int main() {
geekbleek 4:b9f2193b27cf 292 pc.baud(115200);
geekbleek 5:f03cda4a4cc9 293 led1 = 0
geekbleek 5:f03cda4a4cc9 294 led2 = 0
geekbleek 5:f03cda4a4cc9 295 led3 = 0
geekbleek 5:f03cda4a4cc9 296 led4 = 0
geekbleek 5:f03cda4a4cc9 297 pc.printf("Hello World! I am here!\n");
geekbleek 5:f03cda4a4cc9 298 pin.mode( PullUp );
geekbleek 5:f03cda4a4cc9 299 pin.attach_asserted( &keyPressed );
geekbleek 5:f03cda4a4cc9 300 pin.attach_deasserted( &keyReleased );
geekbleek 5:f03cda4a4cc9 301 pin.attach_asserted_held( &keyPressedHeld );
geekbleek 4:b9f2193b27cf 302
geekbleek 5:f03cda4a4cc9 303 // This callback will often be of little use as it's
geekbleek 5:f03cda4a4cc9 304 // called after every assertion/deassertion. However,
geekbleek 5:f03cda4a4cc9 305 // it's provided for completeness. You may find a use
geekbleek 5:f03cda4a4cc9 306 // for it. If not, just don't attach a callback and it
geekbleek 5:f03cda4a4cc9 307 // will not activate.
geekbleek 5:f03cda4a4cc9 308 pin.attach_deasserted_held( &keyReleasedHeld );
JMF 0:62feed0f1fd9 309
geekbleek 5:f03cda4a4cc9 310 // You can define how many continuous samples must be
geekbleek 5:f03cda4a4cc9 311 // asserted before the attach_asserted() function is called.
geekbleek 5:f03cda4a4cc9 312 // pin.setSamplesTillAssert( 10 );
geekbleek 5:f03cda4a4cc9 313 // This would mean 10 * 20ms debounce time = 200ms.
geekbleek 5:f03cda4a4cc9 314
geekbleek 5:f03cda4a4cc9 315 // You can define how many continuous samples must be
geekbleek 5:f03cda4a4cc9 316 // asserted before the attach_asserted_held() function is called.
geekbleek 5:f03cda4a4cc9 317 // pin.setSamplesTillHeld( 200 );
geekbleek 5:f03cda4a4cc9 318 // This would mean 200 * 20ms debounce time = 2seconds.
geekbleek 5:f03cda4a4cc9 319
geekbleek 5:f03cda4a4cc9 320 // By default, "asserted" assumes the pin going high from 0volts to 5volts
geekbleek 5:f03cda4a4cc9 321 // and deasserted assumes going from 5volts to 0volts. You can invert this
geekbleek 5:f03cda4a4cc9 322 // logic so that going to 0volts is asserted and going to 5volts is deasserted
geekbleek 5:f03cda4a4cc9 323 // using this setup function:-
geekbleek 5:f03cda4a4cc9 324 // pin.setAssertValue( 0 );
geekbleek 5:f03cda4a4cc9 325
geekbleek 5:f03cda4a4cc9 326 // Sampling does NOT begin until you set the frequency. So, until
geekbleek 5:f03cda4a4cc9 327 // you call this function NO callbacks will be made. With no arguments
geekbleek 5:f03cda4a4cc9 328 // passed the default is 20000 microseconds (20ms). Specifiy the sampling
geekbleek 5:f03cda4a4cc9 329 // period in microseconds if you want a different value to 20ms.
geekbleek 5:f03cda4a4cc9 330 // For example, for a sampling period of 10ms do:-
geekbleek 5:f03cda4a4cc9 331 // pin.setSampleFrequency( 10000 );
geekbleek 5:f03cda4a4cc9 332 // Note, if you change the sampling frequency you will probably also
geekbleek 5:f03cda4a4cc9 333 // want to change the number of samples till assert and held as show
geekbleek 5:f03cda4a4cc9 334 // above.
geekbleek 5:f03cda4a4cc9 335 pin.setSampleFrequency(); // Defaults to 20ms.
geekbleek 5:f03cda4a4cc9 336
geekbleek 5:f03cda4a4cc9 337 while( 1 ) {
geekbleek 5:f03cda4a4cc9 338 led1 = !led1;
geekbleek 5:f03cda4a4cc9 339 wait( 0.2 );
geekbleek 4:b9f2193b27cf 340 }
geekbleek 5:f03cda4a4cc9 341 }