¿Qué sistema de codificación envía Arduino al puerto serie?

Hola:

Quiero saber el sistema de codificación envía Arduino al puerto serie.

   int valorPot=0;
     
    void setup(){ Serial.begin(115200); }
     
    void loop(){
         valorPot=analogRead(2);
         Serial.println(valorPot);
         delay(100); // 0.1 segundos.
    }

El PC puede detectar o enviar algunos como estos.

https://msdn.microsoft.com/es-es/library/system.io.ports.serialport.encoding%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

Saludos.

El puerto serie del Arduino no tiene codificacion alguna. Tiene una configuración x defecto BAUD N 8 1 y le puede agregar la codificación que gustes.

Buenas:

No es el propio puerto, sino a la hora de enviar datos.

Saludos.

A la hora de enviarlos los envia como tu decides. O acaso Arduino te pregunta si los vas a enviar de tal o cual modo? Son caracteres o bytes. Estan en formato ASCII si usas Serial.print y en hexadecimal cuando usas Serial.write

Metaconta, eres un forero activo, que hace tutoriales de puertos Serie y muy buenos. Es mas no conozco a nadie que se interese tanto como tu en el tema. Porque no lo investigaste por tu cuenta? No me parece una duda que no puedas responder con 5 seg de Google.

Es mas durante tus tutoriales nunca tuviste que elegir codificación alguna o si?

Ahora piensa en esto. Si tu envias datos seriales usando print o println del otro lado recibes ASCII. Si estas en un entorno como RS485 usando MODBUS usas Serial.write y envias datos codificados en hexadecimal. En ESTE caso en protocolo MODBUS. Ahi te doy dos casos simples donde puedes ver como cambia la cosa. Pero el protocolo MODBUS hay que escribirlo Y enviar datos en hexadecimal solo requiere usar Serial.write(dato) o sea sin protocolo. Puede enviarte ASCII usando Serial.write y leerlo interpretarlo como tal del lado del PC.

Espero te sirva mi respuesta.

Hola:

Lo pregunto porque me he llevado sorprecillas. Pensé que el println te envía el \n, para mi sorpresa envía el \r. en el cual me dice recibe esto en C#.

635\r.

Debo usar delimitadores.

Volviéndome loco de la cabeza con el \n y es \r. Se puede mirar el cuadro aquí para los curiosos.

|500x421

Como estoy acostumbrado aún con los PIC que envían mucho en hex si o si trabajando en asm, aquí me olvidé de muchas cosas.

En algunos casos sobre tu pregunta si he usado codificación, pues si y no, depende. Si se usa para PIC de forma interna o algo específico como comandos, hay que usar hexadecimales siguiendo esta norma en C#.

private void button_t_Click(object sender, EventArgs e)
{
    byte[] mBuffer = new byte[5];
    mBuffer[0] = 0x74;
    mBuffer[1] = 0x75;
    mBuffer[2] = 0x89;
    mBuffer[3] = 0x20;
    mBuffer[4] = 0x6C;
    serialPort1.Write(mBuffer, 0, mBuffer.Length);
}

Como puedes ver arriba, usa el código exacto, sin problemas si no sabes que codificación usar.

Dentro de la codificación hay varios tipos. Si quiero enviar codificación ASCII, tengo que saber que en el otro lado recibe ASCII también, no UTF8 por poner un ejemplo, sobre todo si se envías tramas de bytes para textos. Para asegurarse, hacer pruebas. Lo comento porque hay dispositivos cerrado por fabricantes que debes saber como es, haciendo pruebas con codificaciones o con un datalogger o simplemente con un analizador lógico.

Ejemplo enviar codificación en ASCII en este caso.

private void button_b_Click(object sender, EventArgs e)
{
    byte[] mBuffer = Encoding.ASCII.GetBytes("Hello World");
    serialPort1.Write(mBuffer, 0, mBuffer.Length);
}

También a la hora de recibir puedes usar codificación usando C# para este caso.

Aunque no lo parezca, estoy hasta con pequeños problemas que tengo que resolver antes de hacer el siguiente tutorial sobre el puerto serie y entradas analógicas con Arduino, me lo piden por todas partes a pesar que ejemplos hay también, por todas partes. ;)

Mientras hsgo pruebas y pruebas con C#, compraré un servo motor para hacer otros ejemplos, a parte del brillo del led. Como recibe datos constantemente, me da problemas en algunas cosas que antes debo resolver sin problemas para luego plasmar estos conocimentos en un pdf. Todo lo que sea entrada analógico como usar sensores de humedad por poner ejemplo, habrá tutorial entrada analógica y en otro tutorial a parte como salida analógica, lo mismo hice con entrada digital y salida digital.

Saludos.

No estoy para nada de acuerdo con tu afirmación y no puedo explicar lo que afirmas leer en C#.

Serial.printlln() imprimirán '\r' y '\n', que es un caracter retorno de carro (0x0A) seguido de un caracter de nueva linea (0x0D) Yo mismo he visto esos caracteres usando Putty u otro programas terminales. http://www.arduino.cc/en/Serial/Println

Cierto.

Ahora me funciona la barra de estado del 0 al 100 % en modo consola sin problemas.

Les dejo el programa este de prueba hecho en modo consola, también otros hecho en modo visual. Por ahora en C#, más adelante C++ .net y VB .net.

Miren la foto, si quieren se los paso por aquí el ejecutable.

Saludos.

552 mensajes y adjuntas una imagen!!! Sin palabras.