Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed nRF51822 Nordic_UART_TEMPLATE_ROHM
Dependents: Nordic_UART_TEMPLATE_ROHM
Fork of UART_TEMPLATE by
Revision 1:2c0ab5cd1a7f, committed 2015-07-19
- Comitter:
- kbahar3
- Date:
- Sun Jul 19 23:14:07 2015 +0000
- Parent:
- 0:442c7a6f1978
- Child:
- 2:c7b9d588c80f
- Commit message:
- Added some ROHM Functions
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Dec 15 21:05:18 2014 -0800
+++ b/main.cpp Sun Jul 19 23:14:07 2015 +0000
@@ -14,29 +14,65 @@
* limitations under the License.
*/
+#define AnalogALS //BH1620 //Change 0: Remove this completely
+#define AnalogTemp //BDE0600
+#define AnalogUV //ML8511
+#define HallSensor //BU52011 //Change 1: Change to use GPIO for BU52014
+#define DigitalALS //BH1721 //Change 2: Remove This and add in the RPR-0521
+ //Change 3: Add Code For BH1745, KX022, BM1383GLV, KMX62
+
+
#include "mbed.h"
#include "BLEDevice.h"
#include "UARTService.h"
#include "nrf_temp.h"
-#define MAX_REPLY_LEN (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN)
-#define SENSOR_READ_INTERVAL_S (0.5F)
+#define MAX_REPLY_LEN (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN) //Actually equal to 20
+#define SENSOR_READ_INTERVAL_S (2.0F)
#define ADV_INTERVAL_MS (1000UL)
#define UART_BAUD_RATE (19200UL)
#define DEVICE_NAME ("DEMO SENSOR") // This can be read AFTER connecting to the device.
-#define SHORT_NAME ("HACKDEMO") // Keep this short: max 8 chars if a 128bit UUID is also advertised.
+#define SHORT_NAME ("ROHMKRIS") // Keep this short: max 8 chars if a 128bit UUID is also advertised.
#define DEBUG(...) { m_serial_port.printf(__VA_ARGS__); }
+// Function Prototypes
+void PBTrigger(); //Interrupt function for PB4
+// Global Variables
BLEDevice m_ble;
Serial m_serial_port(p9, p11); // TX pin, RX pin
DigitalOut m_cmd_led(LED1);
DigitalOut m_error_led(LED2);
-AnalogIn m_analog_in(p1);
-uint16_t m_analog_in_value;
UARTService *m_uart_service_ptr;
+DigitalIn testButton(p20);
+InterruptIn sw4Press(p20);
+I2C i2c(p30,p7);
+//Sensor Variables
+AnalogIn BH1620_ALS(p1);
+uint16_t BH1620_ALS_value;
+float BH1620_output;
+
+AnalogIn BDE0600_Temp(p2);
+uint16_t BDE0600_Temp_value;
+float BDE0600_output;
+
+AnalogIn ML8511_UV(p3);
+uint16_t ML8511_UV_value;
+float ML8511_output;
+
+DigitalIn Hall_GPIO0(p28);
+DigitalIn Hall_GPIO1(p29);
+int Hall_Return1;
+int Hall_Return0;
+
+int ALS_addr_w = 0x46; //7bit addr = 0x23, with write bit 0
+int ALS_addr_r = 0x47; //7bit addr = 0x23, with read bit 1
+char ALS_PwrOn_cmd = 0x01;
+char ALS_ContAuto_cmd = 0x10;
+char ALS_ReturnData_raw[2];
+float ALS_Return = 0;
/**
* This callback is used whenever a disconnection occurs.
@@ -73,24 +109,27 @@
if (1 == params->len) {
switch (params->data[0]) {
case '0':
- m_cmd_led = 0;
- len = snprintf((char*) buf, MAX_REPLY_LEN, "OK");
+ m_cmd_led = m_cmd_led ^ 1;
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "OK... LED ON");
break;
case '1':
- m_cmd_led = 1;
- len = snprintf((char*) buf, MAX_REPLY_LEN, "OK");
+ m_cmd_led = m_cmd_led ^ 1;
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "OK... LED OFF");
break;
case 'a':
- len = snprintf((char*) buf, MAX_REPLY_LEN, "%d", m_analog_in_value);
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "ALSRaw = %d", BH1620_ALS_value);
+ break;
+ case 'b':
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "ALS = %.2f lx", BH1620_output);
break;
default:
- len = snprintf((char*) buf, MAX_REPLY_LEN, "ERROR: Unknown char");
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "ERROR");
break;
}
}
else
{
- len = snprintf((char*) buf, MAX_REPLY_LEN, "ERROR: Invalid len");
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "ERROR");
}
m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
@@ -115,7 +154,72 @@
*/
void periodicCallback(void)
{
- m_analog_in_value = m_analog_in.read_u16();
+ uint8_t buf[MAX_REPLY_LEN];
+ uint32_t len = 0;
+
+
+#ifdef AnalogALS
+ if (m_ble.getGapState().connected) {
+ BH1620_ALS_value = BH1620_ALS.read_u16();
+ BH1620_output = (float)BH1620_ALS_value * 1.543;
+
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "ALS = %.2f lx", BH1620_output);
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+ }
+#endif
+
+#ifdef AnalogTemp
+ if (m_ble.getGapState().connected) {
+ BDE0600_Temp_value = BDE0600_Temp.read_u16();
+ BDE0600_output = (float)BDE0600_Temp_value * 0.00283; //(value * (2.9V/1024))
+ BDE0600_output = (BDE0600_output-1.753)/(-0.01068) + 30;
+
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "Temp = %.2f C", BDE0600_output);
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+
+ }
+#endif
+
+#ifdef AnalogUV
+ if (m_ble.getGapState().connected) {
+ ML8511_UV_value = ML8511_UV.read_u16();
+ ML8511_output = (float)ML8511_UV_value * 0.00283; //(value * (2.9V/1024)) //Note to self: when playing with this, a negative value is seen... Honestly, I think this has to do with my ADC converstion...
+ ML8511_output = (ML8511_output-2.2)/(0.129) + 15; // Added +5 to the offset so when inside (aka, no UV, readings show 0)... this is the wrong approach... and the readings don't make sense... Fix this.
+
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "UV = %.1f mW/cm2", ML8511_output);
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+ }
+#endif
+
+#ifdef HallSensor
+ if (m_ble.getGapState().connected) {
+ Hall_Return0 = Hall_GPIO0;
+ Hall_Return1 = Hall_GPIO1;
+
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "H0 = %d, H1 = %d", Hall_Return0, Hall_Return1);
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+ }
+#endif
+
+#ifdef DigitalALS
+ if (m_ble.getGapState().connected) {
+ i2c.read(ALS_addr_r, ALS_ReturnData_raw, 2);
+ ALS_Return = (ALS_ReturnData_raw[0]<<8) | ALS_ReturnData_raw[1];
+ ALS_Return = ALS_Return/1.2;
+
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "DALS= %0.2f lx", ALS_Return);
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+ }
+#endif
+
+
+
+
+ if (m_ble.getGapState().connected) {
+ len = snprintf((char*) buf, MAX_REPLY_LEN, " "); //Print and Extra Line to show new data
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+ }
+
}
@@ -125,6 +229,21 @@
DEBUG("Error %d on line number %d\n\r", err, line);
}
+void PBTrigger()
+{
+ uint8_t buf[MAX_REPLY_LEN];
+ uint32_t len = 0;
+
+ m_cmd_led = !m_cmd_led;
+
+ if (m_ble.getGapState().connected) {
+ BH1620_ALS_value = BH1620_ALS.read_u16();
+ BH1620_output = (float)BH1620_ALS_value * 1.543;
+
+ len = snprintf((char*) buf, MAX_REPLY_LEN, "ALS = %.2f lx", BH1620_output);
+ m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+ }
+}
int main(void)
{
@@ -137,10 +256,17 @@
m_cmd_led = 0;
m_error_led = 0;
- m_analog_in_value = 0;
+ BH1620_ALS_value = 0;
ticker.attach(periodicCallback, SENSOR_READ_INTERVAL_S);
+ sw4Press.fall(&PBTrigger);
+
+#ifdef DigitalALS
+ i2c.write(ALS_addr_w, &ALS_PwrOn_cmd, 1);
+ i2c.write(ALS_addr_w, &ALS_ContAuto_cmd, 1);
+#endif
+
m_ble.init();
m_ble.onDisconnection(disconnectionCallback);
m_ble.onDataWritten(dataWrittenCallback);
