arduino IOException

2

Soy un principiante absoluto en todo lo relacionado con arduino y estoy intentando practicar la lectura del estado de un botón cada vez que lo presiono ... pero sigo recibiendo una excepción IOException.

Mi código es el siguiente:

int ledPin;
int button;
int buttonVal;

void setup(){
  button = 7;
  ledPin = 6;
  Serial.begin(9600);
}

void loop(){
  buttonVal =  digitalRead(button);
    Serial.println("...CHECKING : " + buttonVal);
}

El código solo funciona parcialmente. Imprime ..CHECKING: hasta que realmente presione el botón y se produce el bloqueo con el siguiente mensaje: Error dentro de Serial.serialEvent () java.io.IOException: error de entrada / salida en estado nativo disponible

Por favor ayuda, estoy muy estancado

    
pregunta sisko

2 respuestas

2

El problema es que no puedes simplemente "agregar" a la cadena mientras lo haces. No tengo tiempo para escribir una respuesta completa ahora mismo, pero intente esto en lugar de su única línea Serial.println:

Serial.print("...CHECKING: ");
Serial.println(buttonVal, DEC);

Esto debería imprimir una tonelada completa de "... CHECKING: 0" y "... CHECKING: 1" líneas dependiendo del estado del botón.

Si desea que solo imprima "comprobación" y luego espere hasta que se presione el botón, puede intentar esto:

void loop() {
    Serial.print("Waiting for button press... ");
    do {
       buttonVal = digitalRead(button);
    } while (buttonVal == 0);
  Serial.println("button pressed!");
    
respondido por el exscape
0

buttonVal no será un carácter imprimible; es probable que sea 0x00 cuando no se presiona y tal vez algo como 0x01 cuando lo es. Esto no se puede mostrar como texto, por lo que Java lo intentará. Prueba esto:

  

Serial.println ("... CHECKING:" + (buttonVal)? "True": "False")

El bit en el extremo allí con el formato ()? () :() se denomina operador ternario. Funciona así: si buttonVal se evalúa como un valor booleano: si es cero, eso equivale a FALSO, si al menos un bit es '1' será VERDADERO. Si es falso, devuelve el texto "Falso" (o lo que sea después de :) y se mostrará. Si es algo más, se mostrará Verdadero (o lo que sea anterior a :).

Edit: Hmm, bueno, si eso no funciona, comencemos a descifrar las cosas que están equivocadas con tu código. Lo primero que puedo ver es que simplemente no repasaría la impresión en serie una y otra vez: ponía un retraso después de la impresión en serie. No hay necesidad de imprimirlo en cada bucle y realmente romperá el procesador mientras básicamente no hace nada. Agregue una espera de 10 ms o menos después de la instrucción de impresión en serie. Puede que no sea la causa del problema, pero ciertamente no está bien. A veces, múltiples problemas pueden agruparse y causar múltiples problemas que parecen un gran problema en lugar de varios pequeños. Lo mejor es comenzar a eliminar las fuentes de error y ver dónde te lleva.

    
respondido por el AngryEE

Lea otras preguntas en las etiquetas