ROHMUSDC / Mbed 2 deprecated Nordic_UART_TEMPLATE_ROHM

Dependencies:   BLE_API mbed nRF51822 Nordic_UART_TEMPLATE_ROHM

Dependents:   Nordic_UART_TEMPLATE_ROHM

Fork of UART_TEMPLATE by daniel veilleux

Files at this revision

API Documentation at this revision

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);