Lucas Fontenla
/
VidroEletrico
Código vidro elétrico - eletrônica embarcada
Revision 1:a88dcc6beb9d, committed 2019-05-06
- Comitter:
- lucasfontenla
- Date:
- Mon May 06 21:12:43 2019 +0000
- Parent:
- 0:7e80907da2dc
- Commit message:
- Final
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon May 06 20:28:39 2019 +0000 +++ b/main.cpp Mon May 06 21:12:43 2019 +0000 @@ -1,19 +1,26 @@ #include "mbed.h" +// estabelece a comunicação serial com o PC para debug Serial pc(USBTX, USBRX); +// inicializa os botões como interrupções InterruptIn botao_SW1(D2); InterruptIn botao_SW2(D7); +// foram usados timers para fazer o debounce no click dos botões Timer debounceSW1Fall; Timer debounceSW2Fall; Timer debounceSW1Rise; Timer debounceSW2Rise; + +// o timer de avanço serve para a função de acionamento automático do vidro Timer avanco; +// leitura do shunt de corrente para identificar o esmagamento AnalogIn Shunt(A5); float Corrente; +// as saídas servem para acionar o motor do vidro na direção especificada DigitalOut saida_IN1(D10); DigitalOut saida_IN2(D8); DigitalOut saida_EN(D9); @@ -23,6 +30,9 @@ bool IN1 = 0; bool IN2 = 0; +// as funções abaixo estabelecem o comportamento do programa ao serem identificadas as interrupções. +// em linhas gerais, é feito o debounce através delas, e alterados os valores de variáveis que +// identificam a ação do usuário. void DSW1Fall(){ if (debounceSW1Fall.read_ms() > 200) { @@ -49,6 +59,7 @@ avanco.stop(); avanco.reset(); } + // a função avanço mantém a variável verdadeira sem a necessidade do click no botão else if(avanco.read_ms() < 500){ SW1 = 1; } @@ -66,6 +77,7 @@ } int main() { + // attach das funções de debounce debounceSW1Fall.start(); debounceSW2Fall.start(); debounceSW1Rise.start(); @@ -78,8 +90,11 @@ while(1){ + // aquisita o valor de corrente do motor Corrente = 3.3f*Shunt; + // se a corrente observada for maior que o limite estabelecido, + // recua por 200ms, suficiente para evitar o esmagamento if (Corrente > 0.7f){ if (IN1 && !IN2){ saida_IN1 = IN2; @@ -97,7 +112,8 @@ SW2 = 1; wait_ms(1000); } - + + // se a chave 1 for idntificada, o motor recua if (SW1 == 0){ IN1 = 1; IN2 = 0; saida_EN = 1; @@ -106,6 +122,7 @@ wait(0.01); } + // se a chave 2 for identificada, o motor avança else if (SW2 == 0){ IN1 = 0; IN2 = 1; saida_EN = 1; @@ -113,6 +130,7 @@ saida_IN2 = IN2; wait(0.01); } + // caso nenhuma ação seja tomada, nada é movimentado else { IN1 = 0; IN2 = 0; saida_EN = 0; @@ -120,7 +138,6 @@ saida_IN2 = IN2; wait(0.01); } - wait(0.01); - pc.printf("Timer: %.2f s \n\r", avanco.read()); + wait(0.01); } }