code:power_and_measure_lifepo4

from machine import Pin, I2C, ADC
import SSD1306 as SSD1306
import utime, gc
 
# 50.3k & 48.3k
 
def remap(value, leftMin, leftMax, rightMin, rightMax):
    leftSpan = leftMax - leftMin
    rightSpan = rightMax - rightMin
    valueScaled = float(value - leftMin) / float(leftSpan)
    return rightMin + (valueScaled * rightSpan)
 
_MEAS_COUNT = 3
 
adc = ADC(Pin(32))          # create ADC object on ADC pin
adc.atten(ADC.ATTN_11DB)    # set 11dB input attenuation (voltage range roughly 0.0v - 3.6v)
print("ADC set")
 
 
i2c1 = I2C(-1, scl=Pin(22), sda=Pin(21))
oled = SSD1306.SSD1306_I2C(128, 64, i2c1, 0x3c)    # 0x3C = 60
print("OLED set")
 
oled.fill(1)
oled.show()
utime.sleep(1)
oled.fill(0)
oled.show()
oled.text("Hello", 0, 0)
oled.show()
utime.sleep(1)
 
print("Goin into loop...")
while True:
    # make 3 measurements
    # show average on screen
    # sleep for one second
 
    total = 0
    for i in range(_MEAS_COUNT):
        total = total + int(adc.read())
        utime.sleep_ms(100)
    raw = int(total / _MEAS_COUNT)
    oled.fill(0)
    oled.text("{} {}v".format(raw, remap(raw, 1350, 1680, 2.69, 3.214)) , 10, 0)
    oled.show()
    print(str(int(total / _MEAS_COUNT)))
    utime.sleep_ms(1000)
  • code/power_and_measure_lifepo4.txt
  • Last modified: 2022/02/19 21:24
  • by Ignas