4
1 Conmutador usando interrupción externa 0 y antirebote por hardware: int sw2 = 2; // interrupción externa 0 int led9 = 9; int led10 = 10; void setup() { pinMode(sw2,INPUT); pinMode(led9,OUTPUT); pinMode(led10,OUTPUT); attachInterrupt(0,isr,RISING); // (Nro. de interrupción, función isr, modo) } void loop(void) { digitalWrite(led9,!digitalRead(led9)); // led rojo delay(1000); } void isr() { digitalWrite(led10,!digitalRead(led10)); // led verde }

Conmutador usando interrupción externa 0 y antirebote por hardware

Embed Size (px)

Citation preview

Page 1: Conmutador usando interrupción externa 0 y antirebote por hardware

1

Conmutador usando interrupción externa 0 y antirebote por hardware:

int sw2 = 2; // interrupción externa 0int led9 = 9;int led10 = 10;

void setup(){ pinMode(sw2,INPUT); pinMode(led9,OUTPUT); pinMode(led10,OUTPUT); attachInterrupt(0,isr,RISING); // (Nro. de interrupción, función isr, modo)}

void loop(void){ digitalWrite(led9,!digitalRead(led9)); // led rojo delay(1000);}

void isr(){ digitalWrite(led10,!digitalRead(led10)); // led verde}

Page 2: Conmutador usando interrupción externa 0 y antirebote por hardware

2

Contador ascendente – descendente, con interrupción externa y nmultiplexación:

/*----------------------------------------------------------------------*//* CONTA_ASC_DESC_EEPROM_MULTIPLEX_INT_EXT.ino *//* Multiplexa y cuenta con interrupcion por PD2/INT0 *//* Transistores NPN en PB0 unidades, y PB1 decenas *//* Display de catodo comun PD7=g ... PD3=c, PD1=b, PD0=a *//*----------------------------------------------------------------------*/

#include <EEPROM.h>

signed int uni=0, dec=0;int LED[10]={0x7B, 0x0A, 0xB3, 0x9B, 0xCA, 0xD9, 0xF9, 0x0B, 0xFB, 0xDB};

void setup(){ DDRD = B11111011; // PD1 entrada, el resto salidas DDRB = B00000011; // PB0 y PB1 salidas attachInterrupt(0,isr,FALLING); // Nro. de interrupcion, funcion isr, modo}

void loop(){ if ((EEPROM.read(0)>>9) || (EEPROM.read(1)>>9)) { EEPROM.write(0,0); EEPROM.write(1,0); } else uni=EEPROM.read(0); dec=EEPROM.read(1);

Page 3: Conmutador usando interrupción externa 0 y antirebote por hardware

3

while(1) { PORTD = (LED[uni]); digitalWrite(8,1); delayMicroseconds(100); digitalWrite(8,0); PORTD = (LED[dec]); digitalWrite(9,1); delayMicroseconds(100); digitalWrite(9,0); }}

void isr(){ if(digitalRead(10)==0) // cerrado, descendente { uni--; if(uni<0) { uni=9; dec--; if(dec<0) dec=9; } } else // abierto, asscendente { uni++; if(uni>9) { uni=0; dec++; if(dec>9) dec=0; } } EEPROM.write(0,uni); EEPROM.write(1,dec);}

Page 4: Conmutador usando interrupción externa 0 y antirebote por hardware

4