C# Hur tar jag emot värden från USB hela tiden?

Permalänk

C# Hur tar jag emot värden från USB hela tiden?

Hej!

Jag har gjort ett program som söker antalet COM portar, man får välja COM port och baudrate t.ex. 9600 bps.
Jag har lyckats skicka data till min Arduino och den svarar med att RX-lysdioden blinkar till, samt TX när den sänder något till mig.

Men jag vill kunna ta emot det den sänder till mig hela tiden. Så fort COM porten är öppen så ska den alltid välkommna allt som min Arduino skickar.

Jag har skapat en RichTextBox som jag vill att värden ska komma upp där med newline (\n). Hur gör jag då?
Måste jag multithreada?

Jag använder mig av NetFrameWork 2.0 för jag ska köra detta program på min Windows 98 SE.

Permalänk

C# Hur kan jag se värderna från USB i en RichTextBox?

Hej!

Jag ska ta emot värden från mitt USB uttag. Jag har gjort ett program som kan skicka värden och det fungerar OK!
Men jag vill även kunna ta emot värden så länge jag är uppkopplad. Alla värden från min Arduino ska skickas via USB till mitt program och landa i en RichTextBox.

Hur gör jag?

Jag har använt mig av denna manual för jag använder mig av NetFramework 2.0 då jag ska köra programmet på Windows 98 SE.

http://www.codeproject.com/Articles/8605/Serial-Communication...

Permalänk
Hedersmedlem

Smidigast är att lyssna på DataReceived
http://msdn.microsoft.com/en-us/library/system.io.ports.seria...

*Trådar sammanfogade*

Permalänk

Oj! Det blev fel på mitt internet så det blev väll dubbelpost på något konstigt sätt.

Permalänk

Nu har jag lyckas fixat detta så att jag kan se vad jag får. Men dock så "loopar" det inte hela tiden, medan jag kan göra andra saker.

Visst är det threadning jag måste hålla på med då?

Fan vad C# är skoj! C++ måste fan vara en plåga.
C och C# är mina favoritspråk nu. Så jäkla simpla och rena.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Nu har jag lyckas fixat detta så att jag kan se vad jag får. Men dock så "loopar" det inte hela tiden, medan jag kan göra andra saker.

Visst är det threadning jag måste hålla på med då?

Man kan använda trådar också (enklast är i så fall ett BackgroundWorker-objekt (finns bland formulärkontrollerna)), men det där skall också fungera (det löser trådningen automatiskt). Läser du in allt som finns? Det är inte säkert att man blir meddelad när nya saker kommer in om det inte är tomt i bufferten.

Skrivet av heretic16:

Fan vad C# är skoj! C++ måste fan vara en plåga.
C och C# är mina favoritspråk nu. Så jäkla simpla och rena.

Hade du testat Qt till exempel? Det kan bli ganska likt:

c#

public Form1() { InitializeComponent(); serialport = new SerialPort(); serialport.DataReceived += serialport_DataReceived; } void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e) { richTextBox1.Invoke((MethodInvoker)delegate { richTextBox1.AppendText(serialport.ReadExisting()); }); }

Qt:

Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); serialport = new QSerialPort(this); QObject::connect(serialport, &QSerialPort::readyRead, this, &Dialog::serialport_DataReceived); } void Dialog::serialport_DataReceived() { ui->textEdit->append(serialport->readAll()); }

Permalänk

Det är just -> och :: samt ^ lite här och där som förvirrar mig.
Jag tycker att C# har mer likheter med C än C++, trots att C# är stora och grova drag en kopia av Java.

Permalänk

Fast det kan ju vara bra att jag fokuserar på att lära mig C++ också

EDIT: Jag testade nyss VC++ och det var...hemskt. T.o.m C är lättare.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Jag testade nyss VC++ och det var...hemskt. T.o.m C är lättare.

Om du mear c++/CLI (Visual c++ är bara utvecklingsverktyget) så är det nog inte många som anser att det blir särskilt vackert, men det är ju också någon form av kompromiss för att blanda c++ och .net. Qt är snyggare.

Permalänk
Skrivet av Elgot:

Om du mear c++/CLI (Visual c++ är bara utvecklingsverktyget) så är det nog inte många som anser att det blir särskilt vackert, men det är ju också någon form av kompromiss för att blanda c++ och .net. Qt är snyggare.

Jag kan hålla med att QT verkar vara snyggare än VC++

Visst kan jag göra så att en funktion loopar hela tiden, trots jag kan göra något annat också?
Jag har en funktion som läser av värderna i COM porten i kön som dessa kommer i, men jag vill att denna loop ska loopa så fort man har sagt åt den att loopa, eller stanna när man säger åt den att stanna.

Jag använder bara C# 2005 för att just skapa program åt min Windows 98. Sen räcker 2.0 framework långt för mig. Jag ska bara hålla på med grunden endast!

Permalänk
Hedersmedlem
Skrivet av heretic16:

Jag kan hålla med att QT verkar vara snyggare än VC++

C++/CLI alltså. Visual c++ är bara microsofts miljö för utveckling i c++, och även om den har stöd för c++/cli behöver man inte använda det. Det går bra att använda Qt med vc++ också.

Skrivet av heretic16:

Visst kan jag göra så att en funktion loopar hela tiden, trots jag kan göra något annat också?
Jag har en funktion som läser av värderna i COM porten i kön som dessa kommer i, men jag vill att denna loop ska loopa så fort man har sagt åt den att loopa, eller stanna när man säger åt den att stanna.

Det fungerar som du vill, fast du måste som sagt läsa allt som finns. Har du testat att göra precis som i mitt exempel ovan?

Permalänk

Vad gör det C# exemplet då, förutom att ta emot värden från COM porten?

Permalänk
Hedersmedlem
Skrivet av heretic16:

Vad gör det C# exemplet då, förutom att ta emot värden från COM porten?

Båda exemplen läser kontinuerligt från en serieport och lägger den mottagna texten sist i en textruta.
I c#-fallet måste man även tänka på att inte röra användargränssnittet från bakgrundstrådar (se msdn-sidan ovan).