Simple example program - Read sensors from Mbed Application Board, build JSON style string from data, Send data via pre-configured Xbee, Receive data from duplicate program on another device, Display data received on LCD, Switch display mode from full string to split string using Joystick Down button.

Dependencies:   mbed C12832 LM75B MMA7660

Committer:
SteakNinja
Date:
Wed Nov 28 16:41:20 2018 +0000
Revision:
0:720912d4ddcb
A simple example program showing how to get data from sensors (Mbed Application Board), send/receive the data via pre-configured Xbee (Serial on Xbee footprint) using a JSON style message structure and switch mode of LCD display with Joystick Down.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SteakNinja 0:720912d4ddcb 1 #include "mbed.h"
SteakNinja 0:720912d4ddcb 2 #include "LM75B.h"
SteakNinja 0:720912d4ddcb 3 #include "MMA7660.h"
SteakNinja 0:720912d4ddcb 4 #include "C12832.h"
SteakNinja 0:720912d4ddcb 5
SteakNinja 0:720912d4ddcb 6 DigitalOut myled(LED1);
SteakNinja 0:720912d4ddcb 7 AnalogIn pot1(p19);
SteakNinja 0:720912d4ddcb 8 AnalogIn pot2(p20);
SteakNinja 0:720912d4ddcb 9 InterruptIn JoyDown(p12);
SteakNinja 0:720912d4ddcb 10 LM75B temp(p28, p27);
SteakNinja 0:720912d4ddcb 11 MMA7660 MMA(p28,p27);
SteakNinja 0:720912d4ddcb 12 C12832 lcd(p5,p7,p6,p8,p11);
SteakNinja 0:720912d4ddcb 13 Serial xbee(p9,p10);
SteakNinja 0:720912d4ddcb 14 Serial pc(USBTX, USBRX);
SteakNinja 0:720912d4ddcb 15 char Buffer[70];
SteakNinja 0:720912d4ddcb 16 bool isSplitMode = false;
SteakNinja 0:720912d4ddcb 17 char allDelimiters[] = "{}\":,";
SteakNinja 0:720912d4ddcb 18 char* strArray[100];
SteakNinja 0:720912d4ddcb 19
SteakNinja 0:720912d4ddcb 20 //Split string using preset characters
SteakNinja 0:720912d4ddcb 21 void delimitJson()
SteakNinja 0:720912d4ddcb 22 {
SteakNinja 0:720912d4ddcb 23 char* pch = strtok(Buffer, allDelimiters);
SteakNinja 0:720912d4ddcb 24 int i = 0;
SteakNinja 0:720912d4ddcb 25 while (pch != NULL) {
SteakNinja 0:720912d4ddcb 26 strArray[i] = pch;
SteakNinja 0:720912d4ddcb 27 pch = strtok (NULL, allDelimiters);
SteakNinja 0:720912d4ddcb 28 i++;
SteakNinja 0:720912d4ddcb 29 }
SteakNinja 0:720912d4ddcb 30 pch = NULL;
SteakNinja 0:720912d4ddcb 31 }
SteakNinja 0:720912d4ddcb 32
SteakNinja 0:720912d4ddcb 33 void switchMode()
SteakNinja 0:720912d4ddcb 34 {
SteakNinja 0:720912d4ddcb 35 //Switch between split display and JSON display mode
SteakNinja 0:720912d4ddcb 36 isSplitMode = !isSplitMode;
SteakNinja 0:720912d4ddcb 37 }
SteakNinja 0:720912d4ddcb 38
SteakNinja 0:720912d4ddcb 39 void RxData()
SteakNinja 0:720912d4ddcb 40 {
SteakNinja 0:720912d4ddcb 41 //Check if data is received
SteakNinja 0:720912d4ddcb 42 if (xbee.readable()) {
SteakNinja 0:720912d4ddcb 43 //Put new serial data into Buffer until a '\n' (New Line) character is detected
SteakNinja 0:720912d4ddcb 44 xbee.scanf("%67s",Buffer);
SteakNinja 0:720912d4ddcb 45 }
SteakNinja 0:720912d4ddcb 46 if (isSplitMode)
SteakNinja 0:720912d4ddcb 47 {
SteakNinja 0:720912d4ddcb 48 //Split the string into a Char Array called strArray
SteakNinja 0:720912d4ddcb 49 delimitJson();
SteakNinja 0:720912d4ddcb 50 //Draw first two entries in the array (Temp: value)
SteakNinja 0:720912d4ddcb 51 lcd.cls();
SteakNinja 0:720912d4ddcb 52 lcd.locate(0,0);
SteakNinja 0:720912d4ddcb 53 lcd.printf("%s:",strArray[0]);
SteakNinja 0:720912d4ddcb 54 lcd.locate(25,0);
SteakNinja 0:720912d4ddcb 55 lcd.printf(strArray[1]);
SteakNinja 0:720912d4ddcb 56 //Draw next two entries in the array (X: value)
SteakNinja 0:720912d4ddcb 57 lcd.locate(0,10);
SteakNinja 0:720912d4ddcb 58 lcd.printf("%s:",strArray[2]);
SteakNinja 0:720912d4ddcb 59 lcd.locate(25,10);
SteakNinja 0:720912d4ddcb 60 lcd.printf(strArray[3]);
SteakNinja 0:720912d4ddcb 61 //Draw next two entries in the array (Y: value)
SteakNinja 0:720912d4ddcb 62 lcd.locate(0,20);
SteakNinja 0:720912d4ddcb 63 lcd.printf("%s:",strArray[4]);
SteakNinja 0:720912d4ddcb 64 lcd.locate(25,20);
SteakNinja 0:720912d4ddcb 65 lcd.printf(strArray[5]);
SteakNinja 0:720912d4ddcb 66 //Draw next two entries in the array (Z: value)
SteakNinja 0:720912d4ddcb 67 lcd.locate(60,0);
SteakNinja 0:720912d4ddcb 68 lcd.printf("%s:",strArray[6]);
SteakNinja 0:720912d4ddcb 69 lcd.locate(85,0);
SteakNinja 0:720912d4ddcb 70 lcd.printf(strArray[7]);
SteakNinja 0:720912d4ddcb 71 //Draw next two entries in the array (Pot1: value)
SteakNinja 0:720912d4ddcb 72 lcd.locate(60,10);
SteakNinja 0:720912d4ddcb 73 lcd.printf("%s:",strArray[8]);
SteakNinja 0:720912d4ddcb 74 lcd.locate(85,10);
SteakNinja 0:720912d4ddcb 75 lcd.printf(strArray[9]);
SteakNinja 0:720912d4ddcb 76 //Draw last two entries in the array (Pot2: value)
SteakNinja 0:720912d4ddcb 77 lcd.locate(60,20);
SteakNinja 0:720912d4ddcb 78 lcd.printf("%s:",strArray[10]);
SteakNinja 0:720912d4ddcb 79 lcd.locate(85,20);
SteakNinja 0:720912d4ddcb 80 lcd.printf(strArray[11]);
SteakNinja 0:720912d4ddcb 81 } else {
SteakNinja 0:720912d4ddcb 82 lcd.cls();
SteakNinja 0:720912d4ddcb 83 lcd.locate(0,0);
SteakNinja 0:720912d4ddcb 84 lcd.printf(Buffer);
SteakNinja 0:720912d4ddcb 85 }
SteakNinja 0:720912d4ddcb 86 }
SteakNinja 0:720912d4ddcb 87
SteakNinja 0:720912d4ddcb 88 int main()
SteakNinja 0:720912d4ddcb 89 {
SteakNinja 0:720912d4ddcb 90 //Attach receive interrupt to xbee serial pins
SteakNinja 0:720912d4ddcb 91 xbee.attach(&RxData, Serial::RxIrq);
SteakNinja 0:720912d4ddcb 92 //Attach button interrupt to the switchMode method
SteakNinja 0:720912d4ddcb 93 JoyDown.rise(&switchMode);
SteakNinja 0:720912d4ddcb 94 //Initialise LM75B temperature sensor
SteakNinja 0:720912d4ddcb 95 if (temp.open()) {
SteakNinja 0:720912d4ddcb 96 pc.printf("\r\nLM75B Operational\r\n");
SteakNinja 0:720912d4ddcb 97 }
SteakNinja 0:720912d4ddcb 98
SteakNinja 0:720912d4ddcb 99 while(1) {
SteakNinja 0:720912d4ddcb 100 //Flash LED so we know program is running
SteakNinja 0:720912d4ddcb 101 myled = 1;
SteakNinja 0:720912d4ddcb 102 wait(0.2);
SteakNinja 0:720912d4ddcb 103 myled = 0;
SteakNinja 0:720912d4ddcb 104 wait(0.2);
SteakNinja 0:720912d4ddcb 105 //Send current data from sensors to Xbee
SteakNinja 0:720912d4ddcb 106 xbee.printf("{Temp:%.3f,X:%.4f,Y:%.4f,Z:%.4f,Pot1:%.3f,Pot2:%.3f}\n", temp.temp(), MMA.x(), MMA.y(), MMA.z(), pot1.read(), pot2.read());
SteakNinja 0:720912d4ddcb 107 }
SteakNinja 0:720912d4ddcb 108 }