Guía de iniciación a Arduino (10 / 15 paso)

Paso 10: Comunicación con el ordenador

Hasta este punto, hemos utilizado la conexión USB para cargar nuevos programas en el Arduino. Pero también podemos usar la conexión para enviar datos desde y hacia el ordenador.

Algunas placas de Arduino como el Leonardo tienen un microcontrolador que se encarga de la comunicación USB por su propio, pero mayoría de las placas tiene un microcontrolador segundo, más pequeño, exclusivamente para la comunicación. En el Arduino Uno, este es el pequeño cuadrado negro entre el conector USB y el LED de TX-RX. Se realiza la comunicación entre este chip y el microcontrolador principal mediante una conexión en serie, luego el segundo chip dice el ordenador "Hey, yo soy un puerto serie" y luego simplemente convierte los datos en serie de la viruta principal a USB en formato y convierte los mensajes de la computadora en serie para el microcontrolador principal.

Serial significa que bits se envían sobre el mismo cable, uno tras otro, mientras que las conexiones paralelo envían 8 bits o más simultáneamente, por separados los cables (como el puerto de impresora paralelo grande en la parte posterior de algunos equipos más antiguos).

Arduino utiliza dos líneas serie: uno de Arduino para el chip USB, la línea de transmisión (TX) y una línea desde el chip USB para Arduino, la línea de recepción (RX). Estas letras se escriben junto al pin 0 y 1. Esto significa que estos pernos están en uso cuando tienes la conexión al equipo que ejecuta, por lo que no puede usarlos para LEDs o botones etc.. Si dejas la comunicación otra vez, puede sólo utilizar los pins de I/O como normales.
Si desea conectar el Arduino a otro dispositivo mediante comunicación serial, también debe utilizar estos dos pines.

Envío de entradas al ordenador

Abra el ejemplo serialButton y subirlo.
La configuración de la placa es la misma que en el paso anterior.
A continuación, abra el serial monitor: Herramientas > Serial Monitor, haga clic en la lupa en la esquina superior derecha o golpe CTRL + SHFT + M. hacen su desplazamiento automático está activado, y la velocidad en baudios se ajusta a 9600.

Usted verá un montón de unos. Ahora presione el pulsador conectado al pin 3 y verá ceros. Esto es sólo la entrada de materia prima del perno.

Ahora abrir el serial plotter: Herramientas > Plotter serie o CTRL + mayúsculas + L. Esto diagrama los valores en un gráfico.

Veamos el código:

En la configuración, hemos añadido un nuevo comando: Serial.begin(9600). Esto es sólo para iniciar la comunicación y la 9600 es la velocidad en baudios, el número de pulsos por segundo, así que la velocidad de la conexión en serie. 9600 es simplemente el valor predeterminado. Si esto establece un valor diferente, deberás cambiar en el monitor serial así. De lo contrario, será fuera de sincronización y le dan personajes muy extraños. El contrario de Serial.begin(...) es Serial.end(). Se puede utilizar cuando tienes que volver a utilizar los pines 1 y 0 como I/O normal, después de usar la conexión en serie, sin embargo realmente no conviene.

En el bucle, verás la misma palabra clave Serial, esta vez con la función println(...) . Esto simplemente imprime el valor que se especifica entre paréntesis, seguidos de una nueva línea (ln).
(Tenga en cuenta que esto no sólo convertirlo a binario para enviar en serie, en cambio, convierte a ASCIIy luego la envía en serie, para que la computadora puede imprimir. Si usted desea enviar bytes binarios en serie, utilice la función de Serial.write(...) .)

Para obtener una nueva línea, también se podría utilizar Serial.print(...) junto con el carácter \n (nueva línea) o el carácter \r (retorno de carro), que indican una línea final, en lugar del ln.

Las comillas simples indican que es un personaje.

Otro personaje especial es \t (tabulador), vamos a usar para imprimir las entradas de ambos interruptores. Se trata de ejemplo serial2Buttons. Súbela y abra el serial monitor para ver el resultado.

Referencia de Arduino: Serial

Enviar comandos al Arduino

La comunicación también funciona al revés: vamos a escribir un programa para controlar LEDs de la computadora.
Abra el ejemplo serialLEDs.

Subirlo, abra al monitor de serie y trate de envío de valores entre 0 y 3. Enviar 4. ¿Obtener cómo funciona?
Vamos a ver el código:

