Rondan Sivilotti. Tp1 Punto 1

Dependencies:   mbed

Committer:
MarceRondan
Date:
Wed May 23 11:27:52 2018 +0000
Revision:
0:0f9bd78f7f40
Tp1 Punto1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MarceRondan 0:0f9bd78f7f40 1 #include "mbed.h"
MarceRondan 0:0f9bd78f7f40 2
MarceRondan 0:0f9bd78f7f40 3 enum{
MarceRondan 0:0f9bd78f7f40 4 led_permoff,
MarceRondan 0:0f9bd78f7f40 5 blink,
MarceRondan 0:0f9bd78f7f40 6 };
MarceRondan 0:0f9bd78f7f40 7 InterruptIn int_puls_start(PTD2);
MarceRondan 0:0f9bd78f7f40 8 DigitalOut led (LED1);
MarceRondan 0:0f9bd78f7f40 9 //defino funciones
MarceRondan 0:0f9bd78f7f40 10 void timer_antirrebote(void);
MarceRondan 0:0f9bd78f7f40 11 void detect(void);
MarceRondan 0:0f9bd78f7f40 12 void blinker(void);
MarceRondan 0:0f9bd78f7f40 13 //defino variables
MarceRondan 0:0f9bd78f7f40 14 unsigned int puls=0,end_cont=0;//end_cont es la variable que indica la finalizacion del contador, puls es la variable que simula un pulsador con retencion
MarceRondan 0:0f9bd78f7f40 15 unsigned int cont_antirrebote;
MarceRondan 0:0f9bd78f7f40 16 unsigned char state;
MarceRondan 0:0f9bd78f7f40 17 unsigned int cont_blink;
MarceRondan 0:0f9bd78f7f40 18 Ticker tim;
MarceRondan 0:0f9bd78f7f40 19
MarceRondan 0:0f9bd78f7f40 20
MarceRondan 0:0f9bd78f7f40 21 int main() {
MarceRondan 0:0f9bd78f7f40 22 tim.attach(&timer_antirrebote,0.001);//configuro timer a 1ms
MarceRondan 0:0f9bd78f7f40 23 int_puls_start.fall(&detect);//activo interrupcion por flanco descendente
MarceRondan 0:0f9bd78f7f40 24
MarceRondan 0:0f9bd78f7f40 25 while(1) {
MarceRondan 0:0f9bd78f7f40 26 blinker();
MarceRondan 0:0f9bd78f7f40 27 }
MarceRondan 0:0f9bd78f7f40 28 }
MarceRondan 0:0f9bd78f7f40 29
MarceRondan 0:0f9bd78f7f40 30 void blinker(){
MarceRondan 0:0f9bd78f7f40 31 if (end_cont){//se ejecuta si termina el contador del antirrebote
MarceRondan 0:0f9bd78f7f40 32 end_cont=0;
MarceRondan 0:0f9bd78f7f40 33 if(int_puls_start.read()==0){//si el pulsador se apreto se cambia la variable a
MarceRondan 0:0f9bd78f7f40 34 if(puls==0)
MarceRondan 0:0f9bd78f7f40 35 puls=1;
MarceRondan 0:0f9bd78f7f40 36 else
MarceRondan 0:0f9bd78f7f40 37 puls=0;
MarceRondan 0:0f9bd78f7f40 38 }
MarceRondan 0:0f9bd78f7f40 39 }
MarceRondan 0:0f9bd78f7f40 40 switch(state){
MarceRondan 0:0f9bd78f7f40 41 case led_permoff:
MarceRondan 0:0f9bd78f7f40 42 led=1;//led apagado permanentemente
MarceRondan 0:0f9bd78f7f40 43 if(puls==1)
MarceRondan 0:0f9bd78f7f40 44 state=blink;
MarceRondan 0:0f9bd78f7f40 45 break;
MarceRondan 0:0f9bd78f7f40 46
MarceRondan 0:0f9bd78f7f40 47 case blink:
MarceRondan 0:0f9bd78f7f40 48 if(puls==0)
MarceRondan 0:0f9bd78f7f40 49 state=led_permoff;
MarceRondan 0:0f9bd78f7f40 50 if (cont_blink==0){//se produce el blinkeo del led
MarceRondan 0:0f9bd78f7f40 51 if(led==0)
MarceRondan 0:0f9bd78f7f40 52 led=1;
MarceRondan 0:0f9bd78f7f40 53 else
MarceRondan 0:0f9bd78f7f40 54 led=0;
MarceRondan 0:0f9bd78f7f40 55 cont_blink=500;
MarceRondan 0:0f9bd78f7f40 56 }
MarceRondan 0:0f9bd78f7f40 57 break;
MarceRondan 0:0f9bd78f7f40 58 }
MarceRondan 0:0f9bd78f7f40 59 }
MarceRondan 0:0f9bd78f7f40 60
MarceRondan 0:0f9bd78f7f40 61 void detect(){//al detectarse la interrupcion se inicia el contador del antirrebote
MarceRondan 0:0f9bd78f7f40 62 if (cont_antirrebote==0 )
MarceRondan 0:0f9bd78f7f40 63 cont_antirrebote=20;
MarceRondan 0:0f9bd78f7f40 64
MarceRondan 0:0f9bd78f7f40 65 }
MarceRondan 0:0f9bd78f7f40 66 void timer_antirrebote(){//funcion de timer
MarceRondan 0:0f9bd78f7f40 67 if (cont_antirrebote>0){
MarceRondan 0:0f9bd78f7f40 68 cont_antirrebote--;
MarceRondan 0:0f9bd78f7f40 69 if(!cont_antirrebote)end_cont=1;
MarceRondan 0:0f9bd78f7f40 70 }
MarceRondan 0:0f9bd78f7f40 71 if (cont_blink>0)
MarceRondan 0:0f9bd78f7f40 72 cont_blink--;
MarceRondan 0:0f9bd78f7f40 73
MarceRondan 0:0f9bd78f7f40 74 }