Arduino numericupdown led

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von OLMUK.

    Arduino numericupdown led

    Hallo zusammen

    Wie muss ich vorgehen damit ich über vb.net mit dem Numericupdown control eine led anwählen kann und diese dann über den Button an und wieder ausschalten kann

    Ich habe zwar gesehen das es möglich ist über vb.net und arduino eine led anzusprechen ist, aber das mit dem Numericupdown control zu machen weiß ich nicht wie ich da vorgehen muss.

    Und wie kann ich mit diesem Control auch eine Arduino anwählen und ansteuern.

    Wenn lieb wenn ihr mir helfen könntet

    LG DerLaie
    Erzähle uns mal, was für ein Button. Ein Button auf deiner Form, oder ein Hardware-Button am Arduino?

    Weist du bereits wie man Bytes an den Arduino sendet und die Bytes auf'm Arduino über den Serial bekommst?

    Ich meine keine Strings oder anderes, nur einen Byte-Array.
    Mit dem NumericUpDown kannst du nicht einfach so eine LED auswählen, du musst erst bestimmen wie viele überhaupt vorhanden sind.
    Mach das mit der Minimum und der Maximum Property des NumericUpDown Control's. Setzt das Minimum auf 1 für LED 1, und das Maximum auf der Anzahl von LED's die du besitzt.
    Und so kannst du dann diese Nummer mit zum Arduino rübersenden und dann verarbeiten. (Idealerweise natürlich nicht nur die Nummer senden sondern vielleicht noch ein on/off Befehl)
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    ClonkAndre schrieb:

    Idealerweise


    Ich finde es Idealer eine Art Protokoll zu bauen, von den eingegangen Bytes sagen mir die ersten was für ein Struct das ist, die restlichen mit memcpy wieder zum passenden Struct mit allen Infos packen. Dann lässt sich alles wunderbar schreiben wie auch lesen. Mal sehen ob man ihm eine gute Art der Kommunikation beibringen kann...

    Diese Art der Architektur finde ich recht Vorteilhaft.

    Klar ist es einfacher 2 Bytes zu senden eins für Pinnummer oder festgelegte Nr für ne LED, das zweite für'n Zustand.
    EDIT: Huch, da war ich wohl n 'bisschen langsam :D

    Ich empfehle die o.g. vorgehensweise.
    Spoiler anzeigen

    Es gibt die Klasse SerialPort, welche alle Funktionen bereitstellt die man für eine Verbindung mit einem Arduino braucht.
    Ein Beitrag hier im Forum über Arduino und SerialPort
    Dokumentation der SerialPort-Klasse

    Zunächst musst du dir Gedanken darüber machen, über welches "Protokoll" dein Arduino und das Programm kommunizieren und wer der "Master" ist (also: Verwaltet dein Programm ob der Pin gerade EIN oder AUS ist, oder sagt dein Programm nur "Schalte den zustand von Pin X um".
    Letzteres könntest du realisieren, in dem du über einen Seriellen Port bspw. die Pin-Nummer schickst (bedenke dass du den RX und TX-Pin nicht schalten darfst wenn du Serial benutzt).
    Dein Arduino-Sketch liest dann diese Zahl aus, und setzt mit digitalWrite(pin, zustand) dann den Pin entsprechend.

    Eine Auswahl des Arduinos per NumericUpDown halte ich für kontraproduktiv, da so das Gerät nicht genau identifiziert werden kann.
    Dennoch könntest du dir über die statische Methode [SerialPort.GetPortNames()/tt] eine Liste von angeschlossenen Geräten (bzw. genauer, wo diese angeschlossen sind) erhalten, diese Zählen ([tt]Array.Length und als höchstwert für den NumericUpDown nehmen, mit einem Button "Verbinden" kannst du dann realisieren, dass das x-te Element aus SerialPort.GetPortNames(), wobei x die im NumericUpDown gewählte Zahl ist, ausgewählt wird und als "Ziel" in einer SerialPort-Instanz genommen wird.

    Es empfiehlt sich den SerialPort geöffnet zu halten, sonst kann es sein dass ein anderes Programm sich den Port krallt während dein Programm läuft, aber nicht verbunden ist.


    LuaX

    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Da ich gerade mit NeoPixel hantiere habe ich auf die schnelle mal eine App gemacht um die Grundhelligkeit des Strips und die Farben aller LEDs zu steuern. Ist jetzt nur ein minimum, also kein protokoll wie ich erwähnte. Nur um zu verdeutlichen was ich meine mit Byte() zu struct. Wenn DerLaie nun ein struct erstellt, mit z.b. einen index für die LED, also ein Array benutzen, wo im passenden index die PinNummer ist, ein zweites Feld für den Zustand, dann hat er leserlichen Code.

    "Arduino"

    C-Quellcode

    1. #include <Adafruit_NeoPixel.h>
    2. #define OUTPUT_PIN 6
    3. #define LED_COUNT 60
    4. struct NeoPixelData
    5. {
    6. byte brightness;
    7. byte red;
    8. byte green;
    9. byte blue;
    10. };
    11. Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, OUTPUT_PIN, NEO_GRB + NEO_KHZ800);
    12. NeoPixelData data = {150, 255, 255, 255};
    13. char buffer[4];
    14. void setup()
    15. {
    16. strip.begin();
    17. strip.setBrightness(data.brightness);
    18. strip.clear();
    19. Serial.setTimeout(35);
    20. Serial.begin(9600);
    21. update();
    22. }
    23. void loop()
    24. {
    25. if (Serial.available() > 0)
    26. {
    27. int readed = Serial.readBytes(buffer, sizeof(buffer));
    28. if(readed == 4)
    29. {
    30. memcpy(&data, buffer, sizeof(NeoPixelData));
    31. update();
    32. }
    33. }
    34. }
    35. void update()
    36. {
    37. strip.setBrightness(data.brightness);
    38. for(int i = 0; i < LED_COUNT; i++)
    39. {
    40. strip.setPixelColor(i, data.red, data.green, data.blue);
    41. }
    42. strip.show();
    43. }


    "WinForms"

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. SerialPort1.Open()
    4. UpdateColor()
    5. End Sub
    6. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    7. If SerialPort1.IsOpen Then
    8. SerialPort1.Close()
    9. End If
    10. SerialPort1.Dispose()
    11. End Sub
    12. Private Sub UpdateColor()
    13. If SerialPort1.IsOpen Then
    14. Dim buf() As Byte = {CByte(TrackBar1.Value), CByte(TrackBar2.Value), CByte(TrackBar3.Value), CByte(TrackBar4.Value)}
    15. SerialPort1.Write(buf, 0, 4)
    16. End If
    17. End Sub
    18. Private Sub TrackBars_Scroll(sender As Object, e As EventArgs) Handles TrackBar4.Scroll, TrackBar3.Scroll, TrackBar2.Scroll, TrackBar1.Scroll
    19. UpdateColor()
    20. End Sub
    21. End Class


    Wenn du das passend änderst, so viele wie dir Pins zur verfügung stehen.

    Noch ein wenig nachhilfe, dann bist du dran. Das struct LedData hat nun den index der LED( um an den Pin zu kommen hohle es anhand des index aus dem Array) sowie den neuen Zustand. Das wirst du nun hoffentlich umsetzen können. Du kannst schauen wie ich meine Daten rübergeschickt hab, must nicht mehr viel anpassen, damit es bei dir funktioniert wie du es wünscht.

    C-Quellcode

    1. #define LED1 6
    2. #define LED2 7
    3. #define LED3 8
    4. int pins[3] = {LED1, LED2, LED3};
    5. struct LedData
    6. {
    7. byte LedIndex; // die pinnummer ist im pins-array
    8. byte State; // HIGH or LOW
    9. };
    10. void setup()
    11. {
    12. }
    13. void loop()
    14. {
    15. }

    Nein, mein Struct passt nicht bei dir, habe gezeigt wie dein Struct aussehen kann, ich brauchte bei mir 4 bytes, bei dir reichen 2, dann musst du nur 2 Bytes aus der App zum Arduino schicken, memcpy nutzen und du hast du das struct;

    Peudocode zum ergänzen des vorherigen Codes:(vergiss nicht das setup)

    Quellcode

    1. struct LedData
    2. {
    3. byte LedIndex; // die pinnummer ist im pins-array
    4. byte State; // HIGH or LOW
    5. };
    6. LedData data;
    7. void loop()
    8. {
    9. if (Serial.available() > 0)
    10. {
    11. die 2 bytes lesen;
    12. memcpy anwenden;
    13. digitalWrite(pins(data.LedIndex), data.State);
    14. }
    15. }


    Edit @Der Laie
    Der allererst Code ist nur zur veranschaulichung/orietierung, der 2 und 3 Code ist für dich wichtig. Habe das jetzt schon fast fertig gemacht, nun bist du definitiv an der Reihe.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Takafusa“ ()

    Wie ich dir bereits auf deine PNs geantwortet habe, hier im Forum kann man reden. Wenn jemand das gleiche Problem hat, kann dieser jemand hier fündig werden. Noch dazu bin ich hier nicht der einzige der helfen kann, vllt. ist ja auch was dabei wo ich passen muss. Ich kann zwar so einiges, aber auch nicht alles.
    Ich vermute du willst sagen wir mal 8 Pins am Arduino als Ausgang mit angeschlossener led definieren, per numeric up down den Kanal anwählen und den jeweils gewählten Kanal ein oder ausschalten... Und wie früher schon... Zur Diskussion ist das forum da weil dann auch andere die mit dem Thema beginnen das nachlesen und evtl lernen können. Da braucht es kein fb oder ähnliches. Zumindest war Anstrengung in der Frage zu erkennen!
    Der Beitrag wurde aus 100% wiederverwendbaren Elektronen erstellt!

    numericupdown arduino und led

    Hallo zusammen

    Bevor ich kritik bekomme, weil manches vllt unverständlich ist füge ich 1,2 Beispielbilder hinzu damit man sich optisch besser was vorstellen kann was ich meine bzw damit man sich besser ein Bild machen kann. Weil Bilder und Worte sagen mehr als 1000 Worte. Und dann ist die Vorstellung besser was ich mit der ganzen Sache überhaupt meine.

    Wie man des 2. Bildes entnehmen kann handelt sich es um ein Stopstellen Programm ( Elektromagnet) welche an so einer Plantine angeschlossen ist. Mit diesem Stopstellen Programm kann man auf der Karte auf dem Bildschirm einen Roten Punkt anklicken mit der Maus und die jeweilige Nummer der Stopstelle ( Roter Punkt) wird angezeigt, mit der jeweiligen Nummer des Moduls ( Platine) wo die Stopstelle angeschlossen ist und die jeweilige ( Pinbelegung ) Pin beschaltung zur Aktivierung des Elektromagnet ( Stopstelle ).

    Um die Module in der Software unwählen, zu können um diese zu bearbeiten z.b. für ein Modellauto oder die Stopstelle zu konfigurieren
    Kann man diese über ein numlock control wie im Bild dargestellt alles einstellen und verändern bzw auch mit dem Programm andere Stopstellen auf andere Platinen anwählen und bearbeiten.

    Mein Vorhaben;

    Ich möchte gern wissen wie ich als testphase mit einem Numericupdown control, mit Hilfe von 2 Arduino megas ( aber ich glaube ob mega oder Uno ) dieses nach realisieren kann weil so wie ich mitbekommen habe laufen diese Platinen über ein Bussystem.
    Ich habe zwar schon gesehen im Internet wie 2 Arduinos über ein Bussystem ( I2C ) Arduino können, aber ich möchte mit diesem Numericupdown control in dem Programm auf beide Platinen zugreifen können.

    Beispiel
    1. ROTER Punkt auf der Karte Stopstelle 1
    2. ROTER Punkt auf der Karte Stopstelle 2

    Das ich mit dem Numericupdown mir die jeweiligen Stopstellen und die Plantinen mir selbst anwählen kann um diese dann einzustellen.

    Hoffe es ist nicht zu viel geworden und man kann sich jetzt besser ein Bild machen.

    Vllt könnt ihr mir jetzt besser helfen.

    LG DerLaie
    Bilder
    • 20201016_095223.jpg

      6,65 MB, 4.032×2.268, 118 mal angesehen
    • Screenshot_20200422-233627_YouTube.jpg

      905,38 kB, 2.220×1.080, 110 mal angesehen
    • WB-14-KW-41-2007-Nr.jpeg

      219,38 kB, 800×600, 104 mal angesehen
    • 20201016_095223.jpg

      6,65 MB, 4.032×2.268, 109 mal angesehen
    • WB-14-KW-41-2007-Nr.jpeg

      219,38 kB, 800×600, 94 mal angesehen
    • Screenshot_20200422-233627_YouTube.jpg

      905,38 kB, 2.220×1.080, 93 mal angesehen
    Ich verstehe gerade nur die Hälfte.

    Darf ich mir deinen gewünschten Aufbau vereinfacht dargestellt so vorstellen? Oder benutzt du i2c-IO-expansions?
    Bilder
    • Unbenannt.png

      56,93 kB, 1.920×1.080, 96 mal angesehen

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

    Der Laie schrieb:

    Genau richtig Volltreffer

    Bezieht sich auf welche der Fragen von @Takafusa. Echt jetzt, sowas muss nicht ja nicht sein.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Im Endeffekt kommuniziert alles mit einer Die Software die Plantine und Verbraucher alle sind miteinander verbunden und geben Rückmeldung sowie auch steuerbefehle werden ausgeführt.

    Software gibt der Plantine ( Arduino Master, Befehl wie auch Rückmeldung )

    Die Elektromagnet geben der Plantine Rückmeldung. Und auch der Software

    Alles kommuniziert mit einander ob Software oder ELEKTRONIK oder Verbraucher ist alles redet aber ja du hast recht die Schematische Darstellung ist richtig.

    LG DerLaie

    Über eine Rückmeldung oder Idee etc würde ich mich freuen
    Ich werde heute im laufe des Tages ein kleines Beispiel machen, aber nicht komplett. Nur ein Teil der Kommunikation zwischen Anwendung und Master, den Code für den Master musst du erweitern, wie auch den Code für den Slave schreiben. Du hast dann jedensfalls ein brauchbares Fundament auf dem du aufbauen kannst.


    Aber.... damit du von mir weiterhin Hilfe bekommst, setze ich allerdings eine Bedingung, wenn du den Code fertig hast, dann poste diesen hier. Damit ich sehe ob sich die Mühe die ich mir mache auch lohnt, bisher war ja AFAIK immer nichts mehr gekommen. (Sry falls ich falsch liege, dann korrigiert micht bitte)