Hugo's Programs / Mbed 2 deprecated MARCELO_PROJETC_VIDRO_TIMER

Dependencies:   mbed

Committer:
hugocampos
Date:
Sat Feb 13 19:06:47 2021 +0000
Revision:
5:3148a88c41a2
Parent:
4:2aa867a57a02
Vidro

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hugocampos 5:3148a88c41a2 1 /*
hugocampos 5:3148a88c41a2 2 *Autor: Marcelo Costanzo
hugocampos 5:3148a88c41a2 3 *Obejtivo: Controla uma maquina de vidro
hugocampos 5:3148a88c41a2 4 *Status: Funcionando
hugocampos 5:3148a88c41a2 5 *Data: 2019
hugocampos 5:3148a88c41a2 6 */
hugocampos 5:3148a88c41a2 7
mbed_official 0:b5a9e0614efd 8 #include "mbed.h"
mbed_official 0:b5a9e0614efd 9
Marcelocostanzo 2:f1db1a25bf0f 10 #define filtro 10
Marcelocostanzo 2:f1db1a25bf0f 11
hugocampos 4:2aa867a57a02 12 // Usar a nucleo 302 ou 103
Marcelocostanzo 2:f1db1a25bf0f 13 //-----------Pinos de saida (output)---------------
Marcelocostanzo 2:f1db1a25bf0f 14 DigitalOut controlLED(LED2);
Marcelocostanzo 2:f1db1a25bf0f 15 DigitalOut IN1A(D10);
Marcelocostanzo 2:f1db1a25bf0f 16 DigitalOut IN2A(D8);
Marcelocostanzo 2:f1db1a25bf0f 17 DigitalOut EN_A(D9);
Marcelocostanzo 2:f1db1a25bf0f 18
Marcelocostanzo 2:f1db1a25bf0f 19 //----------Pinos de entrada analogica (ADC)------
Marcelocostanzo 2:f1db1a25bf0f 20 AnalogIn SHUNT(A5);
Marcelocostanzo 2:f1db1a25bf0f 21
Marcelocostanzo 2:f1db1a25bf0f 22 //----------Pinos de interrupção externa----------
Marcelocostanzo 2:f1db1a25bf0f 23 InterruptIn UP(D7);
Marcelocostanzo 2:f1db1a25bf0f 24 InterruptIn DOWN(D2);
Marcelocostanzo 2:f1db1a25bf0f 25
Marcelocostanzo 2:f1db1a25bf0f 26 //---------Declaração de timers-------------------
Marcelocostanzo 2:f1db1a25bf0f 27 Timer timer;
Marcelocostanzo 2:f1db1a25bf0f 28
Marcelocostanzo 2:f1db1a25bf0f 29 //---------Declaração de comunicação serial-------
Marcelocostanzo 2:f1db1a25bf0f 30 Serial pc(USBTX, USBRX);
Marcelocostanzo 2:f1db1a25bf0f 31
Marcelocostanzo 2:f1db1a25bf0f 32 //---------Declaração de variaveis----------------
Marcelocostanzo 2:f1db1a25bf0f 33 bool flag = 0;
Marcelocostanzo 2:f1db1a25bf0f 34 float CURRENT[filtro];
Marcelocostanzo 2:f1db1a25bf0f 35 float media = 0;
Marcelocostanzo 2:f1db1a25bf0f 36 int i = 0;
Marcelocostanzo 2:f1db1a25bf0f 37
Marcelocostanzo 2:f1db1a25bf0f 38 //---------Rotina para dar inicio ao processo de debounce-------------
Marcelocostanzo 2:f1db1a25bf0f 39 void bounce()
Marcelocostanzo 2:f1db1a25bf0f 40 {
Marcelocostanzo 2:f1db1a25bf0f 41 timer.start();
Marcelocostanzo 2:f1db1a25bf0f 42 }
Marcelocostanzo 2:f1db1a25bf0f 43
Marcelocostanzo 2:f1db1a25bf0f 44 //---------Rotina para dar fim ao processo de debounce----------------
Marcelocostanzo 2:f1db1a25bf0f 45 void stop_timer()
Marcelocostanzo 2:f1db1a25bf0f 46 {
Marcelocostanzo 2:f1db1a25bf0f 47 timer.stop();
Marcelocostanzo 2:f1db1a25bf0f 48 timer.reset();
Marcelocostanzo 2:f1db1a25bf0f 49 }
Marcelocostanzo 2:f1db1a25bf0f 50
Marcelocostanzo 2:f1db1a25bf0f 51 //-------Rotina para setar os pinos na direção de fechar o vidro-------
Marcelocostanzo 2:f1db1a25bf0f 52 void close()
Marcelocostanzo 2:f1db1a25bf0f 53 {
Marcelocostanzo 2:f1db1a25bf0f 54 IN1A = 0;
Marcelocostanzo 2:f1db1a25bf0f 55 IN2A = 1;
Marcelocostanzo 2:f1db1a25bf0f 56 EN_A = 1;
Marcelocostanzo 2:f1db1a25bf0f 57 }
Marcelocostanzo 2:f1db1a25bf0f 58
Marcelocostanzo 2:f1db1a25bf0f 59 //-------Rotina para setar os pinos na direção de abrir o vidro--------
Marcelocostanzo 2:f1db1a25bf0f 60 void open()
Marcelocostanzo 2:f1db1a25bf0f 61 {
Marcelocostanzo 2:f1db1a25bf0f 62 IN1A = 1;
Marcelocostanzo 2:f1db1a25bf0f 63 IN2A = 0;
Marcelocostanzo 2:f1db1a25bf0f 64 EN_A = 1;
Marcelocostanzo 2:f1db1a25bf0f 65 }
Marcelocostanzo 2:f1db1a25bf0f 66
Marcelocostanzo 2:f1db1a25bf0f 67 //-------Rotina para setar os pinos para parar o vidro--------
Marcelocostanzo 2:f1db1a25bf0f 68 void stop()
Marcelocostanzo 2:f1db1a25bf0f 69 {
Marcelocostanzo 2:f1db1a25bf0f 70 IN1A = 0;
Marcelocostanzo 2:f1db1a25bf0f 71 IN2A = 0;
Marcelocostanzo 2:f1db1a25bf0f 72 EN_A = 0;
Marcelocostanzo 2:f1db1a25bf0f 73 }
mbed_official 0:b5a9e0614efd 74
Marcelocostanzo 2:f1db1a25bf0f 75 int main()
Marcelocostanzo 2:f1db1a25bf0f 76 {
Marcelocostanzo 2:f1db1a25bf0f 77 //----Especificando as bordas das interrupções, e o endereço das rotinas que serão chamadas---
Marcelocostanzo 2:f1db1a25bf0f 78 UP.fall(&bounce);
Marcelocostanzo 2:f1db1a25bf0f 79 DOWN.fall(&bounce);
Marcelocostanzo 2:f1db1a25bf0f 80 UP.rise(&stop_timer);
Marcelocostanzo 2:f1db1a25bf0f 81 DOWN.rise(&stop_timer);
Marcelocostanzo 2:f1db1a25bf0f 82
Marcelocostanzo 2:f1db1a25bf0f 83 //------------debug para saber se o uC iniciou/travou-------------
Marcelocostanzo 2:f1db1a25bf0f 84 pc.printf("\n\riniciando");
Marcelocostanzo 2:f1db1a25bf0f 85 controlLED = 1;
Marcelocostanzo 2:f1db1a25bf0f 86 wait(0.5);
Marcelocostanzo 2:f1db1a25bf0f 87 controlLED = 0;
Marcelocostanzo 2:f1db1a25bf0f 88 stop();
Marcelocostanzo 2:f1db1a25bf0f 89
Marcelocostanzo 2:f1db1a25bf0f 90 while(1)
Marcelocostanzo 2:f1db1a25bf0f 91 {
Marcelocostanzo 2:f1db1a25bf0f 92 //-----bloqueio da variavel i, para que não tenha mais de 10 iterações----
Marcelocostanzo 2:f1db1a25bf0f 93 if(i > filtro - 1)
Marcelocostanzo 2:f1db1a25bf0f 94 {
Marcelocostanzo 2:f1db1a25bf0f 95 i = 0;
Marcelocostanzo 2:f1db1a25bf0f 96 }
Marcelocostanzo 2:f1db1a25bf0f 97
Marcelocostanzo 2:f1db1a25bf0f 98 //----Leitura da corrente e amarzenamento do valor no buffer--------------
Marcelocostanzo 2:f1db1a25bf0f 99 CURRENT[i] = SHUNT.read();
Marcelocostanzo 2:f1db1a25bf0f 100 i++;
Marcelocostanzo 2:f1db1a25bf0f 101
Marcelocostanzo 2:f1db1a25bf0f 102 //----Integração dos valores de corrente, para fazer filtro do tipo "media movel"
Marcelocostanzo 2:f1db1a25bf0f 103 for(int j=0; j<filtro; j++)
Marcelocostanzo 2:f1db1a25bf0f 104 {
Marcelocostanzo 2:f1db1a25bf0f 105 media += CURRENT[j];
Marcelocostanzo 2:f1db1a25bf0f 106 }
Marcelocostanzo 2:f1db1a25bf0f 107
Marcelocostanzo 2:f1db1a25bf0f 108 //------Calculando a media-----------------------------------------------
Marcelocostanzo 2:f1db1a25bf0f 109 media = media / filtro;
Marcelocostanzo 2:f1db1a25bf0f 110
Marcelocostanzo 2:f1db1a25bf0f 111 //------Conversão do valor para a unidade de ampere--------------------
Marcelocostanzo 2:f1db1a25bf0f 112 media = media * 3.0f;
Marcelocostanzo 2:f1db1a25bf0f 113
Marcelocostanzo 2:f1db1a25bf0f 114 //------Multiplicador do valor por conta do shunt de 0R1--------------------
Marcelocostanzo 2:f1db1a25bf0f 115 //media = media * 10;
Marcelocostanzo 2:f1db1a25bf0f 116
Marcelocostanzo 2:f1db1a25bf0f 117 //-----Condição que tenha apertado o botão rapidamente----------------
Marcelocostanzo 2:f1db1a25bf0f 118 //clique rapido, para subir/descer o vidro por uma curta distancia
Marcelocostanzo 2:f1db1a25bf0f 119 if((timer.read() > 0.1f) && (timer.read() < 0.6f))
Marcelocostanzo 2:f1db1a25bf0f 120 {
Marcelocostanzo 2:f1db1a25bf0f 121 if(DOWN == 0)
Marcelocostanzo 2:f1db1a25bf0f 122 {
Marcelocostanzo 2:f1db1a25bf0f 123 pc.printf("\n\rdown rapido");
Marcelocostanzo 2:f1db1a25bf0f 124 open();
Marcelocostanzo 2:f1db1a25bf0f 125 wait(0.6f);
Marcelocostanzo 2:f1db1a25bf0f 126 if(DOWN == 1)//se soltou o botão, comanda a parada
Marcelocostanzo 2:f1db1a25bf0f 127 {
Marcelocostanzo 2:f1db1a25bf0f 128 stop();
Marcelocostanzo 2:f1db1a25bf0f 129 }
Marcelocostanzo 2:f1db1a25bf0f 130
Marcelocostanzo 2:f1db1a25bf0f 131 }
Marcelocostanzo 2:f1db1a25bf0f 132
Marcelocostanzo 2:f1db1a25bf0f 133 if(UP == 0)
Marcelocostanzo 2:f1db1a25bf0f 134 {
Marcelocostanzo 2:f1db1a25bf0f 135 pc.printf("\n\rup rapido");
Marcelocostanzo 2:f1db1a25bf0f 136 close();
Marcelocostanzo 2:f1db1a25bf0f 137 wait(0.6f);
Marcelocostanzo 2:f1db1a25bf0f 138 if(UP == 1)//se soltou o botão, comanda a parada
Marcelocostanzo 2:f1db1a25bf0f 139 {
Marcelocostanzo 2:f1db1a25bf0f 140 stop();
Marcelocostanzo 2:f1db1a25bf0f 141 }
Marcelocostanzo 2:f1db1a25bf0f 142
Marcelocostanzo 2:f1db1a25bf0f 143 }
Marcelocostanzo 2:f1db1a25bf0f 144 }
Marcelocostanzo 2:f1db1a25bf0f 145
Marcelocostanzo 2:f1db1a25bf0f 146 //-----Condição que tenha apertado o botão por mais de um segundo----------------
Marcelocostanzo 2:f1db1a25bf0f 147 //clique lento, para subir/descer o vidro por todo o trajeto
Marcelocostanzo 2:f1db1a25bf0f 148 if(timer.read() > 1.0f)
Marcelocostanzo 2:f1db1a25bf0f 149 {
Marcelocostanzo 2:f1db1a25bf0f 150 if(DOWN == 0)
Marcelocostanzo 2:f1db1a25bf0f 151 {
Marcelocostanzo 2:f1db1a25bf0f 152 pc.printf("\n\rdown lento");
Marcelocostanzo 2:f1db1a25bf0f 153 open();
Marcelocostanzo 2:f1db1a25bf0f 154 }
Marcelocostanzo 2:f1db1a25bf0f 155
Marcelocostanzo 2:f1db1a25bf0f 156 if(UP == 0)
Marcelocostanzo 2:f1db1a25bf0f 157 {
Marcelocostanzo 2:f1db1a25bf0f 158 pc.printf("\n\rup lento");
Marcelocostanzo 2:f1db1a25bf0f 159 close();
Marcelocostanzo 2:f1db1a25bf0f 160 }
Marcelocostanzo 2:f1db1a25bf0f 161 }
Marcelocostanzo 2:f1db1a25bf0f 162 //wait(0.1);
Marcelocostanzo 2:f1db1a25bf0f 163 //pc.printf("\n\rCorrente de %f Amperes", media);
Marcelocostanzo 2:f1db1a25bf0f 164 //----Rotina para parar o vidro caso a corrente suba, é a rotina que será fim-de-curso e sistema anti-esmagamento------
Marcelocostanzo 2:f1db1a25bf0f 165 if(media > 1.0f)
Marcelocostanzo 2:f1db1a25bf0f 166 {
Marcelocostanzo 2:f1db1a25bf0f 167 wait(0.3);
Marcelocostanzo 2:f1db1a25bf0f 168 if(media > 1.0f)
Marcelocostanzo 2:f1db1a25bf0f 169 {
Marcelocostanzo 2:f1db1a25bf0f 170 stop();
Marcelocostanzo 2:f1db1a25bf0f 171 pc.printf("\n\rCORTE");
Marcelocostanzo 2:f1db1a25bf0f 172 }
Marcelocostanzo 2:f1db1a25bf0f 173 }
mbed_official 0:b5a9e0614efd 174 }
mbed_official 0:b5a9e0614efd 175 }