armazenamento_new.py 2.77 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
 Estação biométrica CTA

 Programa para aquisição dos dados
 Este programa é utilizado com o programa biometrica.ino no qual a taxa de amostragem é definida no microcontrolador

 Protocolo usado está disponível no biométrica.ino

 Centro de Tecnologia Acadêmica - UFRGS
 http://cta.if.ufrgs.br

 Licença: GPL v3
 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
	[tempo_de_execução]: tempo total de execução, em segundos

	PADRÃO NOME DO ARQUIVO DE SAÍDA: coleta_[Nome]_[Sobrenome]_[obs].log
		[obs] são observações caso sejam necessárias
'''
# Exemplo: python armazenamento.py '/dev/ttyACM0' 115200 coleta_Nome_Exemplo_1min.log 30

import sys, time, serial, datetime
argumento = sys.argv[1:] #renomeando os argumentos

# Iniciando comunicação serial
ser = serial.Serial(argumento[0], argumento[1])
# 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

# Variáveis de controle
frequencia = int(ser.readline().replace('\r\n',''))

# Arquivos de log
fisiologfile = open(argumento[2],'w')
now=datetime.datetime.now()
fisiologfile.write(now.strftime("#Frequência\t"+str(frequencia)+"\t(Hz)\n"+"#Estação Biométrica\n"+"#Coleta de dados iniciado em: "+"%Y-%m-%d %H:%M:%S" +"\n"+"#Protocolo usado: a primeira coluna é a medida do primeiro termistor e a segunda do segundo.\n"))
fisiologfile.close()

print "Data e hora da medida \t\tMedida 1\tMedida 2"
time = int(argumento[3])*frequencia
time_counter = 0;
while (time_counter <= time or time == 0):
	time_counter += 1
	print time, time_counter
	try:
		option = ser.read()
		# Respiração
		# 	Para o python '\x' serve para representar uma caracter HEX ASCII
		# 	e o 0x para para valores HEX literais. O comando write do arduino
		#	  envia um caracter, logo deve-se usar a primeira forma
		if option == "\x0A":

			sensor_value1 = ser.readline().replace('\r\n','')
			sensor_value2 = ser.readline().replace('\r\n','')

			# Arquivo de log
			fisiologfile = open(argumento[2],'a')
			fisiologfile.write(str(sensor_value1)+"\t"+str(sensor_value2)+"\n")
			fisiologfile.close()

			# Registra horário atual
			now = datetime.datetime.now()

			# Mostrando dados na tela
			print now.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3],"\t", sensor_value1, "\t\t", sensor_value2

		# Erro 1
		if option == '\x01':
			print 'Frequência muito alta para o microcontrolador: ', frequencia, '. Finalizando processo.\n'

	except KeyboardInterrupt:
				break

ser.close()