Mehrere Werte über Serielle Schnittstelle an Arduino ausgeben
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von ebrithil.
-
-
Ja ich denke er erkennt deine Texteingabe Falsch wegen deiner nicht sehr origenellen Auswertung des Textes ( soll nicht abwertend klingen sry)
-
-
überprüfen ob $ am Anfang steht oder nicht
-
Hmm jetzt geht nichts mehr, habe es mit dem $ versucht immer noh nichts.
Man ich sehe den Wald vor lauter bäume nicht mehr :(.
Hier mein Arduino Code:
C-Quellcode
- /*Code zum Empfangen und Senden von Daten über Serialport (GUI<-> Arduino) */
- //Globale Variablen
- /*----------Varaiblen fürs Senden---------------------------------------*/
- const int ledPin1= 22; //Mit Digital PIN 22 verbundene Led (senden)
- /*----------------------------------------------------------------------*/
- /*----------------SD Karte----------------------------------------------*/
- /* Verbindung - SPI Mega2560
- ** MISO - pin 51
- **MOSI - pin 50
- **CLK - pin 52
- **CS- PIN 53
- !! somit pin 53 als output auch fstlegen*/
- #include <SD.h>
- int const chipSelect=53; //CS-Pin
- char inText[300];//Char array
- int index; //index für Array
- char txtByte; //Variable zum speichern
- File Datei;
- /*----------Variablen fürs Empfangen------------------------------------*/
- const int ledPin2= 23; //MIt Digital PIN 23 verbundene Led (empfangen)
- /*----------------------------------------------------------------------*/
- /*-----------Auswahlvariable für Swtich-Case----------------------------*/
- int inByte; //Integervariable für Case-Verfahren
- /*----------------------------------------------------------------------*/
- /*----------- Hier beginnt das Programm---------------------------------*/
- void setup()
- {
- Serial.begin(9600); //Serialport öffnen mit baudrate 9600
- pinMode(ledPin1, OUTPUT); //ledPin1(senden LED), wird als Output gesetzt
- pinMode(ledPin2, OUTPUT); //ledPin2 (empf. LED), wird als Output gesetzt
- pinMode(53,OUTPUT);
- }
- void loop()
- {
- if (Serial.available()>0) //Prüfen , ob mindestens ein Zeichen im Port vorhanden ist (Hier prüfe ich , ob senden oder EMpfangen)
- {
- inByte = Serial.read(); //lese zeichen au und speichere in chr vom typ char
- //wahl = int(chr); //Umwandeln in lesbares
- }
- /*+++++++++++++++++++++++++LED-Rot-> Arduino Sendet+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- if (inByte == 36) //$ in ASCII
- {
- blink_send();
- //Aufruf der Funktion zum Auslesen der SD karte
- SD_read();
- }//endif
- /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- /*++++++++++++++++++++++++++++++++++++Arduino empfängt+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- else
- {
- blink_receive();
- if (Serial.available() > 0)
- {
- txtByte = Serial.read();
- if (txtByte == 13) //Enter kommt
- {
- Serial.print("SD Card Initializing.....");
- if (! SD.begin(chipSelect))
- {
- Serial.println("Initialization failed");
- return;
- }//endNif initialize
- Serial.print("Card initialized.");
- Datei = SD.open("commands.txt",FILE_WRITE);
- Datei.print(inText);
- if (!Datei)
- {
- Serial.println("Error to open commands.txt");
- }//endif error
- //Nach verarbeitung muss array wieder initialisiert werden
- index=0;
- memset(&inText[0], 0, sizeof(inText));
- } //endif enter
- else
- {
- if (index <300)
- {
- inText[index] = txtByte; //trage inhalt von Variable txtbyte in inTextArray
- index +=1;
- }//endif indexüberprüfung
- } //else end
- }//end if serial available
- }//endif falls kein "$" kommt
- }//end void loop
- /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- /*---------------------funktion für das Blinken beim senden an GUI----------------------*/
- /*---------------------Blink funktion 0,5sek an und 0,5sek aus--------------------------*/
- /*Rote LED*/
- void blink_send()
- {
- digitalWrite(ledPin1, HIGH); //leuchtet
- delay(500); //leuchtet 0,5 sek
- digitalWrite(ledPin1, LOW); //aus
- delay(500);
- }
- /*-------------------------------------------------------------------------------------*/
- /*----------Funktion die in Case 2 aufegrufen wird, damit LED blinkt-------------------*/
- /*gelbe LED*/
- void blink_receive()
- {
- digitalWrite(ledPin2, HIGH); //leuchtet
- delay(500); // 0,5sek an
- digitalWrite(ledPin2,LOW); //aus
- delay(500); //0,5sek aus
- }
- /*-------------------------------------------------------------------------------------*/
- void led_off(){
- digitalWrite(ledPin1,LOW);
- digitalWrite(ledPin2,LOW);
- }
- void SD_read()
- {
- Serial.print("SD Card Initializing......");
- Serial.write(13); //enter
- if (!SD.begin(chipSelect))
- {
- Serial.println("Initialization failed, card not present");
- return; //tue nichts
- }//endif prüfe ob SD karte da ist
- Serial.println("Card was detected");
- Datei= SD.open("COMMANDS.txt");
- //wenn file vorhanden
- if(Datei)
- {
- while (Datei.available())
- {
- Serial.write(Datei.read());
- }//end while
- Datei.close();
- }//end if
- else
- {
- Serial.print("error opening commands.txt");
- }//end else
- }//end func
Hier mein VB - Code:
Brainfuck-Quellcode
- Dim inputdata As String
- Dim kontrol_receive As Integer = 1 'kontrolvariable für Empfangen von Arduino
- Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_i2c_receive.Click
- RichTextBox1.ForeColor = Color.Black
- '/------Kontrollvariale an Arduino =1 , somit weiß er das er an GUI senden soll---/
- If Not SerialPort_i2c.IsOpen = True Then
- SerialPort_i2c.Open()
- End If
- SerialPort_i2c.Write(Chr(kontrol_receive)) 'muss in char gekcastet werden ,da arduino diesen in byte umwandelt
- 'SerialPort_i2c.Write(kontrol_receive)
- '---------------------------------------------------------------------------------/
- '/---------Der von dem EventHandler in die Variable gesetzte Text wird an die RTB angehängt------/
- RichTextBox1.Text = inputdata
- '/-----------------------------------------------------------------------------------------------/
- 'If Cmbport_i2c.Text = "" Then
- 'MsgBox("Please select COM-Port to read from Arduino ")
- 'End If
- End Sub
- Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort_i2c.DataReceived
- 'das was an buffer ist wird an variable drangehängt und somit nicht ueberschrieben
- inputdata = inputdata & SerialPort_i2c.ReadExisting
- End Sub
- Private Sub btn_i2c_clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_i2c_clear.Click
- RichTextBox1.Clear() 'reinige richtextbox
- End Sub
- Private Sub btn_exit_i2c_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_exit_i2c.Click
- Me.Close() ' Me weil das das eigene fesnter ist'
- 'Application.Exit() geht auch'
- End Sub
- Dim kontrol_sende As Integer = 2 'kontrolvariable für Senden an Arduino
- Private Sub btn_i2c_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_i2c_send.Click
- 'Mit try wird versucht Übertragung an Arduino durchzuführen'
- Try
- 'öffne Serielle Anschlussverbindung, sofern nicht bereits geöffnet'
- If Not SerialPort_i2c.IsOpen Then SerialPort_i2c.Open()
- SerialPort_i2c.Write(Chr(kontrol_sende))
- 'SerialPort_i2c.Write(kontrol_sende)
- 'falls Verbindung zum Device besteht, doch es wird auf sendbutton gedrückt und leere Texbox, meldung + verbindung schliessen
- If txtbox_i2c.Text = "" Or Cmbport_i2c.Text = "" Then
- 'If Cmbport_i2c.Text = "" Then
- SerialPort_i2c.Close()
- MsgBox("Please check if you select the COM-Port" & vbCrLf & " Please check the input of the command")
- Else 'sonst Schreibe / sende Ínhalt der Textbox an Arduino'
- 'SerialPort_i2c.Write("Hallo inter")
- SerialPort_i2c.Write(txtbox_i2c.Text) ' durch vbr = Enter, d.h. wenn ein ganzer String wird ein enter gesendet und arduino weiß ok gsnzer String
- 'SerialPort_i2c.Write(vbCrLf)
- MsgBox("Transfer successful")
- End If
- 'Falls Übertragung fehlschlägt, Catch block um fehler auszubügeln und eigene message von vb'
- Catch ex As Exception
- MsgBox("Transfer failed - Please check the connection" & vbCrLf & ex.Message)
- End Try
- 'Nach Übertragung Port wieder freistellen'
- If SerialPort_i2c.IsOpen = True Then
- SerialPort_i2c.Close()
- End If
- End Sub
Schau bitte mal drüber, ich ob was falsch ist.
Danke dir und tut mir leid für das ständige fragenDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „milito“ ()
-
Kannst du bitte die Codetags einfügen? Danke
-
-
-
Hi ebrithil und hast du etwas zu meinem Fehler gefunden?
Hab es versucht , aber erneut ohne erfolg -
Hi, also ich habe keine lust deinen Code zu überarbeiten, wenn ich dich wäre würde ich komplett von vorne anfangen und bevor du beginnst zu programmieren dir auf n Zettel dein Protokoll aufschreibst.
Mit Protokoll meine ich in was für eine Art du deine Daten an den Arduino senden willst, und danach siehst du dir mein Tutorial an unter Erweiterte Kommunikation
mfg Ebrithil -
HI danke dir hab es jetzt hinbekommen, hab dein Vorschlag angenommen und das mit dem $ programmiert.
EIne kleinigkeit wäre noch, wenn ich bei meiner GUI den Receive button drücke, damit der Arduino di Daten von der Sd karte liest und er sie der GUI sendet via Serialport, möchte ich diese anzeigen. Das geht soweit, nur mit verzögerung, d.h. ich muss 2-3 mal auf dem recieve button drücken, damit ich den kompletten inhalt sehe.
Habe auch einen Delay in dem Arduino code einprogrammiert, aber wirklich besser ist es nicht geworden.
Kennst du die Ursache? -
Liest du vielleicht nur ein paar Zeilen der SD-Karte aus jedesmal wenn du auf Recieve drückst?
-
Tags
-
Ähnliche Themen
-
5 Benutzer haben hier geschrieben
- Gast (17)
- ebrithil (8)
- RodFromGermany (4)
- petaod (2)
- Manawyrm (1)