Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 |
diff -r 7e80907da2dc -r a88dcc6beb9d main.cpp
--- 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);
}
}