La configuración debería ser muy familiar, excepto una orden: esto es un bucle de tiempo. Repite un bucle de tiempo, como la condición entre el paréntesis sea cierta (se podría comparar a un bucle for, pero sin el argumento de la primero y la último, sólo la condición.) He utilizado explícitamente los soportes curvos para indicar que es un bucle, pero también podría usar un punto y coma en su lugar: tiempo (! Serie);
Serie devuelve true cuando la comunicación serial se activa (al abrir el monitor de serie, por ejemplo). Así que si añadimos un operador no (!), la expresión es verdadera cuando la comunicación no está activa. Por lo que el bucle de tiempo por persiste mientras que la comunicación no está activa y esencialmente espera que se convierta en activo. Entonces sabemos que podemos empezar a enviar datos con la función println(...). Si no utilice el lazo de tiempo de espera, algunas placas como el Leonardo (y otros consejos que tienen capacidades USB en el chip principal) va a perderán los primeros datos. Tratar de enviar a la computadora, pero nada está a la escucha para la entrada de la serie.

En el lazo, hay otra nueva declaración: la declaración de si, esta es probablemente la declaración más importante en Ciencias de la computación. Que hace exactamente lo que su nombre lo indica: se ejecuta un fragmento de código, sólo cuando una cierta condición es true. De lo contrario, se omite el código entre paréntesis curvos.

Ahora voy a tomar un momento para explicar cómo el Arduino recibe los mensajes de seriales:
Como expliqué anteriormente, serie envía un bit, byte por byte. Esto significa que su mensaje, "prueba", por ejemplo, es dividido en trozos de 1 byte. Un carácter es un byte en tamaño, por lo que se verá algo así como ' t ' 'e' ' ' t ' cuando usted envía en serie. Cuando Arduino recibe estos bytes, se almacenan en un buffer (solo un pedacito de memoria para almacenarla temporalmente). Recibe byte por byte, por lo que el buffer se verá algo como esto "" (vacío) "t", "te", "tes" "prueba".
Cuando el buffer está vacío, la función de Serial.available() devuelve 0, si ha recibido los datos en el búfer, devolverá el número de bytes en el buffer, así que 4 en este caso. Si llama a la función Serial.read() , se lee el primer byte (' t ') de la solución tampón, borrar de la memoria intermedia y cambiar el buffer, por lo que ahora contiene "est", y Serial.available() devuelve 3. Si llama a Serial.read() otra vez, devolverá 'e', y el buffer será "st". Usted puede seguir leyendo hasta que Serial.available() es igual a cero. (Si quieres saber el primer byte sin borrar al hacerlo, puede utilizar la función Serial.peek() ).

Así que la primera if(Serial.available > 0) comprobará si hay datos en el búfer. Si es así, que leer el primer byte y almacenarlo en la variable serialValue. Luego comprobará si el valor que acaba de leer es '0'. Nota las comillas simples, esto indica el carácter cero (ASCII: ' 0' = 48) y no 0 como un valor, ya que el serial monitor envía como texto. Si el valor es '0', se apaga ambos LEDs. Se ejecutará si el valor es no '0', código en la sección 'otra cosa': ahora comprobará si el valor es '1', si es así, enciende el primer LED y vueltas de la segunda. Si bien no es '1', comprobará si es '2', si así, enciende el segundo LED y se apaga el primero de ellos. Si no es '2', comprobará si es '3', si es así, se enciende dos LEDs, de lo contrario, ejecuta el código en la sección más última, imprime qué valores debe introducir.

Puede comprobar el diagrama de flujo en la imagen si la explicación no fue lo suficientemente clara.

Tenga en cuenta que un signo de igualdad doble se utiliza para comprobar si dos valores son iguales. Si se utiliza un signo igual solo, (si (serialValue = '0')) no ver nada, sólo se asigna un valor de '0' a la variable serialValue. Esto es un error muy común.

Otros operadores a prueba valores < (menos de) > (mayor que) < = (menor o igual a) > = (mayor o igual que)! = (no igual a).
Dentro de la instrucción if, también puede utilizar operadores lógicos (operadores booleanos), para comprobar varias condiciones: & & (y) || (o)

Algunos ejemplos:

5 > 3 true →
5 falso → de < 3
3 falso → de > 3
3 > = 3 → true
5! = 3 → true
3 == true → 3

para comprobar si un valor de x está entre 1 y 100:

(1 < = x) & & (x < = 100)

otra forma de escribir esto (no recomendado, solo como ejemplo)

! ((x < 1) || (x>100))

