les vencimos · offline
L25. Serial: ver qué hace la placa
Maestro
Hasta ahora el único testigo era el LED. Serial es un hilo de texto hacia el ordenador. La placa escribe un número y tú lo lees. Hace falta arrancar los dos lados a la misma velocidad. Aquí usamos 9600. El monitor donde se lee vive en el entorno, y el detalle de abrirlo está en Software. El sketch, en cambio, es de esta lección.
Serial.begin(9600) va en setup. Sin esa línea, println no tiene camino. Serial.println(valor) manda el número y baja de renglón. No lo pongas en un loop sin ninguna espera si vas a inundar: mil líneas por segundo no se leen. Un delay corto, o mejor más adelante millis, deja el texto a ritmo humano.
El ejemplo lee A0, el potenciómetro de la lección 16, y lo escribe. Ahora sí ves el 512 que antes solo imaginabas. Gira y mira si el número sube. Si se queda en 0, el cursor no llega a A0 o falta masa. Si se queda en 1023, estás pegado a 5V. Eso es depurar con datos, no con fe.
El Uno usa los pines 0 y 1 para ese canal. Mientras hablas por USB, no pongas un botón en el 0 o en el 1: la frase y el botón se pisan. Si la carga del programa falla a medias, quita lo que haya en 0 y 1 y prueba otra vez.
La velocidad tiene que coincidir. Placa a 9600 y monitor a 115200 es texto basura, no un sensor loco. Cuando veas símbolos, iguala los dos números antes de tocar el cable.
Montaje
Pines de esta lección
Por qué
Serial.begin(9600) abre la conversación a 9600 bits por segundo. El monitor del entorno tiene que estar en el mismo número. Si el monitor está a 115200, los dígitos salen ilegibles y el sensor parece loco. No lo está. Están hablando a velocidades distintas.
En el Uno, esa conversación usa los pines 0 y 1, aunque tú no los nombres. RX y TX van al chip del USB. Un pulsador en el 0 mientras imprimes hace que la carga del programa falle o que salgan caracteres fantasma. Durante esta lección, 0 y 1 se quedan vacíos. El botón, si lo tienes de antes, sigue en el 2.
println del analogRead manda el número y un salto de línea. delay(200) deja leerlo. Sin el delay, el monitor se llena tan rápido que no ves el giro del potenciómetro. Es un delay de lectura humana, no de medida. La medida es instantánea al lado.
El cable USB no se reparte. Cierra otros programas que se hayan quedado el puerto. Si la carga se queda a medias, cierra el monitor, carga, y vuelve a abrirlo. Dos dueños del mismo puerto es un fallo clásico y no se arregla cambiando A0.
Práctica
- Quita cualquier cable de los pines 0 y 1.
- Deja el potenciómetro en A0, como en su lección, o el LDR si es lo que tienes montado.
- Carga el sketch de Serial.begin(9600) y println.
- Abre el monitor y pon 9600. Gira o tapa. Los números tienen que moverse.
- Cambia el monitor a otra velocidad, mira la basura, y vuelve a 9600. Así reconoces el fallo.
- Anota un número a la luz y otro a oscuras, o a cada extremo del potenciómetro. Eso es calibrar con ojos de verdad.
- No dejes un pulsador nuevo en el pin 0 porque te sobraba el agujero.
Anota el montaje
Escribe qué cable va a qué pin, o qué has entendido del paso. Se guarda en este aparato.
Ejemplos resueltos
Números que no son números
El monitor está a 115200. Se ven símbolos. Se culpa al potenciómetro y se recalibra un umbral imposible.
Se igualan las dos velocidades a 9600. Los símbolos vuelven a ser enteros entre 0 y 1023. El umbral se elige después, con números buenos.
Ya no carga el sketch
Un cable quedó en el pin 0 desde una prueba. El ordenador y el cable se pisan al intentar hablar.
Se saca el cable del 0 y del 1. Se carga otra vez. El sensor sigue en A0, que no estorba al USB.
En la mesa
Abre el monitor, pon 9600, gira o tapa, y lee un número en voz alta. Tiene que estar entre 0 y 1023. Si ves símbolos, no gires el potenciómetro: mira la velocidad. Iguala, y solo entonces vuelve a girar. Anota el número de un extremo y el del otro. Esos dos números valen más que el umbral heredado de una lección anterior.
Intenta cargar un sketch con el monitor abierto si tu entorno se queja. Cierra el monitor, carga, ábrelo. Aprende esa secuencia ahora, con un programa de una línea, no el día que el proyecto tenga diez archivos y creas que se rompió el chip.
Mira los pines 0 y 1 vacíos antes de dar la lección por cerrada. Un cable olvidado ahí explica el siguiente no carga. Sácalo aunque parezca que no molesta.
Sketch
void setup() {
Serial.begin(9600);
}
void loop() {
int valor = analogRead(A0);
Serial.println(valor);
delay(200);
}
Ejercicio
Con el potenciómetro en A0, sube el sketch y abre el monitor a 9600. Anota el número con el giro a un lado, al centro y al otro. Esos tres números son tu calibración de hoy.
Autoevaluación
1. ¿Qué línea abre el canal, y a qué velocidad va este curso?
Serial.begin(9600). A 9600.
2. ¿Por qué no conviene usar los pines 0 y 1 a la vez que Serial?
Porque son el canal hacia el ordenador. El botón y el texto se estorban.
3. Si ves símbolos en vez de números, ¿qué miras primero?
Que la placa y el monitor estén a la misma velocidad.