









Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
En este documento se presentan diferentes experimentos relacionados con la programación de interrupciones en Arduino, específicamente en el contexto de Sistemas Digitales y Microcontroladores. El estudiante Julio Jiménez, de la carrera de Ingeniería Automotriz de la Universidad de las Fuerzas Armadas ESPE, realiza una serie de pruebas modificando la instrucción attachInterrupt() y observa el resultado de cada cambio. Además, se incluyen instrucciones para diseñar un cronómetro con botones de inicio-continuar, paro y reset, así como un contador ascendente utilizando la interrupción del Timer1.
Tipo: Ejercicios
1 / 15
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!










UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE-L SISTEMAS DIGITALES Y MICROCONTROLADORES INGENIERIA AUTOMOTRIZ
1_En el programa 1, cambie la instrucción: attachInterrupt(digitalPinToInterrupt(intPin), interrupt, RISING); Cambie RISING por LOW, HIGH, CHANGE, FALLING, respectivamente. Compile para cada caso y observe como opera la interrupción. Explique el resultado para cada caso. CÓDIGO: const int LED1 = 13; const int LED2 = 12; const int IntPin = 2; volatile int state = LOW; void setup () { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(IntPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(IntPin), interrupt, RISING); } void loop() { //LED 2 TITILA - PROGRAMA PRINCIPAL digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1);
digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1); state =! state; digitalWrite(LED1, state); } CIRCUITO Cuando se hace el cambio de RISING por LOW la interrupción se realizará solo cuando el pin en este caso el 2, este solo y únicamente en estado bajo.
volatile int state = LOW; void setup () { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(IntPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(IntPin), interrupt, HIGH); } void loop() { //LED 2 TITILA - PROGRAMA PRINCIPAL digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1); state =! state; digitalWrite(LED1, state);
void loop() { //LED 2 TITILA - PROGRAMA PRINCIPAL digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1); state =! state; digitalWrite(LED1, state); } CIRCUITO
Al utilizar la función CHANGE la interrupción se ejecutará cunado el pin cambie de estados ya sea de alto a bajo o de bajo a alto.
En la instrucción FALLING se observa que la interrupción realizada por el pin 2, cambiara de estado solo cuando pase de alto a bajo.
2. Diseñe el circuito y el programa para realizar un cronómetro con botones de inicio- continuar, paro, reset. Utilizar una interrupción para el reset y otra para parar. #include <LiquidCrystal.h> LiquidCrystal LCD (12, 11, 7, 6, 5, 4); long int mm = 00, ss = 00, ms = 00, ms1 = 0, s1 = 0, m1 = 0; const int intPin0=1; const int intPin1=2; const int intPin2=3; int estado=1; int p1=0; volatile int estado1=0; volatile int estado2=0; void setup() { LCD.begin(16, 2); //Tipo de LCD pinMode(intPin0,INPUT_PULLUP); pinMode(intPin1,INPUT_PULLUP); pinMode(intPin2,INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(intPin1),interrupt,RISING); attachInterrupt(digitalPinToInterrupt(intPin2),interrupt1,RISING); } void loop() { estado=digitalRead(intPin0); if(estado==0) { p1=1; }
LCD.setCursor(4, 1); delay(10); if(p1==1){ if ( ms <= 100) { if (mm <= 9) { LCD.print(m1); } LCD.print(mm); LCD.print(":"); if (ss <= 9) { LCD.print(s1); } LCD.print(ss); LCD.print(":"); if (ms <= 9) { LCD.print(ms1); } LCD.print(ms); ms++; } if (mm == 60) { mm = 0; } if (ms == 60) { ss++; ms = 0; } if (ss == 60 ) { mm++;
3. Utilizando la interrupción del Timer1, diseñe un contador ascendente, que cambie los valores cada 500 ms. No debe haber ningún delay. #include "TimerOne.h" const int decoder[]={64, 121, 36, 48, 25, 18, 3, 120, 0, 24}; int c=0; int P1=1; void setup() { int pin; for(pin=7; pin<=13; pin++) { pinMode(pin, OUTPUT); } pinMode (1,INPUT_PULLUP); Timer1.initialize(300000); Timer1.attachInterrupt(callback); } void callback()
display7(decoder[c]); c++; if(c==10) { c=0; } } void loop(){ P1=digitalRead(1); if (P1==LOW){ c=0; } } void display7(int cant) { digitalWrite(7, bitRead(cant, 0)); digitalWrite(8, bitRead(cant, 1)); digitalWrite(9, bitRead(cant, 2)); digitalWrite(10, bitRead(cant, 3)); digitalWrite(11, bitRead(cant, 4)); digitalWrite(12, bitRead(cant, 5)); digitalWrite(13, bitRead(cant, 6)); }