Puede intentar averiguar cómo funciona usted mismo y luego verificar con las tablas de verdad en la imagen de arriba.

Nota: Al igual que en matemáticas, los soportes se utilizan para indicar el orden de operaciones, por ejemplo, en la última expresión, ' x < 1' pondrá a prueba primero, entonces ' x > 100', luego ' ||' y '!'.

Referencia de Arduino: mientras que

Referencia de Arduino: si (y operadores de comparación)

Referencia de Arduino: otro

Referencia de Arduino: operadores booleanos

_

Resumen

  • Arduinos la mayoría tienen un segundo chip para la comunicación USB. Este chip se comunica con el microcontrolador principal mediante una conexión en serie.
  • Serie significa que un bit se envía después la otra, a la vez. Hay una línea de transmisión y recepción (TX y RX respectivamente).
  • Usted puede utilizar el Serial Monitor (CTRL + SHFT + M) y el Plotter serie (CTRL + SHFT + L) para mostrar los datos que es el envío de Arduino, para enviar datos a Arduino.
  • Serial.Begin(Baud); comienza la comunicación serial con la computadora. La tasa de baudios predeterminada es 9600.
  • Serial.end(); termina la comunicación serial.
  • Serial.Print(Text); imprime el texto al ordenador, se puede leer en el monitor serial/plotter. Tenga en cuenta que los números son convertidos a ASCII: por ejemplo, Serial.print(0); le enviaremos un valor serie de 48 (código ASCII el carácter cero).
  • Serial.println(Text); igual impresión, pero la voluntad añade una nueva línea después del mensaje.
  • '\n' es un carácter de nueva línea, '\r' es un retorno de carro y '\t' es el carácter de tabulación (para depresiones)
  • Serial.Write(byte); envía un byte de crudo sobre la serie. Por ejemplo, Serial.write(48); imprimirá un carácter 0 en el serial monitor.
  • While(Condition) {...} es llamado el lazo de tiempo. Código entre las llaves se ejecutan y repite mientras la condición entre paréntesis normales es cierto.
  • Serie devuelve true cuando la comunicación serial se activa (al abrir el monitor de serie, por ejemplo).
  • tiempo (! Serie); repetirá la 'nada' (leer ' espera') como la comunicación serial no activa.
  • if(condition) {if-código} else {otro código} a ejecutar el código de if si la condición es true y ejecutar el otro código si la condición es falsa.
  • Los datos serie recibidos por el Arduino se almacenan en un buffer, permanece allí hasta que haya leído o hasta que el búfer se desborda.
  • Serial.Available(); Devuelve el número de bytes disponibles en el búfer.
  • Serial.Read(); devolver el primer byte en el buffer y borrarlo luego.
  • Serial.Peek(); devolverá el primer byte en el buffer, sin eliminarlo.
  • En sus condiciones, puede utilizar estos operadores de prueba: == (igual a), < (menor que), > (mayor que), < = (menor o igual que), > = (mayor o igual que),! = (no igual a).
  • Y también se puede utilizar la lógica & & (y) y || o los operadores.

Extra: interruptor

En el ejemplo anterior, utilizamos un montón de si... else declaraciones. Aunque esta es la manera más rápida de hacerlo, no es fácil de leer. Si desea comparar una variable para algunos valores determinados, puede utilizar un interruptor.

Abra el ejemplo serialLEDsSwitch.

Como se puede ver, el interruptor comienza con las palabras 'switch', seguida de la variable que desea ver entre paréntesis. Entre los soportes curvos, se definen nuestros casos. Utilizan la sintaxis 'caso valor:', seguido por el código que desea ejecutar si la variable dada es igual al valor en este caso. Después del código del caso específico, el 'break'; palabra clave se utiliza para cerrar el 'caso'.
Tenga en cuenta que el valor especificado no puede ser una variable. Si usted quiere comparar 2 variables, deberás utilizar instrucciones if.
El código en el 'valor por defecto:' caso se ejecuta si la variable no coincide con ninguno de los valores de otros casos. Este caso es opcional y puede omitirse.

Referencia de Arduino: interruptor / del caso

Artículos Relacionados

BRICOLAJE casero portátil Arduino café montaña con LED de indicador de temperatura

BRICOLAJE casero portátil Arduino café montaña con LED de indicador de temperatura

Muchas cosas suceden solo por tomar café. Grandes empresas éxito ideas salen mientras gente chateando con café. Me encanta tomar café sobre todo cuando estoy en la oficina. Estoy bastante seguro de que allí todo el mundo ama el café. Pero cuando hago
Brazo robótico Arduino

