Arduino Uno serial monitor gegevens via usb op pc.

Arduino specifieke Software
Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor FonzieBonzo » 28 Jul 2023, 14:38

Hi Frans,


Dat is gek, in je eigen voorbeeld gebruik je namelijk ook SerialPort, is het een Winform project waar je in zit?
Als je naar >project >propperties gaat, wat heb je daar bij "target framework" staan, ik heb bij het project >NET 6.0 ingesteld.
Ik heb hier ook VS2022. Zou je using System.IO.Ports; eens weg willen halen, vervolgens op de foutmelding gaan staan en klikken op de suggestie/installatie die VS jou geeft.

Gr, Fonzie

Advertisement

Berichten: 17
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor frans36 » 30 Jul 2023, 21:42

Beste FonzieBonzo,

Bedankt voor uw reactie.

Ik heb het gene gedaan uit uw laatste berichtje.
Ik heb de using system IO.ports verwijdert en op de foutmelding gaan staan daarna ging VS
een oplossing doen en system IO.ports zelf toevoegen.
Dit probleempje is uit de weg.

Echter heb ik nog het volgende.
Als ik de serial monitor start in de arduino Ide.
Dan krijg ik de gegevens te zien van mijn 2 temperatuur sensors en de fan speed.
Deze sensors en fan speed werkt perfect.

zodra ik nu in VS form1 de gegevens in laat lezen met uw code via VS.
Dan Krijg ik maar 1 temperatuur sensor te zien en de waarde van de fam speed.

terwijl ik als ik weer overschakel naar de arduino IDE dan zie ik gewoon alles qua waarde's

Gaat er iets niet goed in de code van VS zodat niet alle waarde's worden weer gegeven?

Graag hoor ik nog even van U.

Mvg,

Frans36

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor FonzieBonzo » 31 Jul 2023, 15:52

Hi,

Ik denk dat de waarde van textbox1.text zo snel wordt overschreven met een nieuwe waarde dat het met het blote oog niet is te zien.

Omdat je het waarschijnlijk toch in verschillende textboxen wilt hebben, kun je aan de Arduino kant naar de serialport schrijven beginnend met tmp1: tmp2: fans:

Aan de C# kant vervang je MainForm_DataReceivedEvent met :

csharp code
private void MainForm_DataReceivedEvent(object sender, EventArgs e)
{
// Behandel de ontvangen data hier
// Toon de ontvangen data in het het juiste tekstvak textBox1,textBox2 of textBox3 en al het overige in textBox4

if (receivedData.Length > 5)
{
switch (receivedData.Substring(0, 4))
{
case "tmp1:":
this.Invoke((MethodInvoker)(() => textBox1.Text = receivedData));
break;
case "tmp2:":
this.Invoke((MethodInvoker)(() => textBox2.Text = receivedData));
break;
case "fans:":
this.Invoke((MethodInvoker)(() => textBox3.Text = receivedData));
break;
default:
// eventueel overige ontvangen berichten
this.Invoke((MethodInvoker)(() => textBox4.Text += receivedData));
break;
}
}
}



Gr,
Fonzie

Berichten: 17
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor frans36 » 04 Aug 2023, 11:58

Beste FonzieBonzo,

Bedankt voor uw nieuwe code.
Hier heb ik het geheel mee aan de gang gekregen.

echter heb ik nog even een vraagje wat eigenlijk thuis mage horne bij VS 2022

Ik probeer via vs een cmd.exe te openen om dan daarna een .exe file te openen.
echter wil het maar niet lukken om is VS na dat de Cmd.exe is gestart een door start te maken naar het .exe bestand
zodat er een programmaatje open gezet wordt en gebruikt kan worden.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Diagnostics;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinFormsRunExternalProgram
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ProcessStartInfo ps = new ProcessStartInfo();
ps.FileName = "cmd.exe";
ps.WindowStyle = ProcessWindowStyle.Normal;
ps.Arguments = @"/c md C:\RelayCmd.exe";
Process.Start(ps);

}
}
}

elke tip is welkom zodat het programmatje RelayCmd.exe gaat draaien in het cmd scherm.

ik hoor graag van U/jullie.

Mvg,

Frans36

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor FonzieBonzo » 05 Aug 2023, 08:59

Hi,


Volgens mij is ProcessStartInfo zo slim dat hij zelf weet of RelayCmd.exe een console of from app is.
Je kunt dus bij ps.FileName "c:\RelayCmd.exe" zetten en ps.Arguments leeg laten.

Als het niet werkt, krijg je dan een foutmelding zo ja welke?

Gr,
Fonzie

Berichten: 17
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor frans36 » 07 Aug 2023, 20:33

Beste Fonzie,

Bedankt nogmaals voor uw reactie.
ik heb het aan de gang.

ik kom nog nog met een probleem met de serial port vanaf de arduino uno.

