Чтобы получить правильное значение, вы должны прочитать значение дважды. При первом считывании микросхема выполняет новое измерение и возвращает текущее значение в регистр (что не является правильным значением). Во втором чтении вы получите правильное значение:
import smbus
import time
address = 0x48
A0 = 0x40
A1 = 0x41
A2 = 0x42
A3 = 0x43
bus = smbus.SMBus(1)
while True:
bus.read_byte_data(address, A1) # do the measurement but ignore the value
value = bus.read_byte_data(address, A1) # get the correct value
#print(value)
print("AOUT: %1.03f" %(value*3.3/255))
time.sleep(0.2)
Правило № 1, не пишите свое собственное.
Существует множество ORMs на CPAN, включая...
Из предложений я использовал бы DBIx:: Класс. Вот некоторый код для анализирования 50 унаследованных баз данных таблицы (с отношениями, указанными в схеме):
#!/usr/bin/perl
use warnings;
use strict;
use DBIx::Class::Schema::Loader qw/ make_schema_at /;
make_schema_at("Zotero::Schema",
{
# components => ['InflateColumn::DateTime'],
debug => 1,
relationships => 1,
dump_directory => './lib' ,
},
["dbi:SQLite:dbname=../zotero.sqlite", "",""]);
(Звон поздно) Данные:: ObjectDriver (также на CPAN) обеспечивает большую гибкость особенно, если разделение и кэширование находятся в списке Ваших требований.