A simple example for analog input and EPD usage.

Dependencies:   GDEP015OC1 acn_nrf52_saadc aconno_bsp

Fork of acd52832_3_Analog_In by aconno dev team

Revision:
10:8a9eb611624e
Parent:
9:eef3ea422bfe
Child:
11:6c6bebdfff06
--- a/main.cpp	Fri Jul 07 11:50:24 2017 +0000
+++ b/main.cpp	Fri Oct 06 14:33:57 2017 +0000
@@ -9,11 +9,12 @@
 #include "acd52832_bsp.h"
 #include "GDEP015OC1.h"
 #include "pictures.h"
+#include "acd_nrf52_saadc.h"
 
-#define DEBUG                   (0)
-#define ADC_MAX_VALUE           (4095)
-#define ADC_REF_VOLTAGE         (3.6)
-#define VOLTAGE_DIVIDER_RATION  (4.42)
+#define DEBUG                   (1)
+#define ADC_MAX_VALUE           (8192)
+#define ADC_REF_VOLTAGE         (3.3f)
+#define VOLTAGE_DIVIDER_RATION  (7.0606)
 #define VOLTAGE_LOSS            (0.4)
 #define CURRENT_FACTOR          (36.0)
 #define BATTERY_CHARGED_V       (13)
@@ -23,7 +24,7 @@
 #define QUICK_CURRENT           (float)(0.8)
 #define LOW_CURRENT             (float)(0.4)
 #define NO_CURRENT              (float)(0.01)
-#define NUM_OF_MEASUREMENTS     (20)
+#define NUM_OF_MEASUREMENTS     (1)
 #define NO_CURRENT_STATE        (0)
 #define LOW_CURRENT_STATE       (1)
 #define QUICK_CURRENT_STATE     (2)
@@ -39,12 +40,12 @@
 #define _BS_1                   (1)
 #define _BS_E                   (0)
 
-SPI spi(PIN_EPD_MOSI, NC, PIN_EPD_SCK, NC);
-GDEP015OC1 epd = GDEP015OC1(spi, PIN_EPD_CS, PIN_EPD_DC, PIN_EPD_RST, PIN_EPD_BUSY);
+#define ANALOG_PIN_P     (4)
+#define ANALOG_PIN_N     (5)
+#define NUM_OF_DIFF_ADCs (1)
 
-AnalogIn  battery   (p28);
-AnalogIn  usb1      (p29);
-AnalogIn  usb2      (p30);
+SPI spi(PIN_EPD_MOSI, NC, PIN_EPD_SCK, NC);
+GDEP015OC1 epd = GDEP015OC1(spi, PIN_EPD_CS, PIN_EPD_DC, PIN_EPD_RST, PIN_EPD_BUSY);    
 
 uint8_t get_battery_level(float battery_voltage){
         if (battery_voltage > BATTERY_CHARGED_V * 4){
@@ -98,6 +99,14 @@
 }
 
 int main(){
+    NRF52_SAADC *diffADCs[NUM_OF_DIFF_ADCs];
+    /* Declare your ADCs here */
+    /* Change NUM_OF_DIFF_ADCs in the header */
+    diffADCs[0] = new NRF52_SAADC(ANALOG_PIN_P, ANALOG_PIN_N);
+    
+    NRF52_SAADC usb1(7); // P29, AIN5
+    NRF52_SAADC usb2(6); // p30, AIN6
+
     char low_string[25] = "LOW";
     char quick_string[25] = "QUICK";
     float adc1_mean=0, adc2_mean=0, adc3_mean=0;
@@ -116,17 +125,15 @@
         float old_usb1_current = 0;
         float old_usb2_current = 0;
     #endif
-    
-    NRF_SAADC->RESOLUTION = 0x00000002;             // Set 12b resolution
-    
+        
     epd.empty();
     epd.writeFull(); 
         
     while(true){   
         
-        adc1_mean += battery.read_u16();
-        adc2_mean += usb1.read_u16();
-        adc3_mean += usb2.read_u16();
+        adc1_mean += diffADCs[0]->read();
+        adc2_mean += usb1.read();
+        adc3_mean += usb2.read();
         count ++;
                             
         if (count == NUM_OF_MEASUREMENTS){ 
@@ -136,9 +143,12 @@
             adc3_mean /= NUM_OF_MEASUREMENTS;
             count = 0;
                 
-            battery_voltage = adc1_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)*VOLTAGE_DIVIDER_RATION + VOLTAGE_LOSS;
-            usb1_current = (adc2_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)) * CURRENT_FACTOR;
-            usb2_current = (adc3_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)) * CURRENT_FACTOR;
+            //voltage[i] = ((float)(diffADCs[i]->read()))*(3.3f/8192.0);    // Convert raw data into voltage
+            //battery_voltage = ((float)(diffADCs[0]->read()*(3.3f/8192.0)*VOLTAGE_DIVIDER_RATION));
+            battery_voltage = ((float)(diffADCs[0]->read()*(3.3f/8192.0)));
+            //battery_voltage = adc1_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE);
+            usb1_current = (adc2_mean*(ADC_REF_VOLTAGE/(ADC_MAX_VALUE*2))) * CURRENT_FACTOR;
+            usb2_current = (adc3_mean*(ADC_REF_VOLTAGE/(ADC_MAX_VALUE*2))) * CURRENT_FACTOR;
                     
             battery_level = get_battery_level(battery_voltage);
             if(battery_level != old_battery_level || change_flag){