Brazo robótico Arduino

Ya que es mi primer proyecto después de los 15 tutoriales de mi kit de iniciación de Arduino, el verdadero propósito de la misma es para algunos críticos, consejos, sugerencias, ideas de cualquier persona que sabe más que yo.Este proyecto trata de un
Control CC MIDI en Ableton Live con un Arduino Uno

Control CC MIDI en Ableton Live con un Arduino Uno

En este instructable utilizaremos un potenciómetro en un Arduino Uno para controlar una CC MIDI en Ableton Live. Un MIDI CC está parado para el regulador continuo, es decir, un número en el rango de 0 a 127 inclusive modular algo con. En el youtube q
Arduino All-in-One Getting Started guía

Arduino All-in-One Getting Started guía

un tutorial todo-en-uno para empezar con la plataforma de prototipado Arduino electrónica de código abierto. Esta guía está pensada para el principiante pero debe también ser útiles si ya jugar con la electrónica pero quiere iniciar con el Arduino. H
Juego el francés puede poder utilizando un Arduino y un zumbador

Juego el francés puede poder utilizando un Arduino y un zumbador

Bonjour!Hacer que tu Arduino el francés puede poder mediante una señal acústica. No pinzas. No se dispara. Es tan directo que resulta tan escandaloso el puede puede implica.Este instructivo cubre información electrónica introductorio y se centra en e
Arduino Drawbot

Arduino Drawbot

en algunas de mis anteriores instructurables Arduino tengo programa para la iniciación de Arduino en cómo controlar servos de diferentes maneras.Y en mi última instructurable he muestran la modificación de un servo de paralaje para una rotación de 36
Reflejo del dolor humano de Arduino mecatronicos

Reflejo del dolor humano de Arduino mecatronicos

Debido a su simplicidad, circuitos reflejos son un lugar obvio para comenzar cuando se trata de modelar el sistema nervioso. Opté por usar el reflejo de dolor térmico para mi primer proyecto. En este reflejo de dolor, un estímulo doloroso como una ll
Movimiento reactivo Shake the Maze Juego

Movimiento reactivo Shake the Maze Juego

Traer la magia a la vida con un movimiento automatizado, reactivo shake the maze juego! Usando componentes de un kit de iniciación de Arduino y materiales comunes alrededor de la casa, este es un juego personalizable para que pueda sentirse como un a
Detector de temperatura DIY

Detector de temperatura DIY

Ahora usted puede construir a su propio monitor de temperatura utilizando una placa Arduino. El circuito es una combinación de una placa Arduino UNO, sensor de temperatura LM35 y display de 7 segmentos. Mostrará la temperatura en el segmento de 7 gra
Automático regulador persiana Horizontal accionado Solar

Automático regulador persiana Horizontal accionado Solar

Empecé este proyecto porque tenemos algunas persianas horizontales situados en una alta ventana sobre la puerta principal de nuestra casa. Esta ventana está orientada al sur, y aquí en Colorado, significa un montón de sol. Sería bueno tener esa luz d
Una breve historia del tiempo

Una breve historia del tiempo

"La gente no entiende a tiempo. Es no lo que crees que es. - La gente asume que el tiempo es una progresión estricta de causa a efecto... pero en realidad, desde una perspectiva no lineal, no subjetiva, es más como una bola grande de wibbly-wobbly...
Haz de tu ADVERTENCIA de culo gritando dispositivo

Haz de tu ADVERTENCIA de culo gritando dispositivo

Resolución de año nuevo: no sentarse en mi culo por mucho tiempo. Así que hice un pequeño dispositivo que grita que debo levantarme, cuando me siento por mucho tiempo.Basado en el dispositivo de grabación de este Radioshack , un sensor de inclinación
Temporizador de entrenamiento AB

Temporizador de entrenamiento AB

No te pierdas ni un entrenamiento nuevo! Ahora que el tiempo es cada vez más frío, muchos de nosotros están menos motivados a correr al aire libre o ir al gimnasio. En este caso, tenemos que conseguir creativo con ejercicios que podemos hacer en casa
Torno eléctrico (actualización OFF ON interruptor de encendido ON)

Torno eléctrico (actualización OFF ON interruptor de encendido ON)

te amo mi pequeño pan tornillo lo uso para mi trabajo de reparación y para sostener placas para soldar el único problema es que la prensa sólo se mueve un poco con cada rotación por lo que va de un tablero de circuito pequeño a una gran placa de circ