A simple example for analog input and EPD usage.
Dependencies: GDEP015OC1 acn_nrf52_saadc aconno_bsp
Fork of acd52832_3_Analog_In by
Diff: main.cpp
- 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){