Me funciona tu código así tal como estás, no cuando me recibe en el puerto serie.
Es responsabilidad tuya adaptar el código que mostré (el cual, como tu has dicho,
fuciona), a tu código con el arduino.
La lógica del código creo que es bastante clara, solo debes fijarte en como obtengo el porcentaje y el voltaje mediante las operaciones aritméticas de esas dos variables, y hacer exactamente lo mismo en tu código.
por cada muestra recibida del 0 al 1023, cualquier valor entregado tiene un retorno de carro \n.
Te sugiero no utilizar indexers de
Arrays con la función
String.Split(), puedes reemplazar esa engorrosa metodología por el método
String.TrimEnd() para eliminar los caracteres indeseados del final del string (los cuales puedes encontrar en la class
Microsoft.VisualBasic.ControlChars (y antes de que lo preguntes, si, se puede y es recomendable usar esa Class desde C#, aunque tambien puedes usar los caracteres que representan esas constantes y ya está).
Por cierto, me encantó visualmente lo que hiciste.
Visualmente hablando es un simple Form por defecto sin ningún tipo de personalización, simplemente el fondo del form sale de ese color por que Windows administra la colorización de las aplicaciones según la colorización del theme visual de Windows, a esto se le llama estilos visuales de la aplicación (o
Visual Styles ), a menos que uses colores arbitraros para tu app claro está, como por ejemplo ese label tuyo que pusiste de amarillo.
1) ¿Con qué compilador lo hiciste?
Toda aplicación de
Visual Studio se compila con el compilador de .Net Framework,
msbuild.exe (que internamente llama a
vbc.exe para Vb.Net, o
csc.exe para C#. )
¿Qué estas intentando preguntar exactamente?.
¿Con Visual C# 2105 se puede cambiar el color del progressBar? (Nunca me ha salido, si de los label, ya que los progress siempre lo veo verde y quiero cambiarlo azul o naranja por decir algo).
Si, solo debes heredar la Class
ProgressBar, activar el modo de dibujado de usuario, y bibujar el rectángulo, pero ten en cuenta que puede requerir mucho más esfuerzo que eso, dependiendo de tus necesidades, ya que al personalizar, se pierden los efectos o estilos visuales del control, sobre todo esos destellos luminosos que Windows pone sobre la barra de progeso que son tan chulos.
De todas formas alguien experto en GDI+ podría simular los destellos (yo no llego a tanto), hay barras de progeso muy avanzadas en
CodeProject.
Vb.Net:
Public Class CustomProgressBar : Inherits ProgressBar
Public Sub New()
MyBase.BackColor = Color.LimeGreen ' ProgressBar.DefaultBackColor
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.SetStyle(ControlStyles.SupportsTransparentBackColor, False)
Me.SetStyle(ControlStyles.UserPaint, True)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim rc As Rectangle = e.ClipRectangle
rc.Width = (((rc.Width * MyBase.Value) \ MyBase.Maximum) - 4)
rc.Height = (rc.Height - 4)
If (ProgressBarRenderer.IsSupported) Then
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle)
End If
Using br As New SolidBrush(MyBase.BackColor)
e.Graphics.FillRectangle(br, 2, 2, rc.Width, rc.Height)
End Using
End Sub
End Class
Traducción online a C#:
public class ElektroProgressBar : ProgressBar {
public ElektroProgressBar() {
base.BackColor = Color.LimeGreen;
// ProgressBar.DefaultBackColor
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, false);
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = e.ClipRectangle;
rc.Width = (((rc.Width * base.Value) / base.Maximum) - 4);
rc.Height = (rc.Height - 4);
if ((ProgressBarRenderer.IsSupported)) {
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
}
using (SolidBrush br
= new SolidBrush
(base.BackColor)) { e.Graphics.FillRectangle(br, 2, 2, rc.Width, rc.Height);
}
}
}
//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================
Si quieres conservar los efectos visuales del control, puedes recurrir a la API de Windows para especificar el estado de la barra de progeso (normal, pausado, error, indeterminado), cada estado está ligado a un color por defecto en tu tema visual de Windows, esto quiere decir que los colores que puedes usar son muy limitados y que además dependen del tema visual del usuario (no recuerdo los colores del tema Aero, pero creo que eran verde, amarillo, rojo y verde otra vez), lo puedes hacer de manera muy sencilla con la librería de
Microsoft WindowsAPICodePack, no recuerdo exactamente con que funciones de la API de Windows se hacia.
EDITO: Acabo de recordar (o mejor dicho, encontrar) como se hacia con la WinAPI, con la función
SendMessage:
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l);
SendMessage(MyProgressBar.Handle, 1040, (IntPtr)(del 1 al 4 son los diferentes estados), IntPtr.Zero);
Saludos