Edición de «
Manual de programación Arduino/Apéndice 5. Comunicación vía puerto serie
»
Ir a la navegación
Ir a la búsqueda
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{Título}} La tarjeta Arduino puede establecer comunicación serie (recibir y enviar valores codificados en ASCII) con un dispositivo externo, a través de una conexión por un cable/puerto USB (tarjeta USB) o cable/puerto serie RS-232(tarjeta serie) (Enlace) Igual que para la descarga de los programas, sólo será necesario indicar el número de puerto de comunicaciones que estamos utilizando y la velocidad de transferencia en baudios (enlace).También hay que tener en cuenta las limitaciones de la transmisión en la comunicación serie, que sólo se realiza a través de valores con una longitud de 8-bits (1 Byte)(Ver serialWrite(c) o serialRead(c) ), mientras que como ya se hemos indicado, el A/D (Convertidor) de Arduino tiene una resolución de 10-bits.(enlace) Dentro del interfaz Arduino, disponemos de la opción "Monitorización de Puerto Serie", que posibilita la visualización de datos procedentes de la tarjeta. [[Archivo:Monitorización de puerto serie en Arduino - toma de pantalla en Windows.png|alt=Monitorización de puerto serie en Arduino - toma de pantalla en Windows|centre|frameless|410x410px|Monitorización de puerto serie en Arduino - toma de pantalla en Windows]] Para definir la velocidad de transferencia de datos, hay que ir al menú "Herramientas" y seleccionar la etiqueta "Velocidad de monitor Serie". La velocidad seleccionada, debe coincidir con el valor que hemos determinado o definido en nuestro programa y a través del comando beginSerial().Dicha velocidad es independiente de la velocidad definida para la descarga de los programas. La opción de "Monitorización de puerto serie" dentro del entorno Arduino, sólo admite datos procedentes de la tarjeta. Si queremos enviar datos a la tarjeta, tendremos que utilizar otros programas de monitorización de datos de puerto serie como HyperTerminal (para Windows) -Enlace o ZTerm (para Mac)-XXXX- Linux-Enlace, etc. También se pueden utilizar otros programas para enviar y recibir valores ASCII o establecer una comunicación con Arduino: Processing (enlace), Pure Data (enlace), Director(enlace), la combinación o paquete serial proxy + Flash (enlace), MaxMSP (enlace), etc. '''Nota:''' Hay que dejar tiempos de espera entre los envíos de datos para ambos sentidos, ya que se puede saturar o colapsar la transmisión. == Envío de datos desde Arduino(Arduino->PC) al PC por puerto de comunicación serie == Ejercicio de volcado de medidas o valores obtenidos de un sensor analógico '''Código''' <code>/* Lectura de una entrada analógica en el PC</code> <code>El programa lee una entrada analógica, la divide por 4 para convertirla en un rango entre 0 y 255, y envía el valor al PC en diferentes formatos ASCII.</code> <code>A0/PC5: potenciómetro conectado al pin analógico 1 y puerto de PC-5 Created by Tom Igoe 6 Oct. 2005</code> <code>Actualizado</code> <code>*/</code> <code>int val; // variable para capturar el valor del sensor analógico</code> <code>void setup() {</code> <code>// define la velocidad de transferencia a 9600 bps (baudios)</code> <code>beginSerial(9600);</code> <code>}</code> <code>void loop() {</code> <code>// captura la entrada analógica, la divide por 4 para hacer el rango de 0-255</code> <code>val = analogRead(0)/4;</code> <code>// texto de cabecera para separar cada lectura:</code> <code>printString("Valor Analogico ="); </code> <code>// obtenemos un valor codificado en ASCII (1 Byte) en formato decimal :</code> <code>printInteger(val);</code> <code>printString("\t"); //Carácter espacio</code> <code>// obtenemos un valor codificado en ASCII (1 Byte) en formato hexadecimal :</code> <code>printHex(val);</code> <code>printString("\t");</code> <code>// obtenemos un valor codificado en ASCII (1 Byte) en formato binario</code> <code>printBinary(val);</code> <code>printString("\t");</code> <code>// obtenemos un valor codificado en ASCII (1 Byte)en formato octal:</code> <code>printOctal(val);</code> <code>printString("\n\r"); //caracter salto de linea y retorno de carro</code> <code>// espera 10ms para la próxima lectura delay(10);</code> <code>}</code> Otra solución puede ser la de transformar los valores capturados en un rango entre 0 y 9 y en modo de codificación ASCII o en caracteres ASCII. De forma que dispongamos de un formato más sencillo o legible, sobre la información capturada. El siguiente código incluye una función llamada '''treatValue()''' que realiza dicha transformación. <code>int val; // variable para capturar el valor del sensor analógico</code> <code>void setup() {</code> <code>// define la velocidad de transferencia a 9600 bps (baudios)</code> <code>beginSerial(9600);</code> <code>}</code> <code>int treatValue(int data) {</code> <code>return (data * 9 / 1024) + 48; //fórmula de transformación</code> <code>}</code> <code>void loop() {</code> <code>val= analogRead(0); //captura del valor de sensor analógico (0-1023)</code> <code>serialWrite(treatValue(val)); //volcado al puerto serie de 8-bits </code> <code>serialWrite(10); //caracter de retorno de carro serialWrite(13); //caracter de salto de línea delay(10); }</code> <code>// Serial Output // by BARRAGAN <<nowiki>http://people.interaction-ivrea.it/h.barragan</nowiki>></code> <code>int switchpin = 0; // interruptor conectado al pin 0</code> <code>void setup() {</code> <code>pinMode(switchpin, INPUT); // pin 0 como ENTRADA</code> <code>Serial.begin(9600); // inicia el puerto serie a 9600bps</code> <code>}</code> <code>void loop() {</code> <code>if(digitalRead(switchpin) == HIGH) //si el interruptor esta en ON</code> <code>{ </code> <code>Serial.print(1); // envía 1 a Processing</code> <code>}else{</code> <code>Serial.print(0); // en caso contrario envía 0 a Processing</code> <code>delay(100); // espera 100ms </code> <code>}</code> == Envío de datos desde el PC (PC->Arduino) a Arduino por puerto de comunicación serie == En primer lugar, necesitamos instalar un programa como Hyperterminal en nuestro PC, en caso de que sea Windows. [[Archivo:Software Terminal para realizar comunicaciones con el puerto serie - captura de pantalla versión Windows.png|alt=Software Terminal para realizar comunicaciones con el puerto serie - captura de pantalla versión Windows|centre|frameless|550x550px|Software Terminal para realizar comunicaciones con el puerto serie - captura de pantalla versión Windows]] <center><small>Software de terminal para realizar comunicaciones con el puerto serie</small></center> Seleccionar el puerto que estamos utilizando con la tarjeta, la velocidad de transferencia y el formato de salida de los datos. Y finalmente conectar... Se puede realizar una comprobación con el ejercicio mostrado arriba. Nota: El programa de monitorización de datos está ocupando el puerto utilizado para la conexión a la tarjeta, por lo que si quieres realizar una nueva descarga del programa, tendrás que desconectarte previamente de este último. <code>/*by BARRAGAN <<nowiki>http://people.interaction-ivrea.it/h.barragan</nowiki>></code> <code>*Demuestra cómo leer un dato del puerto serie. Si el dato recibido es una 'H', la luz se enciende ON, si es una 'L', la luz se apaga OFF. Los datos provienen del PC o de un programa como Processing.</code> <code>*Creado 13 Mayo 2004 revisado 28 Ago 2005</code> <code>*/</code> <code>char val; // variable que recibe el dato del puerto serie</code> <code>int ledpin = 13; // LED conectado al pin 13</code> <code>void setup() {</code> <code>pinMode(ledpin, OUTPUT); // pin 13 (LED)actua como SALIDA</code> <code>Serial.begin(9600); // inicia la comunicación con el puerto serie a 9600bps</code> <code>}</code> <code>void loop() {</code> <code>if( Serial.available() ) // si hay dato e el puerto lo lee</code> <code>{</code> <code>val = Serial.read(); // lee y almacena el dato en 'val'</code> <code>}</code> <code>if( val == 'H' ) //si el dato recibido es ́H ́</code> <code>{</code> <code>digitalWrite(ledpin, HIGH); //activa el LED</code> <code>} else {</code> <code>digitalWrite(ledpin, LOW); // en caso contrario lo desactiva</code> <code>}</code> <code>delay(100); // espera 100ms para una nueva lectura</code> <code>}</code> Para probar este programa bastará con iniciar el programa que actúe de “terminal de comunicación” Hyperterminal de Windows o el programa mostrado anteriormente y podemos enviar los datos y comprobar cómo actúa. [[Category:Book:Manual_de_programación_Arduino]]
Resumen:
Ten en cuenta que todas las contribuciones a CNB se consideran publicadas bajo la Creative Commons BY-SA 4.0 (véase
CNB:Derechos de autor
para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre.
¡No uses textos con copyright sin permiso!
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Plantilla usada en esta página:
Plantilla:Título
(
editar
)
Esta página pertenece a 1 categoría oculta:
Categoría:Book:Manual de programación Arduino
Menú de navegación
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Espacios de nombres
Página
Discusión
español
Vistas
Leer
Editar
Editar código
Ver historial
Más
Purgar
Buscar
Navegación
Página principal
Retorno seguro a clases
Protocolo de regreso para docentes
Protocolo de regreso para directores
Protocolo de apoyo emocional y resiliencia
Recomendaciones para transporte
Toda la categoría
Aprendizaje en línea
Guía docente para el aprendizaje remoto
Ayudar a aprender en línea
Aprendo en casa - Mineduc
Lineamientos de seminario y prácticas
Todos los recursos educativos alineados al CNB
Toda la categoría
Programa de certificación
Instrucciones del programa
Páginas con pruebas de certificación
Inicial y Preprimaria
Inicial
Preprimaria (nuevo)
Primaria y Básico
Primaria
Primaria Acelerada
Básico
Básico por Madurez
Bachillerato
Bach en CC y LL
Ciencias Biológicas
Computación
Diseño Gráfico
Educación
Productividad y Desarrollo
Educación Física
Educación Musical
Electricidad
Finanzas y Administración
Gestión de Oficinas
Mecánica Automotriz
Productividad y Emprendimiento
Textiles
Turismo
Por Madurez
Magisterio
Educación Bilingüe
Perito
Electricidad Industrial
Electrónica y Dispositivos Digitales
Industria de Alimentos
Desarrollo Comunitario
Pensum Perito Contador Diurna
Pensum Perito Contador Nocturna
Pensum Perito Contador Computación Diurna
Pensum Perito Contador Computación Fin de Semana
Pensum Perito Contador Bilingüe Matutina
Todos los Pensa Perito Contador
Mallas curriculares Inicial, Preprimaria, Primaria y Básico
Inicial
Preprimaria (nuevo)
Primaria
Primaria Acelerada
Básico
Mallas curriculares Bachillerato y Magisterio EBI
Bach en CC y LL
Ciencias Biológicas
Computación
Diseño Gráfico
Educación
Productividad y Desarrollo
Educación Física
Educación Musical
Electricidad
Finanzas y Administración
Gestión de Oficinas
Mecánica Automotriz
Productividad y Emprendimiento
Textiles
Turismo
Por Madurez
EBI Infantil
Concreción por pueblos
Navegador
Pueblo Maya
Pueblo Garífuna
Pueblo Xinka
Módulos CNB
Introducción al CNB en línea
Fundamentos
Planificación
Metodología
Evaluación
Sobre el Currículo
Currículo en la agenda 2030
Toda la categoría
ODEC
ODEC Inicial
ODEC Preprimaria
ODEC Primaria
Educación Musical
Aprender a pensar
Técnicas didácticas
Pensamiento crítico
Cómo aprendemos
Falacias lógicas
Recursos de Lectoescritura
Enseñanza de la comprensión lectora
Colección CILEES
Antología de cuentos
Cuentos en familia
Tesoro de la lectura
Aprendizaje de la Lectoescritura
• Prácticas
• Actividades
Guía docente para comprensión lectora
Cuadernillos pedagógicos
Organizadores de Lectura
Evaluación Basada en Currículo
Lectoescritura funcional
Involucramiento de padres de familia en lectoescritura
Potenciando la Lectura - guía docente
Recursos de Educación Bilingüe Intercultural
Planificación por pueblos
Antología de cuentos
Nuestro idioma en la escuela
Kemon Ch'abäl
Buenas prácticas EBI
Guía para material con pertinencia EBI
Protocolo acompañamiento EBI
Evaluación de la lectura
Manual de Educación Intercultural
Manual de orientación para voluntarios
Creando sinergia - Xinka
Recursos STEAM
Experimento 10+
Otros Recursos Educativos
Calendario Escolar
Serie Prácticas Educativas
Buenas Prácticas EBI
Elaboración de Materiales
Publicaciones
Vídeos
Herramientas
Recursos por Nivel y Grado
Recursos de Evaluación
Guías prueba de docentes
Breves para Docentes
Cuadernillos Pedagógicos - Matemáticas
Cuadernillos Pedagógicos - Comprensión lectora
Aprender del Error - Básico
Aprender del Error - Graduandos
Evaluación en el Aula
Evaluación del desempeño basada en competencias
Repasos de lectura del CNB
Evaluación Basada en Currículo
Juventud y Género
Desarrollo del pensamiento crítico
Abriendo Oportunidades
Educar para la igualdad
Seminario
Competencias básicas para la vida
Gobierno escolar Primaria
Gobierno escolar Secundaria
Lectoescritura funcional
Necesidades Educativas Especiales
Material NEE docentes regulares
Adecuaciones para NEE
Leyes para educación especial
Bibliotecas y Recursos
Bibliotecas comunitarias
Estimulación temprana a la lectura
Qué y para qué de la biblioteca
Nuestros juguetes, juegos, rondas y cantos infantiles
Liderazgo Pedagógico
Protocolo de regreso para directores
Prevención de la violencia
Guías Prevenir es mejor
Evidencias de aplicación del CNB
Manual PEI
Manual de coaching
Involucramiento de padres de familia en lectoescritura
Promover éxito en todos los niveles
Toda la categoría
Salud escolar
Covid-19
Sarampión
Ayuda y otros
Contactar al editor
Contactar otro usuario
Preguntas frecuentes
Ayuda
Cambios recientes
Alinear recurso educativo
Página aleatoria
Glosario
CNB para descarga
Lista de correo
Herramientas
Lo que enlaza aquí
Cambios relacionados
Páginas especiales
Información de la página
Datos de carga