USANDO EL PUERTO SERIE DEL ARDUINO

USANDO EL PUERTO SERIE DEL ARDUINO

(15/12/13)

 

En este tutorial vamos a explicar cómo se usa el puerto serie del Arduino, ya que este se usa en varias ocasiones para transmitir y recibir datos de otros dispositivos como un PC o de otro microcontrolador.

El puerto serie del Arduino Uno usa los pins 0(RX) y 1(TX). Estos están conectados al controlador FTDI (ATmega 16u2) que es el que permite la traducción del formato serie TTL a USB. Estos pins no pueden ser utilizados mientras se usa la comunicación serie.

El puerto serie del Arduino utiliza un buffer de 64 bytes. Para entender el uso del buffer normalmente se usa el ejemplo de la sala de espera del médico. Esta sala de espera es el buffer, que tiene una capacidad de 64 pacientes. Cada paciente es 1 byte. El médico va atendiendo cada paciente uno por uno por orden de llegada. La enfermera que deja entrar a los pacientes a la sala de espera son los baudios (la velocidad de recibir datos), cuando más grande sea la velocidad, más gente entra en la sala. Si la sala está completa con 64 pacientes y llegan más, estos serán rechazados (drop o loss).

Para usar el puerto serie del Arduino hay varias funciones de programación que hay que saber:

 -begin(velocidad)    Abre el puerto serie y establece la velocidad. La velocidad de conexión (baudios o Baud Rate) es la velocidad que llegan los datos al puerto serie. Normalmente se usa 9600bps o 115000bps.

-available()    Esta función devuelve el estado del buffer del puerto serie y rebela si hay datos dentro de este.

-read()    Lee un carácter del buffer. Es importante entender que lee un solo carácter (byte).

-write()    Escribe caracteres a través del puerto serie. A diferencia de read(), escribe tantos caracteres como quieras.

-print()    Imprime los datos al puerto serie como texto ASCII.

-println()    Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13, o ‘\r’) y un carácter de avance de línea (ASCII 10, o ‘\n’). Este comando tiene la misma forma que Serial.print ().

-flush()    Vacía el buffer de entrada de datos.

-end()    Desactiva la comunicación serie, permitiendo a los pines 0(RX) y 1 (TX) ser usadoscomo entradas o salidas digitales. Para volver a activar la comunicación serie, llamar la función Serial.begin().

Para enviar y recibir datos, el Arduino utiliza el código ASCII

Enviar datos del Arduino al PC

Para empezar, vamos a enviar datos desde el Arduino al PC. El IDE de Arduino tiene un Monitor Serial para comunicarse con el PC.

Vamos a enviar el valor 81 en formato decimal al PC. El programa sería el siguiente:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(81);
}

Si cargamos el programa al Arduino y abrimos el Monitor Serial, vemos que va imprimiendo el valor 81 constantemente.

También podemos determinar el formato de salida del valor que enviamos (decimal, binario, hexadecimal, octal o byte).

Enviar el valor 81 en formato decimal, podemos hacerlo con el programa anterior o también con este:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(81,DEC); //Imprime "81"
}

Para enviar el valor 81 en formato hexadecimal:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(81,HEX);  //Imprime "51"
}

Para enviar el valor 81 en formato octal:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(81,OCT); //Imprime "121"
}

Para enviar el valor 81 en formato binario:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(81,BIN); //Imprime "1010001"
}

Y para enviar el valor 81 como un byte se tiene que usar la función write()

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.write(81); //Imprime "Q", el qual representa el carácter ASCII del valor "81"
}

 

 

Recibir datos del PC

Ahora vamos a invertir el proceso, vamos a enviar datos del PC al Arduino. El programa básico para recibir datos es el siguiente:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    int dato=Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable

    Serial.println(dato);  //Imprimimos en la consola el carácter recibido
  }
}

Y aquí se complica un poco la cosa.  ¿Por qué? Pues porqué como hemos explicado antes, el buffer del puerto serie recibe los datos byte por byte y en formato decimal, quiere decir, los caracteres recibidos serán números correspondientes al código ASCII (El Arduino ve Símbolos de del tabla ASCII y los traduce a Decimal).

