respirometro.ino 2.17 KB
Newer Older
Poseidon's avatar
Poseidon committed
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
/*
**********************************************************
*                  RESPIRÔMETRO - CTA                    *
**********************************************************
    AUTOR: Béuren F. Bechlin

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

    Este arquivo fonte faz parte do Respirômetro e está
sobre a licença GPL v3, como também os arquivos:
    * binaryCommunication(.h/.cpp): usado para criar uma
        comunicação com dados binários entre o arduino e 
        o computador e não com CHARS como é o default.
    * utils(.h/.cpp): usado para criar rotinas que devem
        ser executadas com uma frequência fixa, funciona-
        mento análogo com o delay() disponibilizado pela
        plataforma, entretanto não para o processamento
        e sim utiliza metodo de polling para verificar 
        se deve executar algo.

    ENTRADAS ANALÓGICAS:
        A0 :: RESPIRÔMETRO PRIMEIRA ENTRADA
        A1 :: RESPIRÔMETRO SEGUNDA ENTRADA
        A2 :: ELETROCARDIOGRAMA
*/

#include "binaryCommunication.h"
#include "utils.h"

/* Definindo a frequencia de operação do equipamento*/
#define FREQUENCY 250  // Hz
 
/* Criando estruturas de dados para definir como será enviado os 
    dados de comunicação*/
struct{
39
40
    byte controlFlag01 = 0xAA;
    byte controlFlag02 = 0xAA; 
Poseidon's avatar
Poseidon committed
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
    short int frequency = FREQUENCY;;
}headerStruct;

struct{
    short int reads[1];
}dataStruct;

/* Criando comunicação*/
BinCommunication commHeader(&headerStruct, sizeof(headerStruct));
BinCommunication commData(&dataStruct, sizeof(dataStruct));
/* Criando interface que se repetirá a cada '1.0/FREQUENCY'. Essa 
    interface irá chamar a função 'measures' a cada repetição*/
Interface interface(&measures, 1000.0/FREQUENCY);

void setup(){
    /* Iniciando comunicação serial*/
    Serial.begin(115200);
    commHeader.send();
}

void loop(){
    interface.run();
}

void measures(){ 
    for(int i = 0; i < 1; i++)
        dataStruct.reads[i] = analogRead(i);    
    /* Enviando dados*/
    commData.send();      
}