Steuerung Arduino von C# Poblem

Hallo Leute, Ich brauche eure Hilfe.
Ich möchte analoge Signale vom Arduino einlesen und schließlich über C# visualisieren lassen. ich habe das folgende Problem bekommen

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
in_data = serialPort1.ReadLine();
dl writeit = new dl (Write2Form);
Invoke(writeit, in_data);
//this.Invoke(new EventHandler(displaydata_event));

    }

    private void Write2Form(string indata)
    {
        {
            char firstchar;
            Single numdata;
            Single numdata2;
            Single volts;
            Single volts2;
            firstchar = in_data[0];

            switch (firstchar)

{
//AnalogRead 1. Value
case 'v':
numdata = Convert.ToSingle(in_data.Substring(0));
volts = numdata * 5 / 1024;
textBox3.Text = String.Format("{0:0.00 V}", volts);
progressBar4.Value = Convert.ToInt16(in_data.Substring(0));
break;

                //AnalogRead 2. Value 
                case 'f':
                    numdata2 = Convert.ToSingle(in_data.Substring(0));
                    volts2 = numdata2 * 5 / 1024;
                    textBox4.Text = String.Format("{0:0.00 V}", volts2);
                    progressBar5.Value = Convert.ToInt16(in_data.Substring(0));
                    break;

}

ich erhalte immer das Fehler dass numdata / numdata2 falsche Format hat.
Kann mir einer helfen

Nein. Zumindest nicht, bis wir den Inhalt von "in_data" kennen.

PS: Bitte die Code-Tags anpassen. Lässt sich wirklich schwierig so lesen.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        private string red;
        private string red1;
        private string in_data;

        public delegate void dl(string indata);
        private static int counter;
     
        //Connect to Arduino
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
            serialPort1.DataReceived += serialPort1_DataReceived;
        }
        
        //Receive Data from Arduino
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            in_data = serialPort1.ReadLine();
           dl writeit = new dl (Write2Form);
           Invoke(writeit, in_data);
            
        }



        private void Write2Form(string indata)
        {
            {
                char firstchar;
                Single numdata;
                Single numdata2;
               Single volts;
               Single volts2;
                firstchar = in_data[0];

                switch (firstchar)
               {

                    //Condition Buttonpressed
                   case 'p':
                       counter++;
                       textBox2.Text = Convert.ToString(counter);
                        pictureGruen.BringToFront();
                       break;

                   case 'b':
                       pictureGruen.SendToBack();

                        break;

                    //AnalogRead 1. Value
                    case 'v':
                        numdata = Convert.ToSingle(in_data.Substring(0));
                        volts = numdata * 5 / 1024;
                        textBox3.Text = String.Format("{0:0.00 V}", volts);
                        progressBar4.Value = Convert.ToInt16(in_data.Substring(0));
                        break;

                    //AnalogRead 2. Value 
                    case 'f':
                        numdata2 = Convert.ToSingle(in_data.Substring(0));
                       volts2 = numdata2 * 5 / 1024;
                       textBox4.Text = String.Format("{0:0.00 V}", volts2);
                       progressBar5.Value = Convert.ToInt16(in_data.Substring(0));
                       break;
               }
            }
        }

        
     
        //5VDC On
        private void buttonTurnOn_Click(object sender, EventArgs e)
        {
            serialPort1.Write("1");
            buttonTurnOn.BackColor = Color.Green;
            buttonTurnOff.BackColor = Color.Red;
            buttonTurnOn.Enabled = false;
            buttonTurnOff.Enabled = true;
            progressBar1.Value = 100;
        }
        
        //5VDC Off
        private void buttonTurnOff_Click(object sender, EventArgs e)
        {
            serialPort1.Write("2");
            buttonTurnOn.BackColor = Color.Gray;
            buttonTurnOff.BackColor = Color.Gray;
            buttonTurnOn.Enabled = true;
            buttonTurnOff.Enabled = false;
            progressBar1.Value = 0;
        }


        //AnalogWrite 1.Value
        private void RedVal_Scroll(object sender, EventArgs e)
        {
            red = "R" + RedVal.Value;
        }

        private void SendRedVal_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(red))
            {
                red = "R0";
            }
            serialPort1.Write(red);
        }

        //AnalogWrite 2.Value
        private void RedVal2_Scroll(object sender, EventArgs e)
        {
            red1 = "SS"+RedVal2.Value;
        }

        private void SendRedVal2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(red1))
            {
                red1 = "S0";
            }
            serialPort1.Write(red1);

        }

       
    }
}

Zwar kenne ich nach wie vor den Inhalt von "in_data" nicht, aber ich vermute mal, dass dort sowas wie "v5" drin stehen soll.
Im switch-case prüfst Du auf das "v" und anschließend holst Du Dir per SubString(0) nochmal das "v" um daraus ein Single zu machen.
Vermutlich reicht ein SubString(1). Siehe MSdocs/Substring()

Da C# auf dem PC läuft und nicht auf dem Arduino ist das hier ein Forum für Hardware die diese Programmiersprache nicht verwendet.

Für den TO wäre es zielführender in einem C# Forum nachzufragen weil das Problem auf der PC-Seite ist.

Grüße Uwe

Extra für so eine Kommunikation wurde der CMDMessenger erfunden