Switch case dentro de una Interrupcion, Duda rápida


mi pregunta es muy simple pero esque no le entiendo muy bien las interrupciones, en este código, al usar la interrupción puedo insertarle la variable con el teclado, y meterle 3 digitos, eg 105 o solo me va dejar poner 1 y se va salir, o voy tener que usar la interrupción 3 veces?




code: [select]
#include<keypad.h>
#include <dht.h>
#define dhtpin 2
#define dhttype dht11
dht dht(dhtpin, dhttype); //se inicia una variable que será usada por arduino para comunicarse con el sensor
int boton = 0;
int x = 0;
int cantidad[2];
int valor = 0;
const byte rows = 4;
const byte cols = 3;
int cant2=0;
int motor=0;
int vel=0;
char keys[rows][cols] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'},
};

byte rowpins[rows] = {8, 7, 6, 5};
byte colpins[cols] = {4, 3, 2}; 
keypad keypad = keypad(makekeymap(keys), rowpins, colpins, rows, cols);

void setup() {
  serial.begin(9600);
  keypad.setholdtime(1000); // default 1000ms
  keypad.setdebouncetime(50); // default 50ms
  dht.begin(); //se inicia el sensor
  attachinterrupt(0,leerbotones,rising);
 
}

void leerbotones(){
  char tecla = keypad.getkey();
  {
 
  if(tecla!= no_key){
   
   
   
    switch(tecla)
    {
     
    case '0':
    cantidad[x] = 0;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '1':
    cantidad[x] = 1;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '2':
    cantidad[x] = 2;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '3':
    cantidad[x] = 3;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '4':
    cantidad[x]= 4;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '5':
    cantidad[x] = 5;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '6':
    cantidad[x] = 6;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '7':
    cantidad[x] = 7;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '8':
    cantidad[x] = 8;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '9':
    cantidad[x] = 9;
    x++;
    serial.print(cantidad[x]);
    break;
   
    case '*':
    cantidad[0] = 0;
    cantidad[1] = 0;
    cantidad[2] = 0;
    serial.print(cantidad[2]);
    x=0;
    break;
   
    }
   }
} while( tecla != '#');

for (x=2;x>=0;x--)
{
 cant2=cant2+cantidad[x]*pow(10,x);


}

void loop() {
  float h = dht.readhumidity(); //se lee la humedad
float t = dht.readtemperature(); //se lee la temperatura
//se imprimen las variables
serial.println("humedad: ");
serial.println(h);
serial.println("temperatura: ");
serial.println(t);
delay(2000); //se espera 2 segundos para seguir leyendo //datos
 
  if (x>2)
  x=0;
  vel=(cant2-t)*1.62;
 
 if (cant2<= t && cant2 > 0)
 { analogwrite (motor,vel);
 }
 
}



hola.
tal como tienes tu código no creo que funcione bien porque, precisamente, lo que debería hacer una función de interrupción es algo muy rápido en respuesta una pulsación de tecla y salir enseguida.
es decir, deberías "usar la interrupción tres veces" en tu caso. sin embargo en tu código, tras leer la tecla que se supone que provoca el lanzamiento de la interrupción, inicias un loop en espera de la tecla de finalización, con lo que no estás cumpliendo con la premisa de retornar enseguida de la interrupciòn.


Arduino Forum > International > Español > Proyectos (Moderators: surbyte, Hector_A) > Switch case dentro de una Interrupcion, Duda rápida


arduino

Comments