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

main.cpp

Committer:
jurica238814
Date:
2017-06-30
Revision:
5:6566725c8835
Parent:
4:f6f94ef38e6a
Child:
6:e848c82b5248

File content as of revision 5:6566725c8835:

/* Copyright (c) 2017 Aconno. All Rights Reserved.
 *
 * Licensees are granted free, non-transferable use of the information. NO
 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
 * the file.
 */
 
#include "mbed.h"
#include "acd52832_bsp.h"
#include "GDEP015OC1.h"
#include "pictures.h"

#define DEBUG                   (1)
#define ADC_MAX_VALUE           (4092)
#define ADC_REF_VOLTAGE         (3.6)
#define VOLTAGE_DIVIDER_RATION  (130.0/30)
#define CURRENT_FACTOR          (36.0)
#define BATTERY_MAX_V           (14.0)
#define BATTERY_MIN_V           (12.0)
#define BATTERY_STEP            (0.4) 
#define LOW_QUICK_CURRENT       (0.5)
    


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

AnalogIn  battery   (p28);
AnalogIn  usb1      (p29);
AnalogIn  usb2      (p30);

int main(){
    char buffer[25] = {0};
    char low_string[25] = "LOW";
    char quick_string[25] = "QUICK";
    float adc1_mean=0, adc2_mean=0, adc3_mean=0;
    float battery_voltage = 0;
    float usb1_current = 0, usb2_current = 0;
    int count = 0;
    
    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();
        count ++;
        
        if (count == 10){
            
            adc1_mean /= 10;
            adc2_mean /= 10;
            adc3_mean /= 10;
            count = 0;
            
            battery_voltage = adc1_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)*VOLTAGE_DIVIDER_RATION;
            usb1_current = (CURRENT_FACTOR/ADC_MAX_VALUE)*adc2_mean;
            usb2_current = (CURRENT_FACTOR/ADC_MAX_VALUE)*adc3_mean;
            
            if(battery_voltage > BATTERY_MAX_V - BATTERY_STEP){
                //Load image
                for(uint16_t x=0;x<5000;x++)
                    epd.fill(BS_5[x], x);
                epd.write();
            }
            else if((battery_voltage > BATTERY_MAX_V - BATTERY_STEP * 2) && (battery_voltage < BATTERY_MAX_V - BATTERY_STEP * 1)){
                //Load image
                for(uint16_t x=0;x<5000;x++)
                    epd.fill(BS_4[x], x);
                epd.write();
            }
            else if((battery_voltage > BATTERY_MAX_V - BATTERY_STEP * 3) && (battery_voltage < BATTERY_MAX_V - BATTERY_STEP * 2)){
                //Load image
                for(uint16_t x=0;x<5000;x++)
                    epd.fill(BS_3[x], x);
                epd.write();
            }
            else if((battery_voltage > BATTERY_MAX_V - BATTERY_STEP * 4) && (battery_voltage < BATTERY_MAX_V - BATTERY_STEP * 3)){
                //Load image
                for(uint16_t x=0;x<5000;x++)
                    epd.fill(BS_2[x], x);
                epd.write();
            }
            else if((battery_voltage > BATTERY_MAX_V - BATTERY_STEP * 5) && (battery_voltage < BATTERY_MAX_V - BATTERY_STEP * 4)){
                //Load image
                for(uint16_t x=0;x<5000;x++)
                    epd.fill(BS_1[x], x);
                epd.write();
            }
            else if(battery_voltage < BATTERY_MAX_V - BATTERY_STEP * 5){
                //Load image
                for(uint16_t x=0;x<5000;x++)
                    epd.fill(BS_E[x], x);
                epd.write();
            }
            
            if(usb1_current < (float)LOW_QUICK_CURRENT){
                epd.writeString(low_string, 25, 180, 0);
                epd.write();
            }
            else{
                epd.writeString(quick_string, 25, 180, 0);
                epd.write();
            }
            
            if(usb2_current < (float)LOW_QUICK_CURRENT){
                epd.writeString(low_string, 135, 180, 0);
                epd.write();
            }
            else{
                epd.writeString(quick_string, 135, 180, 0);
                epd.write();
            }
            
            
            
            #if DEBUG
            /*
                // Print voltage and current values in debug mode
                sprintf(buffer, "Battery: %5.5fV", adc1_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)*VOLTAGE_DIVIDER_RATION);     // Create a string
                epd.writeString(buffer,25,95,0);                        // Write new data to the buffer    
                epd.write();                                            // Write string to the EPD
              */  
                sprintf(buffer, "USB1: %5.5fA", (CURRENT_FACTOR/ADC_MAX_VALUE)*adc2_mean);           // Create a string
                epd.writeString(buffer,5,190,0);                        // Write new data to the buffer    
                epd.write();                                            // Write string to the EPD
                
                sprintf(buffer, "USB1: %5.5fA", (CURRENT_FACTOR/ADC_MAX_VALUE)*adc3_mean);           // Create a string
                epd.writeString(buffer,105,190,0);                       // Write new data to the buffer    
                epd.write();                                            // Write string to the EPD
            #endif
            
            adc1_mean = 0;
            adc2_mean = 0;
            adc3_mean = 0;
        }
    }
}