SensorStream demo program that uses the 4 LEDs to indicate the accelerometer status

Dependencies:   C12832_lcd EthernetInterface SensorDataParser mbed-rtos mbed USBDevice

Fork of SensorStream_BlinkyDemo by Demo Team

Committer:
screamer
Date:
Mon Oct 28 19:22:27 2013 +0000
Revision:
3:7321fccc3d91
Parent:
2:8d1e7078c230
Add HID Mouse

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan 0:a3d60f53f22f 1 #include "mbed.h"
dan 0:a3d60f53f22f 2 #include "EthernetInterface.h"
dan 0:a3d60f53f22f 3 #include "C12832_lcd.h"
dan 0:a3d60f53f22f 4 #include "SensorDataParser.h"
dan 0:a3d60f53f22f 5 #include <math.h>
screamer 3:7321fccc3d91 6 #include "USBMouse.h"
screamer 3:7321fccc3d91 7
screamer 3:7321fccc3d91 8 USBMouse mouse;
dan 0:a3d60f53f22f 9 static EthernetInterface eth;
dan 0:a3d60f53f22f 10 static C12832_LCD lcd;
dan 0:a3d60f53f22f 11 static Serial pc(USBTX, USBRX);
dan 0:a3d60f53f22f 12
dan 0:a3d60f53f22f 13 DigitalOut led_left(LED1);
dan 0:a3d60f53f22f 14 DigitalOut led_up(LED2);
dan 2:8d1e7078c230 15 DigitalOut led_right(LED3);
dan 2:8d1e7078c230 16 DigitalOut led_down(LED4);
dan 0:a3d60f53f22f 17
dan 0:a3d60f53f22f 18 // Configuration
dan 0:a3d60f53f22f 19 #define SERVER_PORT 5555
dan 0:a3d60f53f22f 20 #define MAX_BUF_SIZE 512
dan 0:a3d60f53f22f 21 #define SENSE_DELTA 0.1
dan 0:a3d60f53f22f 22
dan 0:a3d60f53f22f 23 static void ethernet_init() {
dan 0:a3d60f53f22f 24 eth.init();
dan 0:a3d60f53f22f 25 if(eth.connect(30000) == 0)
dan 0:a3d60f53f22f 26 pc.printf("Connect OK\n\r");
dan 0:a3d60f53f22f 27
dan 0:a3d60f53f22f 28 lcd.locate(0,0);
dan 0:a3d60f53f22f 29 lcd.printf("IP:%s", eth.getIPAddress());
dan 0:a3d60f53f22f 30
dan 0:a3d60f53f22f 31 pc.printf("IP Address: %s\n\r", eth.getIPAddress());
dan 0:a3d60f53f22f 32 }
dan 0:a3d60f53f22f 33
dan 0:a3d60f53f22f 34 static void main_loop() {
dan 0:a3d60f53f22f 35 UDPSocket server;
dan 0:a3d60f53f22f 36 Endpoint client;
dan 0:a3d60f53f22f 37 char buffer[MAX_BUF_SIZE];
dan 0:a3d60f53f22f 38 SENSOR_DATA pd;
dan 0:a3d60f53f22f 39
dan 0:a3d60f53f22f 40 server.bind(SERVER_PORT);
dan 0:a3d60f53f22f 41 while (true) {
dan 1:50e52569be43 42 // receive udp packet
dan 0:a3d60f53f22f 43 int n = server.receiveFrom(client, buffer, sizeof(buffer) - 1);
dan 1:50e52569be43 44 if (n == sizeof(buffer) - 1) continue;
dan 1:50e52569be43 45
dan 0:a3d60f53f22f 46 buffer[n] = 0;
dan 0:a3d60f53f22f 47
dan 1:50e52569be43 48 // parse the packet
dan 0:a3d60f53f22f 49 if (parse_sensor_packet(buffer, &pd) == 0) continue;
dan 0:a3d60f53f22f 50
dan 1:50e52569be43 51 // accelerometer x axis
dan 0:a3d60f53f22f 52 if (pd.ax > 0) {
dan 0:a3d60f53f22f 53 led_left = 0;
dan 0:a3d60f53f22f 54 led_right = fabs(pd.ax) * 2;
dan 0:a3d60f53f22f 55 } else {
dan 0:a3d60f53f22f 56 led_left = fabs(pd.ax) * 2;
dan 0:a3d60f53f22f 57 led_right = 0;
dan 0:a3d60f53f22f 58 }
dan 0:a3d60f53f22f 59
dan 1:50e52569be43 60 // accelerometer y axis
dan 0:a3d60f53f22f 61 if (pd.ay > 0) {
dan 0:a3d60f53f22f 62 led_up = 0;
dan 0:a3d60f53f22f 63 led_down = fabs(pd.ay) * 2;
dan 0:a3d60f53f22f 64 } else {
dan 0:a3d60f53f22f 65 led_up = fabs(pd.ay) * 2;
dan 0:a3d60f53f22f 66 led_down = 0;
dan 0:a3d60f53f22f 67 }
screamer 3:7321fccc3d91 68
screamer 3:7321fccc3d91 69 mouse.move(pd.ax*20, pd.ay*30);
dan 0:a3d60f53f22f 70 }
dan 0:a3d60f53f22f 71 }
dan 0:a3d60f53f22f 72
dan 0:a3d60f53f22f 73 int main() {
dan 0:a3d60f53f22f 74 lcd.cls();
dan 0:a3d60f53f22f 75 ethernet_init();
dan 0:a3d60f53f22f 76 main_loop();
dan 0:a3d60f53f22f 77 }