SerialPort Arduino

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    SerialPort Arduino

    Moin zusammen

    wie kann ich mit vb über SerialPort den Arduino Werte oder Daten auslesen lassen und dieser mit einer Funktion erstellen das sobald sich am arduino sich verändern sprich eine geschlossen Stromkreis soll über SerialPort ein Signal / Wert übermittelt werden nur wie schreibe ich das,


    mit Vb möchte über SeralPort auf den Arduino - Taster zugreifen und wenn Taster aktiv ist dann meldet SerialPort an vb zurück das er aktiv ist.



    LG Der Laie

    Ich habe da mal was vorbereitet und ich hoffe ihr könnt mir helfen sorry für ein paar Fehler .


    C-Quellcode

    1. int led1 = 9;
    2. int taster = 3;
    3. void setup( ) {
    4. pinMode ( led1 , OUTPUT );
    5. pinMode ( taster , INPUT_PULLUP );
    6. Serial.begin ( 9600 );
    7. }
    8. void loop ( ) {
    9. int wert ;
    10. if ( Serial.available ( ) ) {
    11. delay ( 100 ) ;
    12. while ( Serial.available ( ) > 0 ) {
    13. wer = Serial . read ( ) ;
    14. if ( digitalRead ( taster ) == LOW ) {
    15. if ( wert == ' 1 ' ) digitalWrite ( led1 , HIGH ) ;
    16. else if ( wert == ' 0 ' ) digitalWrite ( led2 , LOW ) ;
    17. }
    Bilder
    • Tasterschaltung.JPG

      197,99 kB, 1.280×956, 176 mal angesehen
    @Der Laie Auf PN zu Programmierfragen reagiere ich nicht.
    Tut mir leid, ich habe keinen Arduino, ich kann Dir nicht sagen, was Du dem senden musst.
    Das sollte eigentlich in der Bedienungsanleitung stehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Der Laie schrieb:

    int wert ;


    Zeile 31 if ( wert == ' 1 ' )
    Zeile 33 ( wert == ' 0 ' )
    ???

    Fällt dir da nicht was auf?

    Noch dazu, eine LED ist ein Halbleiter, diese leiten besser wenn sie warm werden. Da die LED im Betrieb wärmer wird leitet sie nach und nach mehr Strom, so kann es passieren, das die irgendwann so viel Strom leitet das sie durchbrennt, also mach einen kleinen Widerstand dazwischen um eine Begrenzung zu haben, damit du dir die LED nicht durchbrennst!

    Gugge hier
    elektronik-kompendium.de/sites/bau/1109111.htm
    und hier:
    arduino.cc/en/tutorial/blink
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „NoIde“ ()

    NoIde schrieb:

    Fällt dir da nicht was auf?
    :thumbup:
    @Der Laie Besser wäre: Fällt Deinem Compiler nix auf?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Besser wäre: Fällt Deinem Compiler nix auf?

    Weiss zwar nicht womit DerLaie kompiliert, aber

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main()
    4. {
    5. int x = '1';
    6. printf("%i\n", x);
    7. return 0;
    8. }


    der GCC z.B. meckert nicht und das Programm gibt 49 aus.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „NoIde“ ()

    Der Laie schrieb:

    Taster zugreifen und wenn Taster aktiv ist dann meldet SerialPort an vb zurück das er aktiv ist.


    Hab ich vergessen drauf einzugehen, sorry. Schau dir mal Serial.print bzw. Serial.println an.

    arduino.cc/reference/en/langua…mmunication/serial/print/
    arduino.cc/reference/en/langua…unication/serial/println/
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Wenn das ne normale LED ist die ganz kurz ganz hell und dann für immer dunkel. Die wird irgendwas zwischen 1,2-2V haben.

    Normalerweise legt man Masse auf blau und nicht auf rot. Den Taster kannst du nicht einfach auf Masse legen. Was passiert wenn er geöffnet ist? Der Pin ist komplett galv. getrennt, weder High noch Low. Er muss entweder mit nem Pullup Widerstand an + liegen (Hi) oder auf Masse (Lo). Vielleicht gibt's auch interne Pullups in deinem Controller, das weiß ich nicht.
    Ja Arduino hat interne PullUp-Widerstände, diese müssen Softwareseitig eingeschaltet werden. Macht der TE auch in Zeile 11.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Ich verstehe dein Ziel leider nicht so ganz (oder doch?)

    Du möchtest an deinem Arduino den Wert eines Pins auslesen, dieser ist entweder HIGH (0<) oder LOW (0), diesen über die Serielle Verbindung an ein VB.NET-Programm übermitteln.
    Von dort aus möchtest du dann an den Arduino einen Wert schicken, der einen Pin ein- bzw. ausschält.

    Der Laie schrieb:

    if ( Serial.available ( ) ) {
    delay ( 100 ) ;
    while ( Serial.available ( ) > 0 ) {
    wer = Serial . read ( ) ;
    if ( digitalRead ( taster ) == LOW ) {
    if ( wert == ' 1 ' ) digitalWrite ( led1 , HIGH ) ;
    else if ( wert == ' 0 ' ) digitalWrite ( led2 , LOW ) ;
    }


    Also ich kann hier erkennen das du zunächst Prüfst ob an der Seriellen Schnittstelle daten anliegen, wenn dem so ist gehst du ihn eine while Schleife (warum?*).
    Von dort liest du jeweils das nächste byte im buffer in ein int (das ist auch richtig). Dann prüfst du ob der Taster gedrückt ist, und wenn er gedückt ist nur dann verarbeitest du die Eingabe.
    Du vergleichst das byte dabei mit dem ASCII-Zeichen für 1 bzw. 0 und setzt dann entweder led1 HIGH, oder led2 LOW (Und das wird kompiliert?**).

    *Du führst die Aktion mit dem abfragen mehrmals aus, mir erklärt sich der Sinn dahinter allerdings nicht, da du nur eine LED hast. Mit einem (nicht signierten) Byte könntest du 8 LEDs ansteuern (An oder aus) UND da es unwahrscheinlich ist das du mehrere Befehle an die LED gleichzeitig schicken möchtest.
    Auch ist die Funktion loop() selbst nur eine schleife, und wird daher auch unendlich oft ausgeführt.

    ** Vielleicht ist es auch nur ein Schreibfehler, aber ich kann nirgends sehen das du eine led2 definierst, geschweige denn das du ihren pinMode setzt

    Habe ich das richtig geschlussfolgert?

    Weiter schließe ich mich an einige andere Leute hier an... Der Port eines Arduinos hat einen Maximalen kurzschlusstrom von 150mA, das überlebt die LED nicht, und deinem Board tut es auch nicht gut.

    Und schau dir bitte dein Steckplatinenlayout nochmal an, auf der Steckplatte hast du die positive Schiene mit der negativen Schniene verbunden.
    Du hast zwar keine 5V angeschlossen, aber man macht es trotzdem nicht. Und..... GND wird auf der blauen Leiste angeschlossen, die Rote ist für den Spannungsführer da.

    LG
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.

    LuaX schrieb:

    Und schau dir bitte dein Steckplatinenlayout nochmal an, auf der Steckplatte hast du die positive Schiene mit der negativen Schniene verbunden.
    Du hast zwar keine 5V angeschlossen, aber man macht es trotzdem nicht.


    Meinst du den Kreislauf vom Taster(Pin4 gegen GND)? Wenn ja warum nicht? Bei meinem Raspi nutze ich auch einen Tastschalter von GPIO3(Pin5, hat internen PullUp 1K8Ω) gegen GND um ein und auszuschalten bzw. neu zu starten, der Raspi lebt nun schon sehr lange, hatte deswegen nie Probleme.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „NoIde“ ()

    @NoIde
    Nein ich bemängle nicht die schaltung von Pin 4 gegen GND, sondern das er für GND die Schiene benutzt, die für den (technischen) Stromträger vorgesehen ist, und dass er die rote mit der blauen schiene (versehentlich? ) verbunden hat.
    (Pingelig ich weis)

    @Der Laie Dies hier ist ein Forum, der sinn des ganzen ist das wir deine Fragen beantworten beziehungsweise dir bei der Problemlösung helfen, und das ganze so, dass andere die ähnliche Fragen haben Zugriff auf den gesamten Verlauf haben (= Öffentlich).

    Daher bitte ich dich nicht einzelne Benutzer per PN zu Fragen, sondern hier öffentlich in diesem Thread, und wenn andere Benutzer eine Frage stellen, um deine Vorhaben oder Problem besser zu verstehen, diesen öffentlich zu antworten. Danke.


    LG
    Bilder
    • pic1.png

      51,31 kB, 607×62, 120 mal angesehen
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.

    LuaX schrieb:

    und dass er die rote mit der blauen schiene (versehentlich? ) verbunden hat.


    Höhrt sich nach Kurzschluss an, meinst du vllt. vertauscht? An den "blauen Schienen", liegt ja kein Kontakt an.

    Aber sonst hast du recht, Ordnung muss sein, finde ich nicht pingelig. :thumbup:
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Ja ich meine vertauscht, wenn man aber genau hinschaut sieht man das die Leitung zur LED noch mit der anderen Schiene verbunden ist
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Gutes Auge :thumbsup: Ich hab echt eine Weile gebraucht um das zu sehen. Dann liegt ja doch ein Kontakt an einer "blauen Schienen" an und verbunden ist doch richtig. Ich war ein wenig verwirrt, weil ich diesen Kontakt nicht gesehen habe.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „NoIde“ ()

    Moin zusammen


    da die Schatung vllt ein Kurzschluss verursacht oder ähnliches kann vllt sein aber das Hauptaugen merk war der Taster / Magnetschalter sobald der drückt wird soll sich in meinem VB Programm sich verändern eine PB blau (

    Schaltkreis geschlossen ) PB rot ( Schaltkreis geöffnet ). Es ist mir schon klar das ich vorher über meine Software den Arduino aktiviren muss damit dieser dann im Stand-by Modus reagiert ge nach geschalteten Zustand des Stromkreises.

    und ich weis nicht wie ich dann mit dem Serialport diesen Stromkreiszustand über meine Prorgammm abrufen kann


    REEDSCHALTER / MAGNETSCHALER erstetzt TASTER

    vllt, kann man es sich jetzt besser vorstellen was ich meinen kann

    LG
    Bilder
    • Reedkontakt.jpg

      6,51 kB, 297×172, 140 mal angesehen

    Der Laie schrieb:

    ich weis nicht wie ich dann mit dem Serialport diesen Stromkreiszustand über meine Prorgammm abrufen kann


    Dann wäre jetzt der erste Schritt zu schauen wie die Kommunikation mit einem Arduino und deinem Programm funktioniert. Schau mal in der Toolbox nach dem SerialPort, diesen nutzen und passend einstellen(Port, BAUD, StopBits etc...) Der SerialPort hat ein Event Namens DataReceived, guggst du hier:

    docs.microsoft.com/de-de/dotne…d?view=netframework-4.7.2

    Wie man mit dem Arduino die Daten schreibt, da habe ich dir schon 2 Links gegeben(Serial.print,Serial.println).

    Natürlich kannst du auch mit dem SerialPort im VB-Programm auch an den Arduino schreiben mit SerialPort.Write.

    docs.microsoft.com/de-de/dotne…e?view=netframework-4.7.2

    In Arduino Sketch kannste das mit Serial.read() lesen.
    Dann probier mal.

    Der Laie schrieb:

    da die Schatung vllt ein Kurzschluss verursacht oder ähnliches kann


    Einen kurzschluss hattest du nicht drin, aber dein Steckbrett-Layout was sowas von "dirty".

    Hier mal anständig, vllt. bringst dir ja was, auch mal mit PullUp/PullDown/InternerPullUp-Widerstand. Bei Bild InternalPullUp muss der interne PullUp aktiviert werden pinMode(4, INPUT_PULLUP).

    Die gewählte LED braucht 20mA bei 2.25V.

    Widerstand für LED berechnen:
    R = (5V - 2.25V) / 0.02A = 137.5Ω ~ 140Ω

    Der Pull-Up/Down Widerstand hat hier 10KΩ.
    Bilder
    • InternalPullUp.png

      299,55 kB, 1.755×1.350, 107 mal angesehen
    • PullDown.png

      302,71 kB, 1.755×1.350, 149 mal angesehen
    • PullUp.png

      301,55 kB, 1.755×1.350, 101 mal angesehen
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    NoIde Moin


    Danke für die Info

    mein Gedanke ist aber egal obs es ein Taster oder ein Magnetschalter ist ich weis zwar wie ich mit meinem Programm den Arduino anschreiben kann
    hier ein Link als Beispiel.:

    gutefrage.net/frage/wie-kann-m…sic-ein-arduino-ansteuern


    es geht mir nur darum das ich nicht weis wie ich Daten oder gewisse Zustände bekommen kann vom Arduino ( Serialport ) wenn was passiert und ich dementsprechend eine Reaktion bekomme in meinem Programm.
    Bilder
    • Tasterschaltung_ Arduino_Rückmeldesystem.jpg

      190,64 kB, 1.054×837, 213 mal angesehen
    Wenn du die Kommunikation drauf hast, brauchst du eine art Protokoll. Damit aber nicht durchgehend der Status gesendet wird, kannst du den alten Wert in einer variable haben, nur wenn alter Wert <> neuer Wert ist schreibst du zum VB-Prog. Ob du nun einfach nur eine 0 oder 1 schreibst, oder "Taster geschlossen" oder "Taster offen" bleibt dir überlassen, je nach Message reagierst du entsprechend.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin