Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: IOTON-API USBDevice mbed-ton
Fork of ton_demo by
Revision 0:52cc151dc505, committed 2017-06-29
- Comitter:
- krebyy
- Date:
- Thu Jun 29 20:37:24 2017 +0000
- Child:
- 1:712c0874072c
- Commit message:
- First commit - ioton.cc/demo
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IOTON-API.lib Thu Jun 29 20:37:24 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/krebyy/code/IOTON-API/#9c7195d31602
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBDevice.lib Thu Jun 29 20:37:24 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/USBDevice/#01321bd6ff89
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Jun 29 20:37:24 2017 +0000
@@ -0,0 +1,205 @@
+// Includes --------------------------------------------------------------------
+#include "Ioton.h"
+
+// Defines ---------------------------------------------------------------------
+#define MY_SSID "mySSID" // Enter router ssid inside the quotes
+#define MY_PASS "myPASS" // Enter router password inside the quotes
+#define MY_API_KEY "myAPIKEY" // Enter ThingSpeak API KEY of channel
+
+
+// Private variables -----------------------------------------------------------
+PwmOut pwm(PIN13); // PWM output
+DigitalOut out(PIN14); // Digital output
+AnalogIn ain(PIN15); // Analog input
+DigitalIn in(PIN16); // Digital input
+
+InterruptIn button(SW_USER); // USER button - interrupt mode
+int userCount = 0; // USER button counter
+
+char bufferRxBluetooth[20]; // Buffer of Bluetooth commands
+volatile uint8_t bufferCountRxBluetooth = 0; // Index counter - Blutooth buffer
+volatile bool flagCmdBluetooth = false; // Indicates new Bluetooth command received
+
+char* replyHttp; // Buffer of reply http get method
+uint8_t countThingSpeak = 0; // Auxiliar counter - ThingSpeak
+
+Ticker imuTick; // IMU Tick Timer
+
+
+// *****************************************************************************
+// Private functions ***********************************************************
+// *****************************************************************************
+// Runs the AHRS algorithm - Rate: 0.1 s - 10 Hz -------------------------------
+// AHRS provide: roll, pitch and yaw
+void imuCallback(void)
+{
+// imu.runAHRS(0.1); // ### FIX: BUG TICKER
+} // end of imuCallback
+
+
+// Called everytime a new character goes into the RX buffer --------------------
+void bluetoothRxCallback(void)
+{
+ bufferRxBluetooth[bufferCountRxBluetooth] = bluetooth.getc();
+ bufferCountRxBluetooth++;
+
+ if (bluetooth.readable() == 0) flagCmdBluetooth = true;
+} // end of bluetoothRxCallback
+
+
+// USER button interrupt callback ----------------------------------------------
+void userCallback(void)
+{
+ userCount++;
+} // end of userCallback
+
+
+// Parse the Bluetooth commands ------------------------------------------------
+// COMMAND | DESCRIPTION
+// -----------------------------------------------------------------------------
+// #PWM:float | Update pwm output. Ex: #PWM:0.5
+// #OUT:int | Update digital output. Ex: #OUT:1
+// #RGB:rgbcode | Update LED RGB color. Ex: #RGB:00AFEF
+// #AIN? | Return analog input
+// #DIN? | Return digital input
+// #BAT? | Return battery voltage
+// #IMU? | Return imu data (roll, pitch and yaw)
+// #ALL? | Return all values
+void parseCmdBluetooth(char* str)
+{
+ if (strncmp("#PWM:", str, 5) == 0)
+ {
+ pwm = strtof(str + 5, NULL);
+ }
+ else if (strncmp("#OUT:", str, 5) == 0)
+ {
+ out = atoi(str + 5);
+ }
+ else if (strncmp("#RGB:", str, 5) == 0)
+ {
+ ton.setLED(str + 5);
+ }
+ else if (strncmp("#AIN?", str, 5) == 0)
+ {
+ bluetooth.printf("#AIN:%0.2f\r\n", ain.read());
+ }
+ else if (strncmp("#DIN?", str, 5) == 0)
+ {
+ bluetooth.printf("#DIN:%d\r\n", in.read());
+ }
+ else if (strncmp("#BAT?", str, 5) == 0)
+ {
+ bluetooth.printf("#BAT:%0.2fV\r\n", ton.getBattery());
+ }
+ else if (strncmp("#IMU?", str, 5) == 0)
+ {
+ bluetooth.printf("pitch: %0.2f\r\nroll: %0.2f\r\nyaw: %0.2f\r\n",
+ imu.getPitch(), imu.getRoll(), imu.getYaw());
+ }
+ else if (strncmp("#ALL?", str, 5) == 0)
+ {
+ bluetooth.printf("#AIN:%0.2f\r\n#DIN:%d\r\n#BAT:%0.2fV\r\n",
+ ain.read(), in.read(), ton.getBattery());
+
+ bluetooth.printf("pitch: %0.2f\r\nroll: %0.2f\r\nyaw: %0.2f\r\n",
+ imu.getPitch(), imu.getRoll(), imu.getYaw());
+ }
+ else
+ {
+ bluetooth.printf("Invalid command!\r\n");
+ }
+} // end of parseCmdBluetooth function
+
+
+// Data format: #rgbcode,float,int | Ex: #00AFEF,0.5,1 ------------------------
+void parseCmdWifi(char* str)
+{
+ char* tmp = strstr(str, "#"); // Search the first character of the command
+
+ if (tmp != NULL)
+ {
+ tmp = strtok(tmp, ",\n");
+ ton.setLED(tmp + 1); // Remove the '#' and update LED RGB color
+
+ tmp = strtok(NULL,",\n");
+ pwm = strtof(tmp, NULL); // Convert to float and update pwm output
+
+ tmp = strtok(NULL,",\n");
+ out = atoi(tmp); // Convert to int and update digital output
+ }
+} // end of parseCmdWifi function
+
+
+// *****************************************************************************
+// MAIN PROGRAM ****************************************************************
+// *****************************************************************************
+int main(void)
+{
+ // Initializations
+ ton.setLED(RED);
+ ton.enableBluetooth();
+ ton.enableWifi();
+ ton.enableIMU(); // Leave standing the TON board at initialization (~5s)
+ ton.setLED(BLUE);
+
+ // Configure Tick Timer for IMU reads - interval (0.1 second)
+ imuTick.attach(&imuCallback, 0.1);
+
+ // Configure RX interrupt of Bluetooth
+ bluetooth.attach(&bluetoothRxCallback, Serial::RxIrq);
+
+ // Try to connect to the access point
+ if (wifi.connect(MY_SSID, MY_PASS) == true) ton.setLED(GREEN);
+ else ton.setLED(YELLOW);
+
+ // Configure USER button interrupt
+ button.rise(&userCallback);
+
+ // The main LOOP -----------------------------------------------------------
+ while (1)
+ {
+ // Prints messages to the USB ------------------------------------------
+ usb.printf("pitch: %0.3f\r\n", imu.getPitch());
+ usb.printf("roll: %0.3f\r\n", imu.getRoll());
+ usb.printf("yaw: %0.3f\r\n", imu.getYaw());
+ usb.printf("---\r\n");
+ usb.printf("battery: %0.3fV\r\n", ton.getBattery());
+ usb.printf("count: %d\r\n", userCount);
+ usb.printf("\r\n");
+
+ // Checks new Blutooth commands ----------------------------------------
+ if (flagCmdBluetooth == true)
+ {
+ // Parse the Bluetooth commands
+ parseCmdBluetooth(bufferRxBluetooth);
+
+ bufferCountRxBluetooth = 0;
+ memset(bufferRxBluetooth, 0, sizeof(bufferRxBluetooth));
+ flagCmdBluetooth = false;
+ } // end of check new Bluetooth commands
+
+ // Checks if wifi is connected and run wifi tasks ----------------------
+ if (wifi.isConnected() == true)
+ {
+ // Parse the http get method
+ replyHttp = wifi.httpGet("ioton.cc", "/ton-demo.txt");
+ parseCmdWifi(replyHttp);
+
+ // Send data via ThingSpeak (does not support high rates)
+ if (++countThingSpeak == 5)
+ {
+ char thingspeak[50];
+
+ sprintf(thingspeak, "field1=%0.3f&field2=%d&field3=%0.3f",
+ ain.read(), in.read(), ton.getBattery());
+
+ usb.printf("Send to ThingSpeak: %s\r\n", thingspeak);
+ wifi.sendThingSpeak(thingspeak, MY_API_KEY);
+
+ countThingSpeak = 0;
+ } // end of send to ThingSpeak
+ } // end of wifi tasks
+
+ wait(1);
+ } // end of main LOOP
+} // end of main function
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-ton.lib Thu Jun 29 20:37:24 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/IOTON-Technology/code/mbed-ton/#1dc8c8bdd03d