Added analog class for plasma current reading

pull/191/head
ZodiusInfuser 2021-08-18 12:16:51 +01:00
rodzic 281288a6f4
commit ae09498953
5 zmienionych plików z 62 dodań i 0 usunięć

Wyświetl plik

@ -1,3 +1,4 @@
add_subdirectory(analog)
add_subdirectory(esp32spi)
add_subdirectory(ioexpander)
add_subdirectory(ltp305)

Wyświetl plik

@ -0,0 +1 @@
include(analog.cmake)

Wyświetl plik

@ -0,0 +1,11 @@
set(DRIVER_NAME analog)
add_library(${DRIVER_NAME} INTERFACE)
target_sources(${DRIVER_NAME} INTERFACE
${CMAKE_CURRENT_LIST_DIR}/${DRIVER_NAME}.cpp
)
target_include_directories(${DRIVER_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR})
# Pull in pico libraries that we need
target_link_libraries(${DRIVER_NAME} INTERFACE pico_stdlib hardware_adc)

Wyświetl plik

@ -0,0 +1,18 @@
#include "analog.hpp"
namespace pimoroni {
uint16_t Analog::read_raw() {
return adc_read();
}
float Analog::read_voltage() {
return ((float)adc_read() * 3.3f) / (1 << 12) / amplifier_gain;
}
float Analog::read_current() {
if(resistor > 0.0f)
return read_voltage() / resistor;
else
return read_voltage();
}
};

Wyświetl plik

@ -0,0 +1,31 @@
#pragma once
#include <stdint.h>
#include "pico/stdlib.h"
#include "hardware/adc.h"
#include "common/pimoroni_common.hpp"
namespace pimoroni {
class Analog {
public:
Analog(uint pin, float amplifier_gain = 1.0f, float resistor = 0.0f) :
pin(pin), amplifier_gain(amplifier_gain), resistor(resistor) {
adc_init();
//Make sure GPIO is high-impedance, no pullups etc
adc_gpio_init(pin);
//Select ADC input 0 (GPIO26)
adc_select_input(pin - 26);
};
uint16_t read_raw();
float read_voltage();
float read_current();
private:
uint pin;
float amplifier_gain;
float resistor;
};
}