Repositório para o código final de Microcontroladores.
Dependencies: BME280 MFRC522 mbed
main.cpp@3:3fe778bdb20a, 2018-06-24 (annotated)
- Committer:
- RickBadKan
- Date:
- Sun Jun 24 22:13:53 2018 +0000
- Revision:
- 3:3fe778bdb20a
- Parent:
- 2:3dd81ff9eb1f
Atualiza??o dos coment?rios
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RickBadKan | 0:91215b8406ee | 1 | #include "mbed.h" |
RickBadKan | 0:91215b8406ee | 2 | |
RickBadKan | 0:91215b8406ee | 3 | // Biblioteca do BME280: Temperatura e Pressão |
RickBadKan | 0:91215b8406ee | 4 | #include "BME280.h" |
RickBadKan | 0:91215b8406ee | 5 | |
RickBadKan | 0:91215b8406ee | 6 | // Biblioteca para utilização do RFID |
RickBadKan | 0:91215b8406ee | 7 | #include "MFRC522.h" |
RickBadKan | 0:91215b8406ee | 8 | |
RickBadKan | 0:91215b8406ee | 9 | // Declaração para utilização do serial bluetooth |
RickBadKan | 0:91215b8406ee | 10 | Serial bluetooth(p9, p10); |
RickBadKan | 0:91215b8406ee | 11 | |
RickBadKan | 0:91215b8406ee | 12 | // Declaração para utilização do sensor de temperatura e pressão |
RickBadKan | 0:91215b8406ee | 13 | BME280 sensor_t_p(p28, p27); |
RickBadKan | 0:91215b8406ee | 14 | |
RickBadKan | 0:91215b8406ee | 15 | // Declaração para utilização da bomba |
RickBadKan | 0:91215b8406ee | 16 | PwmOut bomba(p21); |
RickBadKan | 0:91215b8406ee | 17 | |
RickBadKan | 0:91215b8406ee | 18 | // Declaração para utilização do sensor de umidade |
RickBadKan | 0:91215b8406ee | 19 | AnalogIn sensor_u(p15); |
RickBadKan | 0:91215b8406ee | 20 | |
RickBadKan | 0:91215b8406ee | 21 | // Declaração para utilização do RFID |
RickBadKan | 0:91215b8406ee | 22 | MFRC522 RFID(p11, p12, p13, p14, p8); |
RickBadKan | 0:91215b8406ee | 23 | |
RickBadKan | 2:3dd81ff9eb1f | 24 | // Declaração para status de conexão do bluetooth + controle de login |
RickBadKan | 2:3dd81ff9eb1f | 25 | DigitalIn statusBluetooth(p19); |
RickBadKan | 2:3dd81ff9eb1f | 26 | int controleReconexao = 0; |
RickBadKan | 2:3dd81ff9eb1f | 27 | |
RickBadKan | 1:9c4b2fdf3b67 | 28 | // Variável de verificação de autenticação |
RickBadKan | 1:9c4b2fdf3b67 | 29 | int autenticado = 0; |
RickBadKan | 1:9c4b2fdf3b67 | 30 | |
RickBadKan | 1:9c4b2fdf3b67 | 31 | // Variável de entrada bluetooth |
RickBadKan | 1:9c4b2fdf3b67 | 32 | char input; |
RickBadKan | 1:9c4b2fdf3b67 | 33 | |
RickBadKan | 2:3dd81ff9eb1f | 34 | // Controle manual da bomba |
RickBadKan | 2:3dd81ff9eb1f | 35 | int controleManual = 0; |
RickBadKan | 2:3dd81ff9eb1f | 36 | |
RickBadKan | 2:3dd81ff9eb1f | 37 | |
RickBadKan | 2:3dd81ff9eb1f | 38 | // Definição dos protótipos |
RickBadKan | 2:3dd81ff9eb1f | 39 | void controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 40 | void exibirMenu(); |
RickBadKan | 2:3dd81ff9eb1f | 41 | void exibirInfo(); |
RickBadKan | 2:3dd81ff9eb1f | 42 | void flushSerialBuffer(); |
RickBadKan | 2:3dd81ff9eb1f | 43 | void conexaoBluetooth(); |
RickBadKan | 2:3dd81ff9eb1f | 44 | |
RickBadKan | 2:3dd81ff9eb1f | 45 | // Exibição padrão do menu de controle |
RickBadKan | 2:3dd81ff9eb1f | 46 | void exibirMenu() |
RickBadKan | 2:3dd81ff9eb1f | 47 | { |
RickBadKan | 2:3dd81ff9eb1f | 48 | bluetooth.printf("\nSelecione a operacao desejada:\n"); |
RickBadKan | 2:3dd81ff9eb1f | 49 | bluetooth.printf("(I)nformacoes de Pressao, Temperatura e Umidade\n"); |
RickBadKan | 2:3dd81ff9eb1f | 50 | bluetooth.printf("(L)igar a Bomba\n"); |
RickBadKan | 2:3dd81ff9eb1f | 51 | bluetooth.printf("(D)esligar a Bomba\n"); |
RickBadKan | 2:3dd81ff9eb1f | 52 | bluetooth.printf("(S)air\n"); |
RickBadKan | 2:3dd81ff9eb1f | 53 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 54 | conexaoBluetooth(); |
RickBadKan | 2:3dd81ff9eb1f | 55 | } |
RickBadKan | 2:3dd81ff9eb1f | 56 | |
RickBadKan | 3:3fe778bdb20a | 57 | // Função de controle do status da conexão Bluetooth |
RickBadKan | 2:3dd81ff9eb1f | 58 | void conexaoBluetooth() |
RickBadKan | 2:3dd81ff9eb1f | 59 | { |
RickBadKan | 2:3dd81ff9eb1f | 60 | if (!statusBluetooth) { |
RickBadKan | 2:3dd81ff9eb1f | 61 | autenticado = 0; |
RickBadKan | 2:3dd81ff9eb1f | 62 | controleManual = 0; |
RickBadKan | 2:3dd81ff9eb1f | 63 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 64 | controleReconexao = 1; |
RickBadKan | 2:3dd81ff9eb1f | 65 | } |
RickBadKan | 2:3dd81ff9eb1f | 66 | else { |
RickBadKan | 2:3dd81ff9eb1f | 67 | if (controleReconexao){ |
RickBadKan | 2:3dd81ff9eb1f | 68 | wait(2.0f); |
RickBadKan | 2:3dd81ff9eb1f | 69 | bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n"); |
RickBadKan | 2:3dd81ff9eb1f | 70 | controleReconexao = 0; |
RickBadKan | 2:3dd81ff9eb1f | 71 | } |
RickBadKan | 2:3dd81ff9eb1f | 72 | } |
RickBadKan | 2:3dd81ff9eb1f | 73 | } |
RickBadKan | 2:3dd81ff9eb1f | 74 | |
RickBadKan | 2:3dd81ff9eb1f | 75 | // Função para zerar a entrada depois da autenticação |
RickBadKan | 2:3dd81ff9eb1f | 76 | void flushSerialBuffer() |
RickBadKan | 2:3dd81ff9eb1f | 77 | { |
RickBadKan | 2:3dd81ff9eb1f | 78 | char char1 = 0; |
RickBadKan | 2:3dd81ff9eb1f | 79 | while (bluetooth.readable()) { |
RickBadKan | 2:3dd81ff9eb1f | 80 | char1 = bluetooth.getc(); |
RickBadKan | 2:3dd81ff9eb1f | 81 | } |
RickBadKan | 2:3dd81ff9eb1f | 82 | } |
RickBadKan | 1:9c4b2fdf3b67 | 83 | |
RickBadKan | 1:9c4b2fdf3b67 | 84 | |
RickBadKan | 1:9c4b2fdf3b67 | 85 | // Função de exibição dos sensores |
RickBadKan | 1:9c4b2fdf3b67 | 86 | void exibirInfo() |
RickBadKan | 1:9c4b2fdf3b67 | 87 | { |
RickBadKan | 1:9c4b2fdf3b67 | 88 | int aux = 1; |
RickBadKan | 1:9c4b2fdf3b67 | 89 | char sair; |
RickBadKan | 2:3dd81ff9eb1f | 90 | bluetooth.printf("Exibindo informacoes. 'S' para sair.\n"); |
RickBadKan | 2:3dd81ff9eb1f | 91 | while (aux && autenticado) { |
RickBadKan | 2:3dd81ff9eb1f | 92 | bluetooth.printf("%2.2f C, %04.2f hPa, Umidade: %3.3f%%\n\n", sensor_t_p.getTemperature(), sensor_t_p.getPressure(), ((1-sensor_u.read()) * 100.0f)/0.6); |
RickBadKan | 2:3dd81ff9eb1f | 93 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 94 | conexaoBluetooth(); |
RickBadKan | 2:3dd81ff9eb1f | 95 | |
RickBadKan | 2:3dd81ff9eb1f | 96 | if (bluetooth.readable()) { |
RickBadKan | 2:3dd81ff9eb1f | 97 | sair = bluetooth.getc(); |
RickBadKan | 2:3dd81ff9eb1f | 98 | if (sair == 'S' || sair == 's') { |
RickBadKan | 2:3dd81ff9eb1f | 99 | bluetooth.printf("Rotina cancelada.\n"); |
RickBadKan | 2:3dd81ff9eb1f | 100 | aux = 0; |
RickBadKan | 2:3dd81ff9eb1f | 101 | exibirMenu(); |
RickBadKan | 2:3dd81ff9eb1f | 102 | continue; |
RickBadKan | 2:3dd81ff9eb1f | 103 | } |
RickBadKan | 2:3dd81ff9eb1f | 104 | } |
RickBadKan | 2:3dd81ff9eb1f | 105 | wait(5.0f); |
RickBadKan | 1:9c4b2fdf3b67 | 106 | } |
RickBadKan | 1:9c4b2fdf3b67 | 107 | } |
RickBadKan | 1:9c4b2fdf3b67 | 108 | |
RickBadKan | 2:3dd81ff9eb1f | 109 | // Função do monitoramento da umidade da terra, para acionar/desativar a bomba |
RickBadKan | 2:3dd81ff9eb1f | 110 | void controleAutomatico() |
RickBadKan | 2:3dd81ff9eb1f | 111 | { |
RickBadKan | 2:3dd81ff9eb1f | 112 | if (!controleManual) { |
RickBadKan | 2:3dd81ff9eb1f | 113 | if (((1-sensor_u.read()) * 100.0f)/0.6 < 20.0) { |
RickBadKan | 2:3dd81ff9eb1f | 114 | bomba.write(0.2f); |
RickBadKan | 2:3dd81ff9eb1f | 115 | } |
RickBadKan | 1:9c4b2fdf3b67 | 116 | |
RickBadKan | 2:3dd81ff9eb1f | 117 | if (((1-sensor_u.read()) * 100.0f)/0.6 > 40.0) { |
RickBadKan | 2:3dd81ff9eb1f | 118 | bomba.write(0.0f); |
RickBadKan | 2:3dd81ff9eb1f | 119 | } |
RickBadKan | 2:3dd81ff9eb1f | 120 | } |
RickBadKan | 2:3dd81ff9eb1f | 121 | } |
RickBadKan | 1:9c4b2fdf3b67 | 122 | |
RickBadKan | 2:3dd81ff9eb1f | 123 | // Programa principal |
RickBadKan | 1:9c4b2fdf3b67 | 124 | int main() |
RickBadKan | 1:9c4b2fdf3b67 | 125 | { |
RickBadKan | 1:9c4b2fdf3b67 | 126 | bomba.period_ms(10); |
RickBadKan | 1:9c4b2fdf3b67 | 127 | bluetooth.baud(9600); |
RickBadKan | 1:9c4b2fdf3b67 | 128 | RFID.PCD_Init(); |
RickBadKan | 1:9c4b2fdf3b67 | 129 | |
RickBadKan | 0:91215b8406ee | 130 | |
RickBadKan | 2:3dd81ff9eb1f | 131 | bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n"); |
RickBadKan | 0:91215b8406ee | 132 | |
RickBadKan | 1:9c4b2fdf3b67 | 133 | while(1) { |
RickBadKan | 2:3dd81ff9eb1f | 134 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 135 | conexaoBluetooth(); |
RickBadKan | 1:9c4b2fdf3b67 | 136 | |
RickBadKan | 1:9c4b2fdf3b67 | 137 | // Programa a ser executado caso esteja autenticado |
RickBadKan | 1:9c4b2fdf3b67 | 138 | if (autenticado) { |
RickBadKan | 2:3dd81ff9eb1f | 139 | exibirMenu(); |
RickBadKan | 0:91215b8406ee | 140 | |
RickBadKan | 2:3dd81ff9eb1f | 141 | while (autenticado) { |
RickBadKan | 2:3dd81ff9eb1f | 142 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 143 | conexaoBluetooth(); |
RickBadKan | 2:3dd81ff9eb1f | 144 | if (bluetooth.readable()) { |
RickBadKan | 2:3dd81ff9eb1f | 145 | |
RickBadKan | 1:9c4b2fdf3b67 | 146 | input = bluetooth.getc(); |
RickBadKan | 1:9c4b2fdf3b67 | 147 | |
RickBadKan | 1:9c4b2fdf3b67 | 148 | switch (input) { |
RickBadKan | 1:9c4b2fdf3b67 | 149 | case 'I': |
RickBadKan | 2:3dd81ff9eb1f | 150 | case 'i': |
RickBadKan | 1:9c4b2fdf3b67 | 151 | exibirInfo(); |
RickBadKan | 1:9c4b2fdf3b67 | 152 | break; |
RickBadKan | 1:9c4b2fdf3b67 | 153 | |
RickBadKan | 1:9c4b2fdf3b67 | 154 | case 'L': |
RickBadKan | 2:3dd81ff9eb1f | 155 | case 'l': |
RickBadKan | 2:3dd81ff9eb1f | 156 | bomba.write(0.2f); |
RickBadKan | 2:3dd81ff9eb1f | 157 | bluetooth.printf("Bomba acionada.\n"); |
RickBadKan | 2:3dd81ff9eb1f | 158 | controleManual = 1; |
RickBadKan | 2:3dd81ff9eb1f | 159 | wait(1.0f); |
RickBadKan | 2:3dd81ff9eb1f | 160 | exibirMenu(); |
RickBadKan | 1:9c4b2fdf3b67 | 161 | break; |
RickBadKan | 1:9c4b2fdf3b67 | 162 | |
RickBadKan | 1:9c4b2fdf3b67 | 163 | case 'D': |
RickBadKan | 2:3dd81ff9eb1f | 164 | case 'd': |
RickBadKan | 1:9c4b2fdf3b67 | 165 | bomba.write(0.0f); |
RickBadKan | 2:3dd81ff9eb1f | 166 | bluetooth.printf("Bomba desativada.\n"); |
RickBadKan | 2:3dd81ff9eb1f | 167 | controleManual = 0; |
RickBadKan | 2:3dd81ff9eb1f | 168 | wait(1.0f); |
RickBadKan | 2:3dd81ff9eb1f | 169 | exibirMenu(); |
RickBadKan | 1:9c4b2fdf3b67 | 170 | break; |
RickBadKan | 0:91215b8406ee | 171 | |
RickBadKan | 1:9c4b2fdf3b67 | 172 | case 'S': |
RickBadKan | 2:3dd81ff9eb1f | 173 | case 's': |
RickBadKan | 1:9c4b2fdf3b67 | 174 | autenticado = 0; |
RickBadKan | 2:3dd81ff9eb1f | 175 | controleManual = 0; |
RickBadKan | 2:3dd81ff9eb1f | 176 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 177 | conexaoBluetooth(); |
RickBadKan | 2:3dd81ff9eb1f | 178 | bluetooth.printf("Desconectado com sucesso.\nPara logar novamente, aproxime o cracha RFID.\n\n"); |
RickBadKan | 1:9c4b2fdf3b67 | 179 | break; |
RickBadKan | 1:9c4b2fdf3b67 | 180 | } |
RickBadKan | 1:9c4b2fdf3b67 | 181 | } |
RickBadKan | 1:9c4b2fdf3b67 | 182 | } |
RickBadKan | 1:9c4b2fdf3b67 | 183 | } |
RickBadKan | 1:9c4b2fdf3b67 | 184 | |
RickBadKan | 1:9c4b2fdf3b67 | 185 | // Procura o card |
RickBadKan | 1:9c4b2fdf3b67 | 186 | if ( ! RFID.PICC_IsNewCardPresent()) { |
RickBadKan | 1:9c4b2fdf3b67 | 187 | wait_ms(500); |
RickBadKan | 1:9c4b2fdf3b67 | 188 | continue; |
RickBadKan | 1:9c4b2fdf3b67 | 189 | } |
RickBadKan | 1:9c4b2fdf3b67 | 190 | |
RickBadKan | 1:9c4b2fdf3b67 | 191 | // Seleciona um dos cards |
RickBadKan | 1:9c4b2fdf3b67 | 192 | if ( ! RFID.PICC_ReadCardSerial()) { |
RickBadKan | 1:9c4b2fdf3b67 | 193 | wait_ms(500); |
RickBadKan | 1:9c4b2fdf3b67 | 194 | continue; |
RickBadKan | 1:9c4b2fdf3b67 | 195 | } |
RickBadKan | 1:9c4b2fdf3b67 | 196 | |
RickBadKan | 1:9c4b2fdf3b67 | 197 | autenticado = 1; |
RickBadKan | 2:3dd81ff9eb1f | 198 | |
RickBadKan | 2:3dd81ff9eb1f | 199 | flushSerialBuffer(); |
RickBadKan | 1:9c4b2fdf3b67 | 200 | |
RickBadKan | 1:9c4b2fdf3b67 | 201 | bluetooth.printf("Card reconhecido, acesso concedido.\n\n"); |
RickBadKan | 1:9c4b2fdf3b67 | 202 | |
RickBadKan | 2:3dd81ff9eb1f | 203 | wait(1.0f); |
RickBadKan | 2:3dd81ff9eb1f | 204 | |
RickBadKan | 1:9c4b2fdf3b67 | 205 | // Imprime Card UID |
RickBadKan | 1:9c4b2fdf3b67 | 206 | bluetooth.printf("Card UID: "); |
RickBadKan | 1:9c4b2fdf3b67 | 207 | for (uint8_t i = 0; i < RFID.uid.size; i++) { |
RickBadKan | 1:9c4b2fdf3b67 | 208 | bluetooth.printf(" %X02", RFID.uid.uidByte[i]); |
RickBadKan | 1:9c4b2fdf3b67 | 209 | } |
RickBadKan | 2:3dd81ff9eb1f | 210 | bluetooth.printf("\n\n---------------------------------------------------------------------------\n"); |
RickBadKan | 2:3dd81ff9eb1f | 211 | controleAutomatico(); |
RickBadKan | 2:3dd81ff9eb1f | 212 | conexaoBluetooth(); |
RickBadKan | 2:3dd81ff9eb1f | 213 | wait(1.0f); |
RickBadKan | 0:91215b8406ee | 214 | } |
RickBadKan | 0:91215b8406ee | 215 | } |