pH works but not temp

Dependencies:   BLE_nRF8001 DebounceIn mbed mbed_BLEtry2

Fork of mbed_BLEtry2 by SmartD

Committer:
sitakumar
Date:
Fri Apr 10 02:43:51 2015 +0000
Revision:
3:4ee7b58c5e8e
Parent:
2:f4cedbb71ef9
4/9/2015

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sitakumar 0:11e1f075d0d2 1 #include "mbed.h"
sitakumar 0:11e1f075d0d2 2 #include "BLEPeripheral.h"
sitakumar 0:11e1f075d0d2 3
sitakumar 0:11e1f075d0d2 4 //serial connection via USB
sitakumar 0:11e1f075d0d2 5 Serial serial(USBTX, USBRX);
sitakumar 0:11e1f075d0d2 6
sitakumar 0:11e1f075d0d2 7 //Declare Input and Output pins
sitakumar 0:11e1f075d0d2 8 DigitalIn pb(D3);
sitakumar 0:11e1f075d0d2 9 AnalogIn pH_sensor(A0);
sitakumar 0:11e1f075d0d2 10 InterruptIn button(D2);
sitakumar 0:11e1f075d0d2 11 DigitalOut led(LED_RED);
sitakumar 0:11e1f075d0d2 12
sitakumar 0:11e1f075d0d2 13 // The SPI construct, REQN and RDYN IO construct should be modified manually
sitakumar 0:11e1f075d0d2 14 // It depend on the board you are using and the REQN&RDYN configuration on BLE Shield
sitakumar 0:11e1f075d0d2 15 SPI spi(PTD2, PTD3, PTD1);
sitakumar 0:11e1f075d0d2 16 DigitalInOut BLE_RDY(PTD5);
sitakumar 0:11e1f075d0d2 17 DigitalInOut BLE_REQ(PTD0);
sitakumar 0:11e1f075d0d2 18 DigitalInOut BLE_RESET(PTA13);
sitakumar 0:11e1f075d0d2 19
sitakumar 0:11e1f075d0d2 20 //for BLE
sitakumar 0:11e1f075d0d2 21 int count = 0;
sitakumar 2:f4cedbb71ef9 22 unsigned char tempbuf[16] = {0};
sitakumar 2:f4cedbb71ef9 23 unsigned char templen = 0;
sitakumar 2:f4cedbb71ef9 24 unsigned char decbuf[16] = {0};
sitakumar 2:f4cedbb71ef9 25 unsigned char declen = 0;
sitakumar 2:f4cedbb71ef9 26 unsigned char pHbuf[16] = {0};
sitakumar 2:f4cedbb71ef9 27 unsigned char pHlen = 0;
sitakumar 0:11e1f075d0d2 28
sitakumar 0:11e1f075d0d2 29 /*----- BLE Utility -------------------------------------------------------------------------*/
sitakumar 0:11e1f075d0d2 30 // create peripheral instance, see pinouts above
sitakumar 0:11e1f075d0d2 31 BLEPeripheral blePeripheral = BLEPeripheral(&BLE_REQ, &BLE_RDY, NULL);
sitakumar 0:11e1f075d0d2 32
sitakumar 0:11e1f075d0d2 33 // create service
sitakumar 0:11e1f075d0d2 34 BLEService uartService = BLEService("713d0000503e4c75ba943148f18d941e");
sitakumar 0:11e1f075d0d2 35
sitakumar 0:11e1f075d0d2 36 // create characteristic
sitakumar 2:f4cedbb71ef9 37 BLECharacteristic txCharacteristic = BLECharacteristic("713d0002503e4c75ba943148f18d941e", BLENotify, 30, 0);
sitakumar 2:f4cedbb71ef9 38 BLECharacteristic rxCharacteristic = BLECharacteristic("713d0003503e4c75ba943148f18d941e", BLENotify, 20, 1);
sitakumar 0:11e1f075d0d2 39 /*--------------------------------------------------------------------------------------------*/
sitakumar 0:11e1f075d0d2 40 unsigned int interval = 0;
sitakumar 0:11e1f075d0d2 41 unsigned char count_on = 0;
sitakumar 0:11e1f075d0d2 42
sitakumar 0:11e1f075d0d2 43 //for pH measurement
sitakumar 0:11e1f075d0d2 44 int calib = 0;
sitakumar 0:11e1f075d0d2 45 int avgReading = 0;
sitakumar 0:11e1f075d0d2 46 bool calibrationORnot = true;
sitakumar 0:11e1f075d0d2 47 bool ready = false;
sitakumar 0:11e1f075d0d2 48 int* reading[] = {0,0};
sitakumar 0:11e1f075d0d2 49
sitakumar 0:11e1f075d0d2 50
sitakumar 0:11e1f075d0d2 51 //This loop takes a reading by taking 15 measurements and averaging them when it is called in the loop "measure"
sitakumar 0:11e1f075d0d2 52 int takeReading()
sitakumar 0:11e1f075d0d2 53 {
sitakumar 0:11e1f075d0d2 54 double totalVal = 0.0;
sitakumar 0:11e1f075d0d2 55 double pH_sensor_read = 0.0;
sitakumar 0:11e1f075d0d2 56 int totalReadings = 0;
sitakumar 0:11e1f075d0d2 57 while(totalReadings < 16){
sitakumar 0:11e1f075d0d2 58 pH_sensor_read = pH_sensor.read();
sitakumar 0:11e1f075d0d2 59 totalVal = totalVal + pH_sensor_read;
sitakumar 0:11e1f075d0d2 60 totalReadings++;
sitakumar 0:11e1f075d0d2 61 }
sitakumar 0:11e1f075d0d2 62 int avgSensor = totalVal/15;
sitakumar 0:11e1f075d0d2 63 return avgSensor;
sitakumar 0:11e1f075d0d2 64 }
sitakumar 0:11e1f075d0d2 65
sitakumar 0:11e1f075d0d2 66 void calibration()
sitakumar 0:11e1f075d0d2 67 {
sitakumar 2:f4cedbb71ef9 68 //serial.printf("enter calibration loop\n");
sitakumar 0:11e1f075d0d2 69 //Loop to take calibration value
sitakumar 0:11e1f075d0d2 70 calib = takeReading();
sitakumar 2:f4cedbb71ef9 71 //serial.printf("calib is %d\n", calib);
sitakumar 0:11e1f075d0d2 72 }
sitakumar 0:11e1f075d0d2 73
sitakumar 0:11e1f075d0d2 74 void calculate()
sitakumar 0:11e1f075d0d2 75 {
sitakumar 2:f4cedbb71ef9 76 //serial.printf("entered calc\n");
sitakumar 0:11e1f075d0d2 77 //Take average of readings over 10 seconds
sitakumar 0:11e1f075d0d2 78 avgReading = takeReading();
sitakumar 2:f4cedbb71ef9 79 //serial.printf("took reading\n");
sitakumar 0:11e1f075d0d2 80 ready = true;
sitakumar 0:11e1f075d0d2 81 }
sitakumar 0:11e1f075d0d2 82
sitakumar 0:11e1f075d0d2 83 void measure()
sitakumar 0:11e1f075d0d2 84 {
sitakumar 0:11e1f075d0d2 85 serial.baud(115200);
sitakumar 2:f4cedbb71ef9 86 //serial.printf("start measurement");
sitakumar 0:11e1f075d0d2 87 //cb.mode(PullUp);
sitakumar 0:11e1f075d0d2 88 if(calibrationORnot)
sitakumar 0:11e1f075d0d2 89 {
sitakumar 0:11e1f075d0d2 90 calibration();
sitakumar 0:11e1f075d0d2 91 calibrationORnot = !calibrationORnot;
sitakumar 0:11e1f075d0d2 92 }
sitakumar 0:11e1f075d0d2 93 //Loop to take measurement
sitakumar 0:11e1f075d0d2 94 else if(!calibrationORnot)
sitakumar 0:11e1f075d0d2 95 {
sitakumar 2:f4cedbb71ef9 96 // serial.printf("enter measurement loop\n");
sitakumar 2:f4cedbb71ef9 97 // serial.printf("calib is %d\n", calib);
sitakumar 0:11e1f075d0d2 98 calculate();
sitakumar 0:11e1f075d0d2 99 }
sitakumar 0:11e1f075d0d2 100 }
sitakumar 0:11e1f075d0d2 101
sitakumar 0:11e1f075d0d2 102
sitakumar 0:11e1f075d0d2 103 int main()
sitakumar 0:11e1f075d0d2 104 {
sitakumar 0:11e1f075d0d2 105 pb.mode(PullUp);
sitakumar 0:11e1f075d0d2 106 serial.baud(115200);
sitakumar 0:11e1f075d0d2 107 serial.printf("Hello SmartD!\n");
sitakumar 0:11e1f075d0d2 108 serial.printf("Serial begin!\r\n");
sitakumar 2:f4cedbb71ef9 109 float pH,yint,tempC,tempF;
sitakumar 0:11e1f075d0d2 110
sitakumar 0:11e1f075d0d2 111 /*----- BLE Utility ---------------------------------------------*/
sitakumar 0:11e1f075d0d2 112 // set advertised local name and service UUID
sitakumar 0:11e1f075d0d2 113 blePeripheral.setLocalName("Sita");
sitakumar 0:11e1f075d0d2 114
sitakumar 0:11e1f075d0d2 115 blePeripheral.setAdvertisedServiceUuid(uartService.uuid());
sitakumar 0:11e1f075d0d2 116
sitakumar 0:11e1f075d0d2 117 // add service and characteristic
sitakumar 0:11e1f075d0d2 118 blePeripheral.addAttribute(uartService);
sitakumar 0:11e1f075d0d2 119 blePeripheral.addAttribute(rxCharacteristic);
sitakumar 2:f4cedbb71ef9 120 blePeripheral.addAttribute(txCharacteristic);
sitakumar 0:11e1f075d0d2 121
sitakumar 0:11e1f075d0d2 122 // begin initialization
sitakumar 0:11e1f075d0d2 123 blePeripheral.begin();
sitakumar 0:11e1f075d0d2 124 /*---------------------------------------------------------------*/
sitakumar 0:11e1f075d0d2 125
sitakumar 0:11e1f075d0d2 126 //serial.printf("GOT IT pH is %d, Temp is %d\n\r", reading[0], reading[1]);
sitakumar 2:f4cedbb71ef9 127 serial.printf("\nBLE UART Peripheral begin!\r\n");
sitakumar 0:11e1f075d0d2 128 if (calibrationORnot)
sitakumar 0:11e1f075d0d2 129 {
sitakumar 0:11e1f075d0d2 130 button.rise(&measure);
sitakumar 0:11e1f075d0d2 131 }
sitakumar 0:11e1f075d0d2 132
sitakumar 0:11e1f075d0d2 133 while(1)
sitakumar 0:11e1f075d0d2 134 {
sitakumar 0:11e1f075d0d2 135 BLECentral central = blePeripheral.central();
sitakumar 0:11e1f075d0d2 136 if (ready)
sitakumar 0:11e1f075d0d2 137 {
sitakumar 0:11e1f075d0d2 138 //calcuating yintercept of the ADC -> pH equation using calibration value and given that calibration liquid is pH4
sitakumar 0:11e1f075d0d2 139 yint = (68.97*calib)-4;
sitakumar 2:f4cedbb71ef9 140 //serial.printf("yint is %f", yint);
sitakumar 0:11e1f075d0d2 141 //assumes linear relationship between pin readout -> voltage ->pH
sitakumar 0:11e1f075d0d2 142 pH = (0.0209*3300)*(avgReading)-yint;
sitakumar 0:11e1f075d0d2 143 //conversion to degrees C from sensor output voltage
sitakumar 0:11e1f075d0d2 144 tempC = (((3000*avgReading/1000) - 1.022129)/-0.0018496);
sitakumar 0:11e1f075d0d2 145 tempF = (tempC *9/5) + 32;
sitakumar 0:11e1f075d0d2 146 //print current pH and temp
sitakumar 2:f4cedbb71ef9 147 serial.printf("pH = %f & temp = %f F\n\r", pH, tempF);
sitakumar 0:11e1f075d0d2 148 ready = !ready;
sitakumar 0:11e1f075d0d2 149 }
sitakumar 2:f4cedbb71ef9 150
sitakumar 0:11e1f075d0d2 151 if (central)
sitakumar 0:11e1f075d0d2 152 {
sitakumar 0:11e1f075d0d2 153 // central connected to peripheral
sitakumar 0:11e1f075d0d2 154 serial.printf("Connected to central\r\n");
sitakumar 0:11e1f075d0d2 155 while (central.connected())
sitakumar 0:11e1f075d0d2 156 {
sitakumar 2:f4cedbb71ef9 157 if(!pb)
sitakumar 0:11e1f075d0d2 158 {
sitakumar 2:f4cedbb71ef9 159 tempF = 98.5;
sitakumar 2:f4cedbb71ef9 160 int tempint = tempF;
sitakumar 2:f4cedbb71ef9 161 int tempdecimal = (tempF-tempint)*100;
sitakumar 2:f4cedbb71ef9 162 int pHint = pH;
sitakumar 2:f4cedbb71ef9 163 int pHdecimal = (pH-pHint)*100;
sitakumar 2:f4cedbb71ef9 164 // int tempint = 20;
sitakumar 2:f4cedbb71ef9 165 // int tempdecimal = 23;
sitakumar 2:f4cedbb71ef9 166 // int pHint = 9;
sitakumar 2:f4cedbb71ef9 167 tempbuf[0]= tempint;
sitakumar 2:f4cedbb71ef9 168 tempbuf[1] = tempdecimal;
sitakumar 2:f4cedbb71ef9 169 //tempbuf[templen] = tempint;
sitakumar 2:f4cedbb71ef9 170 //decbuf[declen] = decimal;
sitakumar 2:f4cedbb71ef9 171 pHbuf[0] = pHint;
sitakumar 2:f4cedbb71ef9 172 pHbuf[1] = pHdecimal;
sitakumar 2:f4cedbb71ef9 173 interval++;
sitakumar 2:f4cedbb71ef9 174 }
sitakumar 0:11e1f075d0d2 175
sitakumar 2:f4cedbb71ef9 176 if(interval == 1)
sitakumar 2:f4cedbb71ef9 177 { // If there is no char available last the interval, send the received chars to central.
sitakumar 2:f4cedbb71ef9 178 //serial.printf("Received from terminal: %d bytes\r\n", templen);
sitakumar 2:f4cedbb71ef9 179 txCharacteristic.setValue((const unsigned char *)tempbuf, 2);
sitakumar 2:f4cedbb71ef9 180 txCharacteristic.setValue((const unsigned char *)pHbuf, 2);
sitakumar 2:f4cedbb71ef9 181 serial.printf("done");
sitakumar 2:f4cedbb71ef9 182 wait(2);
sitakumar 2:f4cedbb71ef9 183 interval = 0;
sitakumar 0:11e1f075d0d2 184 }
sitakumar 0:11e1f075d0d2 185 }
sitakumar 0:11e1f075d0d2 186 // central disconnected
sitakumar 0:11e1f075d0d2 187 serial.printf("Disconnected from central\r\n");
sitakumar 0:11e1f075d0d2 188 }
sitakumar 0:11e1f075d0d2 189 }
sitakumar 0:11e1f075d0d2 190 }