Bathroom scale

Dependencies:   Hexi_KW40Z Hexi_OLED_SSD1351 MPL3115A2

Committer:
eddienuel
Date:
Sun Oct 09 18:46:24 2016 +0000
Revision:
1:93fbe55738f4
Parent:
0:bd3942174be3
release live

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eddienuel 0:bd3942174be3 1 #include "mbed.h"
eddienuel 0:bd3942174be3 2 #include "Hexi_KW40Z.h"
eddienuel 0:bd3942174be3 3 #include "Hexi_OLED_SSD1351.h"
eddienuel 0:bd3942174be3 4 #include "OLED_types.h"
eddienuel 0:bd3942174be3 5 #include "OpenSans_Font.h"
eddienuel 0:bd3942174be3 6 #include "string.h"
eddienuel 0:bd3942174be3 7
eddienuel 0:bd3942174be3 8 #define LED_ON 0
eddienuel 0:bd3942174be3 9 #define LED_OFF 1
eddienuel 0:bd3942174be3 10
eddienuel 0:bd3942174be3 11
eddienuel 0:bd3942174be3 12 void StartHaptic(void);
eddienuel 0:bd3942174be3 13 void StopHaptic(void const *n);
eddienuel 0:bd3942174be3 14 void txTask(void);
eddienuel 0:bd3942174be3 15 long ReadWeight(void);
eddienuel 0:bd3942174be3 16 uint16_t getGram();
eddienuel 0:bd3942174be3 17 long offset = 0;
eddienuel 0:bd3942174be3 18 long getAverageValue(int times);
eddienuel 0:bd3942174be3 19
eddienuel 0:bd3942174be3 20 // Pin connections for Hexiwear
eddienuel 0:bd3942174be3 21 //MPL3115A2 MPL3115A2( PTC11, PTC10, MPL3115A2_I2C_ADDRESS);
eddienuel 0:bd3942174be3 22 /* pos [0] = altimeter or pressure value */
eddienuel 0:bd3942174be3 23 /* pos [1] = temperature value */
eddienuel 0:bd3942174be3 24 float sensor_data[2];
eddienuel 0:bd3942174be3 25
eddienuel 0:bd3942174be3 26 DigitalOut redLed(LED1,1);
eddienuel 0:bd3942174be3 27 DigitalOut greenLed(LED2,1);
eddienuel 0:bd3942174be3 28 DigitalOut blueLed(LED3,1);
eddienuel 0:bd3942174be3 29 DigitalOut haptic(PTB9);
eddienuel 0:bd3942174be3 30
eddienuel 0:bd3942174be3 31 DigitalIn HX_DOUT(PTC3);
eddienuel 0:bd3942174be3 32 DigitalOut HX_PD_SCK(PTC5);
eddienuel 0:bd3942174be3 33
eddienuel 0:bd3942174be3 34 /* Define timer for haptic feedback */
eddienuel 0:bd3942174be3 35 RtosTimer hapticTimer(StopHaptic, osTimerOnce);
eddienuel 0:bd3942174be3 36
eddienuel 0:bd3942174be3 37 /* Instantiate the Hexi KW40Z Driver (UART TX, UART RX) */
eddienuel 0:bd3942174be3 38 KW40Z kw40z_device(PTE24, PTE25);
eddienuel 0:bd3942174be3 39
eddienuel 0:bd3942174be3 40 /* Instantiate the SSD1351 OLED Driver */
eddienuel 0:bd3942174be3 41 SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); /* (MOSI,SCLK,POWER,CS,RST,DC) */
eddienuel 0:bd3942174be3 42
eddienuel 0:bd3942174be3 43 /*Create a Thread to handle sending BLE Sensor Data */
eddienuel 0:bd3942174be3 44 Thread txThread;
eddienuel 0:bd3942174be3 45
eddienuel 0:bd3942174be3 46 /* Text Buffer */
eddienuel 0:bd3942174be3 47 char text[20];
eddienuel 0:bd3942174be3 48
eddienuel 0:bd3942174be3 49 /****************************Call Back Functions*******************************/
eddienuel 0:bd3942174be3 50 void ButtonRight(void)
eddienuel 0:bd3942174be3 51 {
eddienuel 0:bd3942174be3 52 StartHaptic();
eddienuel 0:bd3942174be3 53 kw40z_device.ToggleAdvertisementMode();
eddienuel 0:bd3942174be3 54 }
eddienuel 0:bd3942174be3 55
eddienuel 0:bd3942174be3 56 void ButtonLeft(void)
eddienuel 0:bd3942174be3 57 {
eddienuel 0:bd3942174be3 58 StartHaptic();
eddienuel 0:bd3942174be3 59 kw40z_device.ToggleAdvertisementMode();
eddienuel 0:bd3942174be3 60 }
eddienuel 0:bd3942174be3 61
eddienuel 0:bd3942174be3 62 void PassKey(void)
eddienuel 0:bd3942174be3 63 {
eddienuel 0:bd3942174be3 64 StartHaptic();
eddienuel 0:bd3942174be3 65 strcpy((char *) text,"PAIR CODE");
eddienuel 0:bd3942174be3 66 oled.TextBox((uint8_t *)text,0,25,95,18);
eddienuel 0:bd3942174be3 67
eddienuel 0:bd3942174be3 68 /* Display Bond Pass Key in a 95px by 18px textbox at x=0,y=40 */
eddienuel 0:bd3942174be3 69 sprintf(text,"%d", kw40z_device.GetPassKey());
eddienuel 0:bd3942174be3 70 oled.TextBox((uint8_t *)text,0,40,95,18);
eddienuel 0:bd3942174be3 71 }
eddienuel 0:bd3942174be3 72
eddienuel 0:bd3942174be3 73 /***********************End of Call Back Functions*****************************/
eddienuel 0:bd3942174be3 74
eddienuel 0:bd3942174be3 75 /********************************Main******************************************/
eddienuel 0:bd3942174be3 76
eddienuel 0:bd3942174be3 77 int main()
eddienuel 0:bd3942174be3 78 {
eddienuel 1:93fbe55738f4 79 Thread::wait(10000);
eddienuel 0:bd3942174be3 80 offset = getAverageValue(20);
eddienuel 0:bd3942174be3 81 /* Get OLED Class Default Text Properties */
eddienuel 0:bd3942174be3 82 oled_text_properties_t textProperties = {0};
eddienuel 0:bd3942174be3 83 oled.GetTextProperties(&textProperties);
eddienuel 0:bd3942174be3 84
eddienuel 0:bd3942174be3 85 /* Turn on the backlight of the OLED Display */
eddienuel 0:bd3942174be3 86 oled.DimScreenON();
eddienuel 0:bd3942174be3 87
eddienuel 0:bd3942174be3 88 /* Fills the screen with solid black */
eddienuel 0:bd3942174be3 89 oled.FillScreen(COLOR_BLACK);
eddienuel 0:bd3942174be3 90
eddienuel 0:bd3942174be3 91 /* Register callbacks to application functions */
eddienuel 0:bd3942174be3 92 kw40z_device.attach_buttonLeft(&ButtonLeft);
eddienuel 0:bd3942174be3 93 kw40z_device.attach_buttonRight(&ButtonRight);
eddienuel 0:bd3942174be3 94 kw40z_device.attach_passkey(&PassKey);
eddienuel 0:bd3942174be3 95
eddienuel 0:bd3942174be3 96 /* Change font color to white */
eddienuel 0:bd3942174be3 97 textProperties.fontColor = COLOR_WHITE;
eddienuel 0:bd3942174be3 98 oled.SetTextProperties(&textProperties);
eddienuel 0:bd3942174be3 99
eddienuel 0:bd3942174be3 100 /* Display Bluetooth Label at x=17,y=30 */
eddienuel 0:bd3942174be3 101 strcpy((char *) text,"89.9kg");
eddienuel 0:bd3942174be3 102 oled.Label((uint8_t *)text,17,30);
eddienuel 0:bd3942174be3 103
eddienuel 0:bd3942174be3 104
eddienuel 0:bd3942174be3 105 /* Change font color to Blue */
eddienuel 0:bd3942174be3 106 textProperties.fontColor = COLOR_BLUE;
eddienuel 0:bd3942174be3 107 oled.SetTextProperties(&textProperties);
eddienuel 0:bd3942174be3 108
eddienuel 0:bd3942174be3 109 /* Display Bluetooth Label at x=17,y=65 */
eddienuel 0:bd3942174be3 110 strcpy((char *) text,"BLUETOOTH");
eddienuel 0:bd3942174be3 111 oled.Label((uint8_t *)text,17,65);
eddienuel 0:bd3942174be3 112
eddienuel 0:bd3942174be3 113 /* Change font color to white */
eddienuel 0:bd3942174be3 114 textProperties.fontColor = COLOR_WHITE;
eddienuel 0:bd3942174be3 115 textProperties.alignParam = OLED_TEXT_ALIGN_CENTER;
eddienuel 0:bd3942174be3 116 oled.SetTextProperties(&textProperties);
eddienuel 0:bd3942174be3 117
eddienuel 0:bd3942174be3 118 /* Display Label at x=22,y=80 */
eddienuel 0:bd3942174be3 119 strcpy((char *) text,"Tap Below");
eddienuel 0:bd3942174be3 120 oled.Label((uint8_t *)text,22,80);
eddienuel 0:bd3942174be3 121
eddienuel 0:bd3942174be3 122 uint8_t prevLinkState = 0;
eddienuel 0:bd3942174be3 123 uint8_t currLinkState = 0;
eddienuel 0:bd3942174be3 124 txThread.start(txTask); /*Start transmitting Sensor Tag Data */
eddienuel 0:bd3942174be3 125
eddienuel 0:bd3942174be3 126 while (true)
eddienuel 0:bd3942174be3 127 {
eddienuel 0:bd3942174be3 128 blueLed = !kw40z_device.GetAdvertisementMode(); /*Indicate BLE Advertisment Mode*/
eddienuel 0:bd3942174be3 129 Thread::wait(50);
eddienuel 0:bd3942174be3 130 }
eddienuel 0:bd3942174be3 131 }
eddienuel 0:bd3942174be3 132
eddienuel 0:bd3942174be3 133 /******************************End of Main*************************************/
eddienuel 0:bd3942174be3 134
eddienuel 0:bd3942174be3 135
eddienuel 0:bd3942174be3 136 /* txTask() transmits the sensor data */
eddienuel 0:bd3942174be3 137 void txTask(void){
eddienuel 0:bd3942174be3 138
eddienuel 0:bd3942174be3 139 while (true)
eddienuel 0:bd3942174be3 140 {
eddienuel 1:93fbe55738f4 141 /* sets the gain of hx711 to 128*/
eddienuel 0:bd3942174be3 142 ReadWeight();
eddienuel 0:bd3942174be3 143
eddienuel 0:bd3942174be3 144 /*Notify Hexiwear App that it is running Sensor Tag mode*/
eddienuel 0:bd3942174be3 145 kw40z_device.SendSetApplicationMode(GUI_CURRENT_APP_SENSOR_TAG);
eddienuel 0:bd3942174be3 146
eddienuel 0:bd3942174be3 147 /*Send weight using pressure service*/
eddienuel 0:bd3942174be3 148 kw40z_device.SendPressure(getGram());
eddienuel 0:bd3942174be3 149 Thread::wait(1000);
eddienuel 0:bd3942174be3 150 }
eddienuel 0:bd3942174be3 151 }
eddienuel 0:bd3942174be3 152
eddienuel 0:bd3942174be3 153 void StartHaptic(void) {
eddienuel 0:bd3942174be3 154 hapticTimer.start(50);
eddienuel 0:bd3942174be3 155 haptic = 1;
eddienuel 0:bd3942174be3 156 }
eddienuel 0:bd3942174be3 157
eddienuel 0:bd3942174be3 158 void StopHaptic(void const *n) {
eddienuel 0:bd3942174be3 159 haptic = 0;
eddienuel 0:bd3942174be3 160 hapticTimer.stop();
eddienuel 0:bd3942174be3 161 }
eddienuel 0:bd3942174be3 162
eddienuel 0:bd3942174be3 163 long ReadWeight(void)
eddienuel 0:bd3942174be3 164 {
eddienuel 0:bd3942174be3 165 long Count;
eddienuel 0:bd3942174be3 166 unsigned char i;
eddienuel 0:bd3942174be3 167 HX_PD_SCK.write(0);
eddienuel 0:bd3942174be3 168 Count = 0;
eddienuel 0:bd3942174be3 169 while(HX_DOUT.read() == 1);
eddienuel 0:bd3942174be3 170 for (i=0;i<24;i++)
eddienuel 0:bd3942174be3 171 {
eddienuel 0:bd3942174be3 172 HX_PD_SCK.write(1);
eddienuel 0:bd3942174be3 173 Count=Count<<1;
eddienuel 0:bd3942174be3 174 HX_PD_SCK.write(0);
eddienuel 0:bd3942174be3 175 if(HX_DOUT.read() == 1) Count++;
eddienuel 0:bd3942174be3 176 }
eddienuel 0:bd3942174be3 177 HX_PD_SCK.write(1);
eddienuel 0:bd3942174be3 178 Count=Count^0x800000;
eddienuel 0:bd3942174be3 179 HX_PD_SCK.write(0);
eddienuel 0:bd3942174be3 180 return(Count);
eddienuel 0:bd3942174be3 181 }
eddienuel 0:bd3942174be3 182
eddienuel 0:bd3942174be3 183 uint16_t getGram(){
eddienuel 0:bd3942174be3 184 return ((getAverageValue(20) - offset))/1000;
eddienuel 0:bd3942174be3 185 }
eddienuel 0:bd3942174be3 186
eddienuel 0:bd3942174be3 187 long getAverageValue(int times){
eddienuel 0:bd3942174be3 188 long sum = 0;
eddienuel 0:bd3942174be3 189 for (int i = 1; i <= times; i++)
eddienuel 0:bd3942174be3 190 {
eddienuel 0:bd3942174be3 191 sum += ReadWeight();
eddienuel 0:bd3942174be3 192 }
eddienuel 0:bd3942174be3 193 return sum / times;
eddienuel 0:bd3942174be3 194 }
eddienuel 0:bd3942174be3 195
eddienuel 0:bd3942174be3 196
eddienuel 0:bd3942174be3 197
eddienuel 0:bd3942174be3 198
eddienuel 0:bd3942174be3 199