Código vidro elétrico - eletrônica embarcada

Dependencies:   mbed

Files at this revision

API Documentation at this revision

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);
     }
 }