Mi idea es que lea datos desde el puerto serie que viene de Arduino. La interfaz está hecho con Consola de C# 2019.
Como se puede ver en la imagen, lo datos no se ven correctamente.
Ver imagen.
Código consola C#:
Código
using System; using System.IO; using System.IO.Ports; using System.Text; using System.Threading; namespace Lectura_seis_potenciometros_Arduino_consola_01 { class Program { // Utilizaremos un string "Recibidos" como buffer de recepción. public static string Recibidos; public static bool _continua; public static SerialPort Puerto_serie; static void Main(string[] args) { string COM = ""; StringComparer comparaString = StringComparer.OrdinalIgnoreCase; // Título de la ventana. Console.Title = "Lectura 6 potenciómetros desde Arduino"; // Tamaño de la ventana, x, y. Console.SetWindowSize(45, 20); // Color de fondo. Console.BackgroundColor = ConsoleColor.Gray; // Color de las letras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla y dejarlo todo gris. Console.Clear(); // Visible el cursor. Console.CursorVisible = true; // Crear un nuevo objeto SerialPort con la configuración predeterminada. // Obtenga una lista de nombres de puertos serie. string[] puertos = SerialPort.GetPortNames(); Console.WriteLine("Se encontraron los siguientes puertos series:"); // Muestre el nombre de cada puerto en la consola. foreach (string puerto in puertos) { Console.WriteLine(puerto); } // Configuración. Console.Write(@" Introduzca un número para seleccionar puerto COM. Por ejemplo el 4, sería COM4. Puerto: "); COM = Console.ReadLine(); // Escribir el número del puerto. Console.Clear(); // Limpiar pantalla. Puerto_serie.PortName = "COM" + COM; // Número del puerto serie. // Configuración del puerto serie. Puerto_serie.BaudRate = 115200; Puerto_serie.Parity = Parity.None; Puerto_serie.StopBits = StopBits.One; Puerto_serie.DataBits = 8; Puerto_serie.Handshake = Handshake.None; Puerto_serie.RtsEnable = true; // Establecer los tiempos de espera de lectura / escritura. //Puerto_serie.ReadTimeout = 500; // 500 // Milisegundos. //Puerto_serie.WriteTimeout = 500; // 500 // Comprueba si puede abrir el puerto serie. try { Puerto_serie.Open(); // Abrir el puerto serie. } // En caso que diera algún error como que no encuentra el puerto seleccionado // muestra una excepción. catch (IOException) { Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo. Console.CursorVisible = false; Console.SetCursorPosition(16, 6); Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe o no lo encuentra."); Console.ReadKey(); // Pulse cualquier tecla. Environment.Exit(1); // Salir de la aplicación. } _continua = true; readThread.Start(); // Cursos invisible. Console.CursorVisible = false; // Mostrar dibujo en pantalla. Console.SetCursorPosition(3, 3); Console.Write("Potenciómetro A0: "); Console.SetCursorPosition(3, 5); Console.Write("Potenciómetro A1: "); Console.SetCursorPosition(3, 7); Console.Write("Potenciómetro A2: "); Console.SetCursorPosition(3, 9); Console.Write("Potenciómetro A3: "); Console.SetCursorPosition(3, 11); Console.Write("Potenciómetro A4: "); Console.SetCursorPosition(3, 13); Console.Write("Potenciómetro A5: "); // Posición para empezar a dibijar las ─. Console.SetCursorPosition(0, 15); // Generar línea. for (int i = 0; i <= 44; i++) { Console.Write("─"); // ASCII: Alt + 196: ─ } Console.SetCursorPosition(17, 17); Console.Write("Puerto: COM" + COM); // Bloquea el subproceso. readThread.Join(); // Cierra el puerto serie. Puerto_serie.Close(); } // Lee mensaje recibido. public static void Leer() { // Si _continue es true se ejecuta todas las instrucciones dentro de while. while (_continua) // _continua { try { // Almacena en la variable mensaje cualquier caracter o mensaje recibido. Recibidos = Puerto_serie.ReadLine(); // Muestra en pantalla mensaje recibido. Console.WriteLine(Recibidos); string[] datosArray = Recibidos.Split(','); if (datosArray.Length == 6) // 6 potenciómetros. { Console.SetCursorPosition(20, 3); Console.Write(datosArray[0]); // Entrada analógica A0. Console.SetCursorPosition(20, 5); Console.Write(datosArray[1]); // Entrada analógica A1. Console.SetCursorPosition(20, 7); Console.Write(datosArray[2]); // Entrada analógica A2. Console.SetCursorPosition(20, 9); Console.Write(datosArray[3]); // Entrada analógica A3. Console.SetCursorPosition(20, 11); Console.Write(datosArray[4]); // Entrada analógica A4. Console.SetCursorPosition(20, 13); Console.Write(datosArray[5]); // Entrada analógica A5. } // Limpiar buffer. Recibidos = ""; } catch (TimeoutException) { Console.WriteLine("ERROR"); } } } } }
Código Arduino.
Código
int pinA0 = A0; int pinA1 = A1; int pinA2 = A2; int pinA3 = A3; int pinA4 = A4; int pinA5 = A5; int valorPotA0 = 0; int valorPotA1 = 0; int valorPotA2 = 0; int valorPotA3 = 0; int valorPotA4 = 0; int valorPotA5 = 0; void setup() { Serial.begin(115200); pinMode(pinA0, INPUT); pinMode(pinA1, INPUT); pinMode(pinA2, INPUT); pinMode(pinA3, INPUT); pinMode(pinA4, INPUT); pinMode(pinA5, INPUT); } void loop() { valorPotA0 = analogRead(pinA0); valorPotA1 = analogRead(pinA1); valorPotA2 = analogRead(pinA2); valorPotA3 = analogRead(pinA3); valorPotA4 = analogRead(pinA4); valorPotA5 = analogRead(pinA5); Serial.print(valorPotA0); Serial.print(","); Serial.print(valorPotA1); Serial.print(","); Serial.print(valorPotA2); Serial.print(","); Serial.print(valorPotA3); Serial.print(","); Serial.print(valorPotA4); Serial.print(","); Serial.println(valorPotA5); delay(100); // 100 mili segundos o 0.1 segundos.. }
Los datos del potenciómetro debe mostrarse en su etiqueta del 0 al 1023, por ejemplo:
Potenciómetro A0: 785
Y no un desorden como muestra arriba.
¿Alguna idea?
Que tengas buen día.