ik heb in Visual studio alle info van de serial port qua waardes correct.
dit zie ik ook met de visual studio serial monitor 2.

Echter gaat het niet goed in de verwerking met de textboxen.
in textbox 1 zou temperatuur sensor 1 zijn waarde mogen weergeven. dit gaat correct.
in textbox 2 zou temperatuur sensor 2 zijn waarde mogen weergeven. DIT GAAT NIET GOED. hij is er 1 a 2 seconden en dan weer weg en de box blijft leeg.
in textbox 3 is de fan speed in procenten weer gegeven. dit gaat correct.
in textbox 4 zou de pomp status weer gegeven moeten zijn. dit gaat de ene keer wel goed de andere keer weer niet.
in textbox 5 is de overige info die naar buiten wordt gegooit als het niet wordt geplaats na het splitsen in het juiste hokje.

dit is de code van VS 2022.

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


namespace WinFormsApp1
{
public partial class Form1 : Form
{
private SerialPort serialPort;
private string receivedData = "";

private event EventHandler DataReceivedEvent;

public Form1()
{
InitializeComponent();

// Initialiseer het SerialPort object
serialPort = new SerialPort("COM3", 115200);
serialPort.DataReceived += SerialPort_DataReceived;

// Abonneer op het DataReceivedEvent
DataReceivedEvent += MainForm_DataReceivedEvent;

try
{
// Open de verbinding met de Arduino
serialPort.Open();
}
catch (Exception ex)
{
MessageBox.Show("Fout bij het openen van de seriële poort: " + ex.Message);
}
}

private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Lees de data van de Arduino
string data = serialPort.ReadExisting();

// Voeg de data toe aan de globale string
receivedData += data;

// Controleer of het "return" teken is gedetecteerd
if (receivedData.Contains("\r\n"))
{
// Verhoog het DataReceivedEvent
OnDataReceived(EventArgs.Empty);

// Maak de globale string leeg na het verwerken van het event
receivedData = "";
}
}

protected virtual void OnDataReceived(EventArgs e)
{
DataReceivedEvent?.Invoke(this, e);
}

private void MainForm_DataReceivedEvent(object sender, EventArgs e)
{
// Behandel de ontvangen data hier
// Toon de ontvangen data in het het juiste tekstvak textBox1,textBox2 of textBox3 en al het overige in textBox4

if (receivedData.Length > 5)
{
string unfilteredReceivedData = receivedData;
string[] receivedList = unfilteredReceivedData.Split(
new string[]
{
"\r\n",
"\r",
"\n"
},
StringSplitOptions.None
);

foreach (string messageData in receivedList)
{
string[] messageList = messageData.Split(": ");

if (messageList.Length <= 1)
continue;

switch (messageList[0])
{
case "TMP 1":
this.Invoke((MethodInvoker)(() => textBox1.Text = messageList[1]));
break;
case "TMP 2":
this.Invoke((MethodInvoker)(() => textBox2.Text = messageList[1]));
break;
case "FAN SPEED":
this.Invoke((MethodInvoker)(() => textBox3.Text = messageList[1]));
break;
case "PUMP":
this.Invoke((MethodInvoker)(() => textBox4.Text = messageList[1]));
break;
default:
this.Invoke((MethodInvoker)(() => textBox5.Text = receivedData));
break;
}
}
}
}





protected override void OnFormClosing(FormClosingEventArgs e)
{
// Sluit de seriële poort wanneer het formulier wordt gesloten
if (serialPort.IsOpen)
serialPort.Close();

base.OnFormClosing(e);
}


Ik vraag me af wat hier nu mis gaat.
Is het een timings probleem van het in lezen tussen de arduino uno en VS 2022.
maar dat verwacht ik aan de anderkant ook weer niet omdat ik in de serial monitor 2 van VS wel alle data mooi binnen krijg.

Graag hoor ik even wat de eventuele oplossing zou mogen zijn.
Het zijn wel 2 bewerkte delen qua codes. heb er een plit aan toegevoegd. mss niet op de netste wijze.

Mvg,
Frans

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Arduino Uno serial monitor gegevens via usb op pc.

Berichtdoor FonzieBonzo » 09 Aug 2023, 08:55

Hi Frans,

Zou je het stukje eens op comment kunnen zetten:
csharp code
if (receivedData.Length > 5)
{
string unfilteredReceivedData = receivedData;
string[] receivedList = unfilteredReceivedData.Split(
new string[]
{
"\r\n",
"\r",
"\n"
},
StringSplitOptions.None
);


MainForm_DataReceivedEvent zal namelijk nooit meer dat 1 \r of \n ontvangen en deze komt altijd aan het eind van de string.

ps. Als je op het forum code plaats kun je het beste eerst via het menu "select syntax" aanklikken en de code er tussen zetten. De code wordt dan leesbaar op het forum weergegeven

Gr, Fonzie

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: apovicarcezih, Google [Bot] en 105 gasten