// Se dispone de una señal de onda cuadrada conectada a una entrada digital.
//Esta señal proviene de un sensor que detecta el paso de unas cjas por una cinta trasportadora.
//La señal permanece a nivel alto durante menos de 1 s y la caja es pequeña, si es durante más de 1 s la caja es grande.
//Se pide implmemetar el codigo que detecte el tamaño de la caja
#define sensor 14
#define led_big 17
#define led_small 16
volatile bool button_interrupted = false;
volatile bool button_pressed = false;
volatile bool part_big = false;
hw_timer_t *timer1 = NULL;
volatile bool led_on = false;
volatile bool timer1_interrupted = false;
void IRAM_ATTR button_ISR() {
button_interrupted = true;
button_pressed = !button_pressed;
}
void IRAM_ATTR timer_sensor() {
timer1_interrupted = true;
}
void setup() {
pinMode(sensor, INPUT_PULLUP);
pinMode(led_big, OUTPUT);
pinMode(led_small, OUTPUT);
attachInterrupt(digitalPinToInterrupt(sensor), button_ISR, CHANGE);
timer1 = timerBegin(0, 80, true); // 80 prescaler (1 tick = 1 microsegundo)
timerAttachInterrupt(timer1, &timer_sensor, true);
timerAlarmWrite(timer1, 1000000, false); // Salta cada 1s
Serial.begin(115200);
}
void loop() {
if (button_interrupted) {
button_interrupted = false;
if (button_pressed) {
part_big = false;
timerRestart(timer1);
timerAlarmEnable(timer1);
Serial.println("Presionado");
}
else {
timerAlarmDisable(timer1); // Desactiva el temporizador
if (part_big) {
digitalWrite(led_big, HIGH);
digitalWrite(led_small, LOW);
Serial.println("Es grande");
}
else {
digitalWrite(led_small, HIGH);
digitalWrite(led_big, LOW);
Serial.println("Es pequeña");
}
}
}
if (timer1_interrupted) {
timer1_interrupted = false;
part_big = true;
Serial.println("Entra");
}
delay(10);
}