Commit 2fd03210 authored by beuren's avatar beuren

Armazenamento foi ajustado corrigindo erro de lógica

parent e77ff26b
......@@ -13,6 +13,7 @@ void setup()
{
Serial.begin(115200);
period = 1.0/frequency;
delay(50);
}
void loop()
{
......
......@@ -10,57 +10,55 @@
# http://cta.if.ufrgs.br
#
# Licença: GPL v3
# Ordem de argumentos : [porta],[taxa_transmissão],[arquivo_saída],[frequência]
# Ordem de argumentos : [porta],[taxa_transmissão],[arquivo_saída]
# Onde
# [porta]: porta serial no qual o arduino está conectado
# [taxa_transmissão]: velocidade de comunicação serial
# [arquivo_saída]: nome do arquivo em que os dados serão salvos
# [frequência]: frequência de coleta de dados definida no arduino
# Exemplo: python armazenamento.py '/dev/ttyACM0' 115200 coleta1.log 5
# Exemplo: python armazenamento.py '/dev/ttyACM0' 115200 coleta1.log
import sys, time, serial, datetime
argumento = sys.argv[1:] #renomeando os argumentos
#Iniciando comunicação serial
# Iniciando comunicação serial
ser = serial.Serial(argumento[0], argumento[1])
time.sleep(2)
# Limpando buffer para retirar as medidas feitas antes de iniciar o software
ser.setDTR(False) # Desliga DTR
time.sleep(0.005)
ser.flushInput() # Limpa buffer de dados
ser.setDTR(True) # Liga DTR novamente
#Arquivos de log
# Variáveis de controle
frequencia = int(ser.readline().replace('\r\n',''))
periodo = 1.0/frequencia
# Arquivos de log
fisiologfile = open(argumento[2],'w')
now=datetime.datetime.now()
fisiologfile.write(now.strftime("#Frequência\t"+argumento[3]+"\n"+"#Estação Biométrica\n"+"#Coleta de dados iniciado em: "+"%Y-%m-%d %H:%M:%S" +"\n"))
#Variáveis de controle
frequencia = int(argumento[3])
periodo = 1.0/frequencia
fisiologfile.write(now.strftime("#Frequência\t"+str(frequencia)+"\n"+"#Estação Biométrica\n"+"#Coleta de dados iniciado em: "+"%Y-%m-%d %H:%M:%S" +"\n"))
while True:
t0 = time.time()
try:
# Temperatura
t = float(ser.readline().replace('\r\n',''))
t = ser.readline().replace('\r\n','')
if t == 'Erro1':
print 'Frequência muito alta para o microcontrolador: ', frequencia, '. Finalizando processo.\n'
except KeyboardInterrupt:
break
except ValueError:
print "Não é possível operar a essa frequência (controlador)"
break
try:
# Registra horário atual
now = datetime.datetime.now()
# Mostrando dados na tela
print now.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3],"\t", t
# Arquivo de log
print now.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3],"\t", t
fisiologfile = open(argumento[2],'a')
fisiologfile.write(str(t)+"\n")
fisiologfile.close()
if (periodo - (time.time()- t0))< 0:
print "Não é possível operar a essa frequência"
break
time.sleep(periodo - (time.time()- t0))
except KeyboardInterrupt:
break
ser.close()
......@@ -24,14 +24,14 @@ parametro = sys.argv[1:]
ion()
fisiologfile = open(parametro[0],'r')
#Inicialização de variáveis
# Inicialização de variáveis
contador = 0
x0 = 0
i = 0
x = []
y = []
#Dados para plot
# Dados para plot
fig = figure(1)
sub = subplot(111)
line = plot(x, y, 'r-')
......@@ -43,7 +43,7 @@ for linha in fisiologfile:
if linha[0:5] == '#Freq':
frequencia = float(linha.replace('\n', '').split('\t')[1])
periodo = 1.0/ frequencia
elif linha[0] != '#' and linha[0:3] != '0.0':
elif linha[0] != '#':
y.append(float(linha))
x.append(i)
i = i + periodo
......@@ -63,21 +63,22 @@ fisiologfile.close()
# ----
intervalo = 10
quantidade_dados = int(intervalo*frequencia*(1.5))
quantidade_dados = int(intervalo*frequencia*(1.1))
variacao = 0.02
variacao_max = 0.30
frequencia_foco = int(frequencia*intervalo*(0.2))
frequencia_foco = int(frequencia*intervalo*(0.1))
frequencia_limpa = int(frequencia*intervalo*(50))
yf = (1.0 + variacao)*(max(y))
yi = (1.0 - variacao)*(min(y))
contador = len(y)
while True:
try:
t0 = time.time()
contador = contador + 1;
#Leitura do ultimo dado do arquivo, caso o arquivo não esteja sendo atualizado será sempre pego a última linha.
# Leitura do ultimo dado do arquivo, caso o arquivo não esteja sendo atualizado será sempre pego a última linha.
fisiologfile = open(parametro[0],'r')
s = float(fisiologfile.readlines()[-1])
fisiologfile.close()
......@@ -86,7 +87,7 @@ while True:
line[0].set_data(x,y)
x0 = i - intervalo
#Controle do foco da imagem do gráfico:
# Controle do foco da imagem do gráfico:
if (contador % frequencia_foco == 0) :
if(quantidade_dados > len(y)) :
yf = (1.0 + variacao)*(max(y[-len(y):]))
......@@ -100,8 +101,8 @@ while True:
yf = (1 + (variacao + variacao_max))*valor_medio
if(yi < (1 - (variacao + variacao_max))*valor_medio):
yi = (1 - (variacao + variacao_max))*valor_medio
#Limpar a lista, já que dependendo do tempo de execução seu tamanho pode ser muito grande.
# Limpar a lista, já que dependendo do tempo de execução seu tamanho pode ser muito grande.
if (contador % frequencia_limpa == 0):
del x [0:-quantidade_dados]
del y [0:-quantidade_dados]
......@@ -112,11 +113,9 @@ while True:
i = i + periodo
if (periodo - (time.time()- t0))< 0:
print "Não é possível operar a essa frequência"
print 'Não é possível operar a essa frequência : ', frequencia
break
time.sleep(periodo - (time.time()- t0))
except KeyboardInterrupt:
break
except ValueError:
print "Não é possível operar a essa frequência (controlador)"
break
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment