Hugo's Programs / Mbed 2 deprecated MARCELO_PROJETC_VIDRO_TIMER

Dependencies:   mbed

Committer:
Marcelocostanzo
Date:
Thu Feb 28 11:32:57 2019 +0000
Revision:
2:f1db1a25bf0f
Parent:
0:b5a9e0614efd
Child:
4:2aa867a57a02
Vidro eletrico final

Who changed what in which revision?

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