Marcelo Rondan
/
TP1_Punto1
Rondan Sivilotti. Tp1 Punto 1
main.cpp@0:0f9bd78f7f40, 2018-05-23 (annotated)
- Committer:
- MarceRondan
- Date:
- Wed May 23 11:27:52 2018 +0000
- Revision:
- 0:0f9bd78f7f40
Tp1 Punto1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |