POTATO
Dependencies: Hexi_KW40Z Hexi_OLED_SSD1351
main.cpp
- Committer:
- natasha41575
- Date:
- 2019-05-06
- Revision:
- 8:de0336411ac1
- Parent:
- 7:3afe21b24e58
- Child:
- 9:fe52fbcc6187
File content as of revision 8:de0336411ac1:
#include "mbed.h" #include "Hexi_KW40Z.h" #include "Hexi_OLED_SSD1351.h" #include "OLED_types.h" #include "OpenSans_Font.h" #include "string.h" #define LED_ON 0 #define LED_OFF 1 void UpdateSensorData(void); void StartHaptic(void); void StopHaptic(void const *n); void txTask(void); static Serial pc(USBTX, USBRX); DigitalOut redLed(LED1,1); DigitalOut greenLed(LED2,1); DigitalOut blueLed(LED3,1); DigitalOut haptic(PTB9); /* Define timer for haptic feedback */ RtosTimer hapticTimer(StopHaptic, osTimerOnce); /* Instantiate the Hexi KW40Z Driver (UART TX, UART RX) */ KW40Z kw40z_device(PTE24, PTE25); /* Instantiate the SSD1351 OLED Driver */ SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); /* (MOSI,SCLK,POWER,CS,RST,DC) */ /*Create a Thread to handle sending BLE Sensor Data */ Thread txThread; /* Text Buffer */ char text[20]; uint8_t battery = 100; uint8_t light = 0; uint16_t humidity = 4500; uint16_t temperature = 2000; uint16_t pressure = 9000; uint16_t x = 0; uint16_t y = 5000; uint16_t z = 10000; char seconds = 0; DigitalOut output(PTA10); /****************************Call Back Functions*******************************/ void ButtonRight(void) { pc.printf("Right\r\n"); StartHaptic(); kw40z_device.ToggleAdvertisementMode(); uint8_t buf[6] = "Right"; kw40z_device.SendMessage(buf, 5); kw40z_device.ToggleAdvertisementMode(); kw40z_device.SendMessage(buf, 5); } void ButtonLeft(void) { pc.printf("Left\r\n"); StartHaptic(); kw40z_device.ToggleAdvertisementMode(); uint8_t buf[6] = "Left"; kw40z_device.SendMessage(buf, 5); kw40z_device.ToggleAdvertisementMode(); kw40z_device.SendMessage(buf, 5); } void PassKey(void) { pc.printf("passkey\n"); //StartHaptic(); strcpy((char *) text,"PAIR CODE"); oled.TextBox((uint8_t *)text,0,25,95,18); /* Display Bond Pass Key in a 95px by 18px textbox at x=0,y=40 */ sprintf(text,"%d", kw40z_device.GetPassKey()); oled.TextBox((uint8_t *)text,0,40,95,18); } // Key modification: use the alert functionality enabled by the host-ble interface // to define our own command. void alertReceived(uint8_t *data, uint8_t length) { StartHaptic(); data[length] = 0; printf("%s\n\r", data); oled.TextBox((uint8_t *)data,0,40,95,18); seconds = data[7]; if ((seconds - '0')%2 == 0) { output.write(0); } else { output.write(1); } // data (our command) must 20 bytes long. // CMD for turning on: 'ledonledonledonledon' // if (data[4] == 'n') { // greenLed = LED_ON; // redLed = LED_ON; // blueLed = LED_ON; // pc.printf("on\n\r", data); // // //CMD for turning off: 'ledoffledoffledoffled' // } else if (data[4] == 'f') { // greenLed = LED_OFF; // redLed = LED_OFF; // blueLed = LED_OFF; // pc.printf("off\n\r", data); // } } /***********************End of Call Back Functions*****************************/ /********************************Main******************************************/ int main() { pc.baud(9600); pc.printf("hello\n\r"); /* Register callbacks to application functions */ kw40z_device.attach_buttonLeft(&ButtonLeft); kw40z_device.attach_buttonRight(&ButtonRight); kw40z_device.attach_passkey(&PassKey); kw40z_device.attach_alert(&alertReceived); memset(text, 0, sizeof(char)*20); /* Turn on the backlight of the OLED Display */ oled.DimScreenON(); /* Fills the screen with solid black */ oled.FillScreen(COLOR_BLACK); /* Get OLED Class Default Text Properties */ oled_text_properties_t textProperties = {0}; oled.GetTextProperties(&textProperties); /* Change font color to Blue */ textProperties.fontColor = COLOR_BLUE; oled.SetTextProperties(&textProperties); /* Display Bluetooth Label at x=17,y=65 */ strcpy((char *) text,"BLUETOOTH"); oled.Label((uint8_t *)text,17,65); /* Change font color to white */ textProperties.fontColor = COLOR_WHITE; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); /* Display Label at x=22,y=80 */ strcpy((char *) text,"Tap Below"); oled.Label((uint8_t *)text,22,80); uint8_t prevLinkState = 0; uint8_t currLinkState = 0; txThread.start(txTask); /*Start transmitting Sensor Tag Data */ int i = 0; while (true) { if (i % 20 == 0) // strcpy((char *) text,"potato"); // text[0] = 'a' + (i%26); // oled.Label((uint8_t *)text,17,65); pc.printf("still here, %d\n\r", i); // } i = (i + 1); // blueLed = !kw40z_device.GetAdvertisementMode(); /*Indicate BLE Advertisment Mode*/ Thread::wait(50); } } /******************************End of Main*************************************/ /* txTask() transmits the sensor data */ void txTask(void) { while (true) { UpdateSensorData(); /*Notify Hexiwear App that it is running Sensor Tag mode*/ kw40z_device.SendSetApplicationMode(GUI_CURRENT_APP_SENSOR_TAG); /*The following is sending dummy data over BLE. Replace with real data*/ /*Send Battery Level for 20% */ kw40z_device.SendBatteryLevel(battery); /*Send Ambient Light Level at 50% */ kw40z_device.SendAmbientLight(light); /*Send Humidity at 90% */ kw40z_device.SendHumidity(humidity); /*Send Temperature at 25 degrees Celsius */ kw40z_device.SendTemperature(temperature); /*Send Pressure at 100kPA */ kw40z_device.SendPressure(pressure); /*Send Mag,Accel,Gyro Data. */ kw40z_device.SendGyro(x,y,z); kw40z_device.SendAccel(z,x,y); kw40z_device.SendMag(y,z,x); uint8_t buf[6] = "Hello"; kw40z_device.SendMessage(buf, 5); Thread::wait(1000); } } void UpdateSensorData(void) { battery -= 5; if(battery < 5) battery = 100; light += 20; if(light > 100) light = 0; humidity += 500; if(humidity > 8000) humidity = 2000; temperature -= 200; if(temperature < 200) temperature = 4200; pressure += 300; if(pressure > 10300) pressure = 7500; x += 1400; y -= 2300; z += 1700; } void StartHaptic(void) { hapticTimer.start(50); haptic = 1; } void StopHaptic(void const *n) { haptic = 0; hapticTimer.stop(); }