Por ejemplo: Enviamos desde el PC la palabra “ARDUINO”. El buffer lee uno por uno los caracteres recibidos, primero la “A”, después la “R”,…, hasta la “O”, y los captura como carácter decimal correspondiente a la tabla del código ASCII. Quiere decir que el Arduino ve los siguientes valores:

                                         65  82  68  85  73  78  79

Que corresponden a       A    R    D    U    I     N    0

Para solucionar esto podemos usar la función write() en vez de println(). Porque write() envía uno o varios bytes en forma de datos binarios. De esta manera, cuando enviamos desde el PC la palabra “ARDUINO”, en el Monitor Serial imprimirá “ARDUINO”.

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    int dato=Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable

    Serial.write(dato);  //Imprimimos en la consola el carácter recibido
  }
}

Lo que hace la función write() con los valores recibidos (65  82  68  85  73  78  79) es enviarlos al Monitor Serial con su carácter correspondiente de la tabla del código ASCII. Así visualizamos los mismos caracteres que hemos escrito inicialmente en el PC.

Otra forma similar de hacerlo sin cambiar el println() es en vez de usar el tipo de variable int para leer los datos del buffer, usaremos el tipo de variable char que es un tipo de dato que ocupa un byte de memoria y almacena un valor de carácter (almacena el símbolo de la tabla ASCII).

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    char dato=Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable

    Serial.println(dato);  //Imprimimos en la consola el carácter recibido
  }
}

Pero y si queremos usar datos recibidos dentro del programa. Por ejemplo: si queremos enviar el valor 51 desde el PC al Arduino, y este queremos que a este valor 51 le sumemos un valor 2 para que nos salga un valor 53. ¿Cómo lo podemos hacer? Ya que cuando el Arduino reciba el valor 51, lo va a interpretar como un 53(5) y 49(1).

Usaremos un código muy sencillo. Creamos un array tipo char para que almacene los datos en forma de cadena de caracteres (String). Lo que haremos es convertir esta cadena de caracteres a un número entero usando la función atoi(), que no es una función de Arduino sino de C++, pero que está incluido automáticamente en todos los sketches.  También usaremos la función memset() (también procedente de C++) para limpiar el array después de cada lectura.

void setup()
{
  Serial.begin(9600);
}

char cadena[30]; //Creamos un array que almacenará los caracteres que escribiremos en la consola del PC. Le asignamos  un tope de caracteres, en este caso 30
byte posicion=0;  //Variable para cambiar la posición de los caracteres del array
int valor;  //Variable del valor entero

void loop()
{
  if(Serial.available()) //Nos dice si hay datos dentro del buffer
  {
    memset(cadena, 0,sizeof(cadena));//memset borra el contenido del array  "cadena" desde la posición 0 hasta el final sizeof

    while(Serial.available()>0) //Mientras haya datos en el buffer ejecuta la función
    {
      delay(5); //Poner un pequeño delay para mejorar la recepción de datos
      cadena[posicion]=Serial.read();//Lee un carácter del string "cadena" de la "posicion", luego lee el siguiente carácter con "posicion++"
      posicion++;
    }

    valor=atoi(cadena);//Convertimos la cadena de caracteres en enteros
    Serial.println(valor+2);//Imprimimos el valor sumandole un valor +2
    posicion=0;//Ponemos la posicion a 0
  }

}

