Serial.parseint() arduino

Serial.parseint() arduino

Serial.parseint() arduino

Cadena de parseo de serie de arduino

Desde el vídeo 10 nuestro software muestra el estado del ciclo y la hora actual del día/noche en la pantalla del PC. El siguiente paso es ser capaz de introducir un nuevo valor para el tiempo de ciclo a través del teclado. Por suerte esto se hace fácil … el Arduino tiene varias instrucciones para leer los datos:

En setup() añadimos nuevas instrucciones de impresión para indicar al usuario cómo introducir un nuevo tiempo de ciclo. En loop() añadimos una sentencia if para comprobar si los datos están disponibles y si lo están, los leemos y los imprimimos … eso es todo. Probemos primero esto con la función Serial.read(), que lee un carácter a la vez.

ciclo_tiempo se declara como un int sin signo mientras que Serial.read() nos da un byte … ¿la instrucción ciclo_tiempo = Serial.read(); no nos dará ningún problema como vimos en el vídeo 9? No lo hará, ya que un byte siempre cabe en un int. Si los tipos de datos hubieran sido al revés, entonces sí que podría salir algo mal.

Probemos este sketch. Hey … eso es extraño … cuando introducimos 5, el tiempo de ciclo es 53? ¿Por qué? Bueno … eso es porque los números y los caracteres se representan como bytes utilizando el Código Estándar Americano para el Intercambio de Información, ASCII para abreviar. Puede que no seas consciente, pero todos los años que has estado escribiendo en un PC o en un teléfono inteligente, has estado «hablando» ASCII. La siguiente tabla muestra parte del código. Los números 0-9 están representados por los valores ASCII decimales 48-57.

Serial.parseint(char skipchar)

Estoy escribiendo un programa simple en el trabajo de las puertas lógicas (que está siendo programado en las entradas de arduino se toman utilizando el monitor de serie), no entiendo muy bien el trabajo de parseint y leer he leído numerosos artículos en línea, pero todavía no es claro para mí.

en el código anterior después de serial.available he usado serial.read para leer el valor pero si uso serial.parseint no funciona, de forma similar en cada función de la puerta he usado parseint (sé que devuelve la representación entera de la cadena) y si pongo serial.read no funciona.

parseInt() lee tantos caracteres como pueda antes de que se agote el tiempo de espera o llegue a un carácter que no sea un dígito. Ensamblará esos caracteres ascii en un número y convertirá desde ascii y te devolverá un int real.

read() sólo lee un carácter del buffer serial y lo devuelve (promovido a un int) o -1 si no hay nada que leer. read no convertirá nada de ascii así que si envías un ‘1’ desde el monitor serial leerá 49 (el código ascii para ‘1’).

En tu código estás comparando lo que lees con un valor ascii ya que comparas con ‘1’. Si se convierte en un número por parseInt entonces sería realmente un 1 y no un 49. 1 no es igual a 49 por lo que no funciona.

Arduino serial read char

¿Quizás te cuesta entender la diferencia entre Serial.read() y Serial.parseInt(), y cómo pueden funcionar para ti? ¿Necesitas saber cómo convertir char de varios dígitos a enteros?

Si viste nuestra lección sobre el uso de serial.read(), entonces ya sabes cómo tomar la entrada serial y convertir los caracteres a enteros poniendo todos los bytes entrantes en un array de caracteres. Si quieres aprender ese método, asegúrate de revisar la lección sobre Serial.read().

Ahora bien, si la palabra buffer te confunde, no te preocupes. Puedes pensar en un buffer como un montón de puestos de caballos en un establo. Algunos establos son grandes y tienen un montón de puestos – puedes alojar a un montón de caballos allí, otros establos son bastante pequeños, y sólo tienes espacio para tantos caballos – ¡no puedes aceptar más caballos de los que tienes puestos!

En general, un buffer es un lugar transitorio para el almacenamiento de datos en un programa. Normalmente, recibes datos en un búfer, y luego los lees rápidamente, porque van a llegar más datos y necesitas hacer espacio para ellos. Sin embargo, esta no es una regla rígida.

Arduino en serie

¿Quizás te cuesta entender la diferencia entre Serial.read() y Serial.parseInt(), y cómo pueden funcionar para ti? ¿Necesitas saber cómo convertir char de varios dígitos a enteros?

Si viste nuestra lección sobre el uso de serial.read(), entonces ya sabes cómo tomar la entrada serial y convertir los caracteres a enteros poniendo todos los bytes entrantes en un array de caracteres. Si quieres aprender ese método, asegúrate de ver la lección sobre Serial.read().

Ahora bien, si la palabra buffer te confunde, no te preocupes. Puedes pensar en un buffer como un montón de puestos de caballos en un establo. Algunos establos son grandes y tienen un montón de puestos – puedes alojar a un montón de caballos allí, otros establos son bastante pequeños, y sólo tienes espacio para tantos caballos – ¡no puedes aceptar más caballos de los que tienes puestos!

En general, un buffer es un lugar transitorio para el almacenamiento de datos en un programa. Normalmente, recibes datos en un búfer, y luego los lees rápidamente, porque van a llegar más datos y necesitas hacer espacio para ellos. Sin embargo, esta no es una regla rígida.

Acerca del autor

admin

Ver todos los artículos