Buenas:
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.
(https://social.msdn.microsoft.com/Forums/getfile/1655979)
Ver imagen (https://social.msdn.microsoft.com/Forums/getfile/1655979).
Código consola C#:
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;
Thread readThread = new Thread(Leer);
// 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.
Puerto_serie = new SerialPort();
// 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.
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.
Se tiene que ver así.
Al lados números recibidos desde el puerto.
(https://social.msdn.microsoft.com/Forums/getfile/1655584)