60 thoughts on “USANDO EL PUERTO SERIE DEL ARDUINO

  • Avatar

    luis maciel

    Una pregunta, la variable valor, la puedo introducir a una estructura de casos?, quisiera tener algunos 255 casos y que al poner

    switch (valor) {
    case ‘255’:
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3,LOW);

    digitalWrite(ledPin4,LOW);
    digitalWrite(ledPin5,LOW);

    break;

    me tome el 255 como tal y no como yn 2, 5, 5

    Reply
  • Avatar

    rafa

    Yo quiero enviar valores enteros (mayores de 10) desde una raspberry hasta un arduino y viceversa y quisiera evitar tener que estar continuamente cambiando de tipo de datos en sus respectivos programas (me esta dando errores). ¿es posible?.

    Reply
    • DIYMakers

      DIYMakers

      Si usas comunicación serie, tienes que tener en cuenta que cuando el Arduino reciba un entero desde la Raspberry (por ejemplo 15), el Arduino verá 49 y 53. Lo que puedes hacer es usar la función parseInt de Arduino para insertar en una variable el número entero que envías desde la Raspberry.

      Reply
  • Avatar

    Rafa

    Gracias por la información. Pero, mi problema es que el comando de la raspberry que envía los datos (arduino.write(dato)) no admite que «dato» sea un entero, entonces, como tengo trabajar con enteros, cuando los quiero enviar a arduino, tengo qu transformarlos en texto y, esto a veces no funciona bien. ¿que puedo hacer?. En cuando a arduino, ¿como funciona el comando parseInt?. Gracias.

    Reply
    • DIYMakers

      DIYMakers

      parseInt devuelve el primer numero entero que recibe el buffer hasta el primer carácter. Por ejemplo, si el buffer recibe 12f, la función retornará el entero 12.
      Si la Raspberry solo puede enviar texto, en el Arduino recoges este texto y transformas los caracteres en enteros con atoi, como el ejemplo del tutorial.

      Reply
  • Avatar

    rafa

    Tengo que enviar consecutivamente dos datos desde arduino a Raspberry por el puerto serie. Los datos son arrays de caracteres (definidos dentro del programa de arduino como valor [2] y valor1[2]. Al enviarlos con dos sentencias consecutivas Serial.write(valor) y Serial.write(valor1), la Raspberry recibe correctamente el primero de ellos pero el segundo no (lo corta o recibe un dato incorrecto). El problema no es el tiempo ya que poniendo un delay entre ambos (para dar tiempo a la raspberry a leer los datos) sigue ocurriendo lo mismo.¿es posible que al haber dos sentencias de envío de datos consecutivas haya algun problema de mezcla o perdida parcial de datos en el buffer?. ¿que puedo hacer para solucionarlo?. Gracias

    Reply
  • Avatar

    rafa

    En la Raspberry (RPi) tengo instalado un programa en Python que se ejecuta simultaneamente al de arduino. Durante la ejecución de ambos programas se envían datos el uno al otro. La sincronización la consigo a base de sentencias tipo while que esperan a que haya datos en el buffer del puerto serie. El problema me surge al hacer dos envíos consecutivos desde arduino a RPi.

    La forma de esperar primero y capturar despues el dato en la RPI es:

    while arduinoinWaiting()=0:
    time.sleep(0.1)

    while arduinoinWaiting()>0:
    caracter= arduino.read(1);
    txt=txt+caracter
    print txt
    time.sleep(0.3)

    Gracias por tu interes en el tema

    Reply
  • Avatar

    christianmesti1

    Hola, me gusto mucho el tutorial, recien estoy aprendiendo sobre microcontroladores, especialmente arduinos y estoy tratando de conectar 2 arduinos con 2 HC-05 y recien le encuentro un sentido despues de ver tu tutorial, espero que si tenga mas dudas pueda contar con tu ayuda 🙂

    Reply
  • Avatar

    Nicolas

    ¿Alguien sabe como hacer para poder enviar 10 bits por comunicación serial entre dos arduinos? Se que por los puertos Rx1 y Tx1 solo da el paso para 8 bits. Pero se me pidio hacer que llegaran los 10 bits sin perdidas al otro arduino y no encuentro la forma de realizarlo

    Reply
    • Avatar

      Pablo

      Buenas Nicolas, has conseguido enviar más de ocho bits por el Arduino? Estoy tratando de enviar números desde Arduino hasta Matlabmediante Bluetooth, el problema es que cuando llego al número 255, el siguiente lo toma como 0. Es decir, solamente los representa mediante 8 bits, pero yo quiero
      que Matlab lea cada uno de los valores como números de 24 bits, y no de 8. Sabes alguna manera para solucionarlo?

      Reply
  • Avatar

    Javier

    He simulado el ultimo programa (con memset y atoi) en Proteus v.7.7 con la libreria de arduino uno pero no he conseguido recibir números, siguen saliendo caracteres ASCII. Podrías decirme cual es el error que estoy cometiendo..?

    Reply
  • Avatar

    Carlos

    Me temo que Serial.flush() no vacía el buffer de entrada. Este es un error muy común que conviene aclarar para que nuestros programitas funcionen como queremos. Serial.flush(), como indica la guía de referencia de Arduino, espera a que el buffer de salida se vacíe, es decir, que congela la ejecución hasta que el buffer de salida esté vacío. Por tanto su uso suele estar precedido por un envío por el puerto serie mediante Serial.print(), por ejemplo. Si en nuestra aplicación es vital asegurarnos de que la información ha sido enviada completamente para realizar otras acciones, haremos uso de flush(). Si no nos importa tanto esto, entonces es mejor no usarlo, pues ralentiza la ejecución del proceso.

    Reply
  • Avatar

    ibruno

    Hola maestros, necesito un poco de ayuda, tengo dos arduinos nano v3, un principal y otro secundario, el principal gestiona datos, dos datos numericos los gestiona el secundario despues de tomar unas muestras con un sensor, son dos numeros entre 2000 y 4000.

    Mi pregunta es… Cómo puedo pasarselos al arduino principal para que los guarde en una variable?
    Gracias de antemano.

    Reply
  • Pingback: Tema 5 – Proyectos Arduino | Aprendiendo Arduino

  • Avatar

    Juan

    hola, me piden que realize una comunicacion puerto serie de modo que solo reciba datos el arduino me podriais decir alguna idea de como hacerlo ? habia pensado en hacer un semaforo y que cuando metiera datos desde el pc el semaforo se quedara en ambar pero no consigo realizar bien el programa, gracias por vuestro tiempo un saludo

    Reply
  • Avatar

    Cristian

    Hola me esta costando mucho hacer lo siguiente haber si alguien me puede ayudar, necesito transmitir un array de datos de un arduino a otro por el serial y a su a vez en este ultimo arduino hacer un buffer para luego subirlo por gprs, estoy atascado en la lectura de los datos del primer arduino al segundo, ojala me puedan ayudar, saludos

    Reply
  • Avatar

    javier

    hola necesito ayuda con un script… necesito pasar desde python una cadena y en arduino almacenarlas en un arreglo pero necesito hacer uso de las posisciones del arreglo para realizar comparaciones

    Reply
  • Avatar

    zoropotrocos

    Necesito recoger los caracteres TRANSACCION OK que se muestran en un lcd con bus i2c, y crear con estos datos un txt en el ordenador que contenga la fecha, la hora y el evento «TRANSACCIÓN OK» y así sucesivamente cada vez que en el display i2c se muestre la palabra, pero sólo si estas variables aparecen, de lo contrario no hará nada, seguirá escuchando el bus i2c en silencio, el display está en la 0x27 y los caracteres de la palabra clave TRANSACCIÓN OK que circularan en exadecimal,
    No se cómo empezar, si crear una base de datos y que ahí se guarde todos los datos en una Excel o crear el txt, necesito ayuda soy muy novato en arduino y estoy muy perdido.

    Graciar

    Reply
  • Avatar

    alex

    muy buenos ejemplos 🙂 se ocupa libreria para el atoi esque mi arduino no la detecta como palabra reservada me puedes orientar en eso porfavor?

    Reply
  • Avatar

    Ion

    Buenas, muy entendible tu explicacion sobre todo para los nuevos como yo en el entorno arduino, mi duda es si quiero enviar un dato decimal de tipo string desde labview quer condiciones necesitaria para lograr la comunicacion atravez de la conversion que proporcionaste, muchas gracias!

    Reply
  • Avatar

    Jesus

    Quisiera saber porque este codigo no ejecuta la tarea principal el cuales mover el servo….

    #include
    Servo Myservo;
    void setup()
    {
    Serial.begin(9600);
    Myservo.attach(9);
    }

    char cadena[3]; //Creamos un array que almacenará los caracteres que escribiremos en la consola del PC. Le asignamos un tope de caracteres, en este caso 30
    byte posicion=0; //Variable para cambiar la posición de los caracteres del array
    int valor; //Variable del valor entero

    void loop()
    {
    if(Serial.available()>0) //Nos dice si hay datos dentro del buffer
    {
    memset(cadena, 0,sizeof(cadena));//memset borra el contenido del array «cadena» desde la posición 0 hasta el final sizeof

    while(Serial.available()>0) //Mientras haya datos en el buffer ejecuta la función
    {
    delay(5); //Poner un pequeño delay para mejorar la recepción de datos
    cadena[posicion]=Serial.read();//Lee un carácter del string «cadena» de la «posicion», luego lee el siguiente carácter con «posicion++»
    posicion++;
    }

    valor=atoi(cadena);//Convertimos la cadena de caracteres en enteros
    Serial.println(valor);//Imprimimos el valor sumandole un valor +2
    Myservo.write(valor);
    posicion=0;//Ponemos la posicion a 0
    }

    }

    Reply
  • Avatar

    Mr Spock

    Hola. Necesito hacer un pequeño programa para un tema académico. Tengo un Arduino que mide la humedad y la temperatura, cada vez que pulso la letra h. Me da en el ordenador los dos valores en la misma fila. Necesito que el arduino esté trabajando de forma contínua y recogiendo datos en un fichero de texto, para luego poder trabajar esos datos. He mirado ya innumetables fotos y estoy algo desesperado. No tiene pinta de ser demasiado difícil, pero ya lo he intentado en Java y en Processing y lo único que he conseguido es que varios miembros de foros me regañen por no tener ni idea. .Agradecería vuestra ayuda. Muchas gracias.

    Reply
  • Avatar

    alfonso

    Hola , No se como hacer esto , me gustaria que los datos porcedentes del puerto serial del arduino poderlos utilizar en otra app, Es decir tengo un arduino con un programa de lectura RFID , y requiero utilizar los datos proveniendes de las tarjetas RFID en Filemaker , es posible utilizar estos datos , similar a un lector de codigo de barras . Es decir que al pasar la tarjeta automaticamente , me pegue los datos leidos de RFID , Se que talvez sea necesario hacer alguna aplicacion , no se en java o en alguno otro lenguaje para esto , alquien podria darme un consejo sobre esto

    Reply
  • Avatar

    Roger

    Hola a todos … estoy conectando una impresora térmica adafruit 597 al puerto TX-RX del RB, pero cuando enciendo la RB y ya esta encendida la impresora durante el arranque se imprimen un montón de caracteres sin sentido.
    Alguien sabe como evitar que se impriman si que tenga que desconectarse la impresora de la corriente.
    PD: por si se va la energía y vuelve no se impriman cosas raras.

    Reply
  • Avatar

    Raul

    muy bien explicado, y si quiero hacer esto pero con teclado matricial #include para luego usar este «valor» en un ciclo for, me explico?

    Reply
  • Pingback: Uso de puerto serie en Arduino | Aprendiendo Arduino

  • Avatar

    Oscar

    Hola a todos estoy conectando un pc con xplane a un arduino y si alguien me puede ayudar los datos que saca el pc son numeros separados por comas de los ejes de la aeronave y comienzan con $. Ejemplo $123.876,0.8777,95.9999 a un arduino mega nesecito capturar esos datos en registros independientes para su operacion

    Reply
  • Avatar

    Elias

    Buenas noches, excelente manual, sin embargo tengo un problema ¿Como puedo recibir un dato (T1) desde el PC y compararlo en una funcion como IF o WHILE e mi Arduino ?

    Reply
  • Avatar

    temo

    Buena tarde, estoy haciendo un proyecto con interface Serial y necesito borrar la pantalla terminando un case pero no se como hacerlo, ¿Podrían ayudarme?
    Gracias…

    Reply
  • Avatar

    gestioneinnovacionweb

    Buenos dias Sera que alguien me puede ayudar estoy en un proyecto con una celda de una balanza y desde i pc capturo el peso y no e podido calibrar bien el peso cuando hago un peso y lo quito no se quedan en ceros sera que hay alguna función para este problema

    Reply
  • Avatar

    Luisa

    Hola, me podeis ayudar con una duda respecto al puerto serie ?. Tengo creado un nuevo puerto serie en el arduino uno, he interconectado el puerto nuevo creado con el puerto por defecto del mismo arduino (tx-rx, rx-tx), quisiera saber como hacer un codigo para que al ingresar un caracter desde el monitor serie me devuelva el mismo caracter, para comprobar que el caracter que he ingresado pasa por el puerto serie por defecto y luego va al puerto serie creado y hace el flujo de vuelta devolviendome el mismo valor.

    Reply
  • Avatar

    eulises delangel corona

    quisiera saver como enviar algunos rangos y poder enviar otros pero q se borren los demas

    Reply
  • Avatar

    juan

    Hola, como recepciono datos float por arduino con comunicacion serial entre dos arduinos, el trasmisor arduino envia datos float de sensores y el receptor que obtenga el valor real que es el dato float saludos!!!!

    Reply
  • Avatar

    Dobby

    Una pregunta quiero enviar valores numéricos por los puertos serie del arduino; tengo dos arduinos conectados entre sí y quiero o necesito enviar los valores numéricos y queria saver si se podria hacer sin la necesidad de usar una variable que represente dicho valor numérico.

    Reply
  • Pingback: Uso del Puerto Serie en Arduino | Aprendiendo Arduino

  • Avatar

    kikecea

    Hola! estoy tratando de enviar unas instrucciones a través del puerto serie a un modulo de rfid, en algunos lados veo que lo hace con Serial.write, en otros me parece que usa un codigo hexadecimal o ASCII como comando para transmitirle las instrucciones de funcionamiento y en otros aparece serial.print aunque este ultimo creo que sería para comunicarse con el pc a través del monitor serie… podéis echarme un cable???

    Reply
  • Avatar

    Emanuel

    Hola, capas que me puedas ayudar, estoy realizando una comunicación entre Arduino y un modulo wifi ESP8266 esp-01, la comunicación la hago a través del puerto serial, cuando le hago el envio de comando al modulo wifi, este me responde alguna veces bien y otras mal (con símbolos raros), el tema es que si pruebo el modulo wifi fuera del Arduino con un modulo usb ttl, este responde correctamente. sera un problema del Arduino o de la librería de serial, uso la que viene con arduino #include

    Pd. Uso un Arduino uno.

    Reply
  • Pingback: ARDUINO + PROCESSING: PRIMEROS PASOS – Sobreviviendo a la materia Arquitectura de Computadoras

  • Avatar

    Yoshi

    Que tal!, estoy realizando una comunicación por medio de bluetooth en arduino en el que le envio desde VisualStudio una cadena que descompone el arduino y ejecuta una serie de acciones, pero desconozco como limpiar el puerto para enviar una nueva cadena. Hay alguna manera?

    Reply
  • Avatar

    roberto

    ola tengo un problema. estoy aciendo un letrero led con matrices led de 8×8 max 7219 y al mandar los sms por bluetooth usando monitor serial solo se muestran una sola vez quisiera ayuda para que el mensaje se guarde hasta recibir un nuevo mensaje

    Reply
  • Avatar

    Lucas

    Buenas tardes, les queria consultar lo siguiente: si solamente necesito recibir datos de un dispositivo, ¿es necesario tenes el par TX-Rx conectado al otro dispositivo? o ¿con tener conectado el RX al TX del otro dispositivo es suficiente?

    Saludos Cordiales

    Reply
  • Avatar

    Antonio Campos

    Hola buenas noches… Mi arduino es sencillo meto el código y no puedo mandarlo al puerto …. Que debo hacer?

    Reply
  • Avatar

    Jairo Castrillon

    Buenas noches tengo un problema….resulta que monto mi programa en arduino y cuando quiero verificar mediante el monitor serie si llega o no los datos del bluetooth me aparece siempre el mismo dato 255 ó ⸮; me podrían ayudar quiero que cada vez que pulse un botón me envié un carácter especifico… Muchas gracias

    int estado1=0;
    char estado;

    void setup(){

    pinMode(13,OUTPUT);
    pinMode(12,OUTPUT);
    digitalWrite(13,LOW);
    digitalWrite(12,LOW);

    Serial.begin(9600);
    delay(1000);
    }
    void loop(){
    if(Serial.available()>0){
    estado1 = Serial.read();
    estado=estado1;
    Serial.println(estado);
    Serial.println(estado1);
    }

    if(estado1== ‘a’){
    digitalWrite(13,HIGH);
    }
    if(estado1== ‘b’){
    digitalWrite(13,LOW);
    }
    delay(1000);
    }

    Reply
  • Avatar

    Juan

    Como hago para comunicarme en 4800 baudios, 7 bit de datos, paridad par y 2 bit de stop.
    Según el manual es Serial.begin (4800,7E2) ; o también Serial.begin (4800_7E2) ;
    Ninguna de las dos me funciona.

    Puedes ayudarme ?

    Reply

Deja un comentario