Hilfe bei Arduino-Programmierung eines Bedienpanels

Diskutiere Hilfe bei Arduino-Programmierung eines Bedienpanels im Reparatur und Wartung Forum im Bereich Fragen und Tipps; Liebe Kaffee-Netz, für ein neues Projekt, bei dem ich aus einer günstigen Maschine (CRM3605) eine eierlegende Wollmilchsau generieren möchte,...

  1. #1 Yoku-San, 17.06.2021
    Zuletzt bearbeitet: 17.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Liebe Kaffee-Netz,

    für ein neues Projekt, bei dem ich aus einer günstigen Maschine (CRM3605) eine eierlegende Wollmilchsau generieren möchte, brauche ich Hilfe bei der Arduino-Programmierung.

    Das Bedienpanel hat vier Knöpfe mit zusätzlicher LED-Beleuchtung, wobei jeweils zwei auf einer mit einer identischen Platine mit den dazugehörigen LEDs verschaltet sind.

    PXL_20210531_111223410.jpg

    Ich habe den Buttonstatus des auf dem Bild linken Knopfs mit folgendem Code auslesen können:
    Code:
    int buttonPin=5;
    int buttonRead;
    
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    buttonRead=digitalRead(buttonPin);
    Serial.println(buttonRead);
    delay(1000);
    }
    Dabei war PIN5 des Arduino mit dem Konnektor-Kabel zweite von Links (Nr2) verbunden. An Kabel Nr.4 war GND und an Kabel Nr. 5 war 5V. Damit leuchteten bei Knopfdruck die LEDs am Knopf und ich konnte Buttonread=1 bei Knopfdruck detektieren.

    Jetzt habe ich folgendes Problem: Ich möchte, dass die LEDs getoggled werden können. Also soll durch Knopfdruck die passenden zwei LEDs angehen, und beim nächsten Druck wieder ausgehen. Ich kriege das aber irgendwie überhaupt nicht mit meinen simplen Arduinokenntnissen hin. Kann mir vielleicht jemand weiterhelfen?

    Ich habe die Platine komplett in Tinkercad nachgebaut, in der Simulation leuchten bei Knopfdruck die zugehörigen LEDs. Ich würde mich sehr freuen, wenn es jemand schaffen würde, den Toggle hinzubekommen.

    Hier das Tinkercad-Projekt:

    Tinkercad | From mind to design in minutes

    Und das Bild der virtuell nachgebauten Platine:

    Johannes ButtonsLEDs CRM3605.png
    Vielen lieben Dank schonmal!
     
    00nix gefällt das.
  2. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    Also grundsätzlich würd ich buttons eher nicht in der main loop mit delays erkennen sondern per interrupt: Verwendung von Interrupts mit Arduino – Mikrocontroller.net

    Alles was du dann machen musst ist in der ISR den Output pin umschalten. Normalerweise macht man das, indem man in das Register mit XOR eine 1 schreibt, gabs bei arduino nicht auch eine toggle funktion? Hab lang nix mehr damit gemacht...
     
  3. #3 Yoku-San, 18.06.2021
    Zuletzt bearbeitet: 18.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Ja, wahrscheinlich kann man das auch anders Lösen mit dem Auslesen des Knopfes, danke für die Info.

    Aber mir geht es tatsächlich um die konkrete abgebildete Verschaltung und die Realisation eines Toggles mit dieser. LEDs und Knöpfe sind in der Schaltung nämlich nicht komplett unabhängig.

    ist ne kleine Denksportaufgabe für Elektroingenieure.
     
  4. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    wenn du den schaltplan vllt mal aufzeichnen könntest als auf dem breadboardsketch, wäre das vllt hilfreich. Ich finds nicht so einfach auf dem breadboard das rauszulesen.
     
  5. #5 Yoku-San, 18.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Tinkercad exportiert BRD Files. Nützen die dir was?

    Ich schaue mal ob ich das vielleicht etwas besser auf dem Breadboard aufbauen kann. Alternativ kannst Du einfach das Foto der Platine von oben anschauen. Dort sind die Leiterbahnen deutlich übersichtlicher als auf dem Breadboard. Die äußeren zwei Lötstellen sind immer eine LED und die vier Lötstellen in der Mitte jeweils der Knopf.
     
  6. #6 Yoku-San, 18.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Im Betrieb leuchten alle LEDs der Platine. Beide Knöpfe sind ansprechbar. Wenn mann dann drückt, fängt eine an zu blinken und die andere ist aus, zum Beispiel. Also unabhängig vom Code auf dem Controller muss das ja alles mit diesem Schaltkreis realisierbar sein.

    Ich wunder mich, wie das mit vier Kabeln realisierbar ist.
     
  7. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    Ich habs mal versucht rauszutracen. Stimmt das, dass bei den Schaltern jeweils die oberen zwei Pins und die unteren zwei Pins zusammenhängen oder sind die separat? Weil auf dem PCB schauts so aus als wären die extra getrennt...
    Für mich schauts so aus, als ob du die LEDs falsch rum eingezeichnet hast. Pin 3 wäre für mich GND und R2 und R3 mit je 10k hängen dann auf 5V und nicht auf GND, wären also pullups und keine pulldowns?

    edit: ah ok auf dem PCB "liegt" der schalter - dH die links und rechts ist der schalter und jeweils links oben und unten und rechts oben und unten sind miteinander verbunden. korrekt?
     
  8. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    So, ich glaub ich habs: Tinkercad | From mind to design in minutes

    Die zweite seite schaut dann genau so aus.
    Das wäre mein Schaltplan den ich aus der Platine abgeleitet hab (wobei im Schaltplan ist es nicht D1 und D2 sondern D3 und D4):
    thumbnail1.png

    Die Idee ist ganz einfach: An dem Pin hängt man sich enweder als input oder output dran - je nach dem wo man im Code ist. Der Interrupt wartet auf die Falling Edge und schaltet dann in den State 1, so dass in der mainloop der port auf output umgeschalten wird, blinky blinky und dann wieder input.
    Kann man sicher auch noch eleganter lösen ;)

    Ich war auch ein bissi verwirrt über die Taster in Tinkercad, aber es ist so: Pin 1a und 1b hängen zusammen, so wie 2a und 2b. Muss man genau schauen welche das sind!
    Der 250R dosiert die Spannung für die LEDs, der 10k ist ein pullup für den input - kann man aber auch mit INPUT_PULLUP lösen.

    Aber check lieber nochmal den schaltplan nach - du hast ja die HW da liegen, ich nicht :p
     
  9. #9 Yoku-San, 18.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Super, anscheinend kennst Du Dich mit dem Programmieren gut aus. Ich hatte in meinem Tinkercad ja exakt die Platine nachgebaut, wie sie ist. Bis auf die Kondensatoren, die sind nicht in der Platine. Ich hab den Aufbau etwas unstrukturiert gemacht, deshalb ist es etwas unübersichtlich, aber der Schaltkreis ist schon der selbe wie auf der Platine. Und 5V und GND hatte ich auch via Code an die PINs wie bei Dir gesendet.

    Anscheinend hast Du es ja mit deinem Code geschafft, den INPUT auf OUTPUT zu switchen.

    Könntest Du mir für die gesamte Platine (wie sie in meinem Tinkercad ist) vielleicht einen Code schreiben, der jeweils die zum Knopf zugehörigen LEDs per Knopfdruck an und aus togglen kann? Das wäre sehr geil und ich würde mich riesig freuen. Dann könnte ich mit deinem Code die Maschine vernünftig kontrollieren und weiter machen mit der eierlegenden Wollmilchsau.
     
  10. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    hmm aber wenn du es exakt nachgebaut hast, dann ist der schaltplan von mir falsch oder ich hab vom breadboard falsch abgeschaut... Weil da kam bei mir was anderes raus :D
    Kannst du vllt ein Foto vom PCB von oben posten und auch von der Platine wo die Widerstände drauf sind?

    umschauen von input/output geht mit pinMode() - Arduino-Referenz
    Ich hab vor langer langer zeit was mit µC gemacht - dort hab ich aber eher direkt mit der atmega lib programmiert und nicht mit arduino. Dort konnte man einfach ins Register wo die digital pins drin stehen den Wert per XOR toggeln. Ich dachte arduino bietet auch so eine Funktion aber offenbar geht das eh auch nur über die Register, siehe Toggling a pin state
     
  11. #11 Yoku-San, 21.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Lieber Reox,

    danke für deine Hilfe. Ich hab heute nochmal darüber nachgedacht, und ich meine, die Lösung gefunden zu haben. Das einzige was man machen muss, ist quasi die ReadPINs für die beiden Knöpfe zwischen INPUT_PULLDOWN und INPUT_PULLUP zu switchen. Bei Switch zu INPUT_PULLUP werden durch die Verbindung zu 5V auch gleichzeitig die Buttonzugehörigen LEDs mit Strom versorgt. Allerdings ist durch den hohen Wert des internen PULLUP-Widerstands die Leuchtkraft der LEDs sehr niedrig. Ob das in der Praxis dann verwendbar ist, werde ich mal testen.

    Lieben Gruß!
     
  12. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    Ja das geht auch macht man aber eher ungern. Die µC können ggf nicht so viel Strom liefern um eine LED zu betreiben. Die Pullups/Pulldowns sind im Bereich von 10kOhm, daher wird die LED wenig Strom bekommen.
    Ich mein bei zwei Grünen LEDs ist das vermutlich egal, aber wenn man da eine 1W LED dran klemmt kanns sein, dass der µC streikt :)
     
  13. #13 Yoku-San, 21.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Das sind je zwei hellblaue LEDs pro Knopf. Ich hoffe das reicht trotz 10K Widerstand von der Helligkeit.
     
  14. #14 Yoku-San, 21.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Wie würde ich das Switchen zwischen Pull-up und Pull-down denn am besten realisieren wenn ich nicht die internen Widerstände nehme? Dann bräuchte ich wohl auch zwei Pins pro Eingang, anstelle von einem?
     
  15. #15 Yoku-San, 21.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Könnte klappen, wenn man einen externen 1KOhm Widerstand nutzt als Pull-up Resistor und für die LEDs. Das sollte für beides hinkommen. Der interne hat wahrscheinlich 45 KOhm, dann ist die LED wirklich schwach. Muss ich aber noch ausprobieren. In der Simulation mit Tinkercad funktioniert es mit internem Pull-up und die LED leuchtet sehr schwach.
     
  16. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Wenn der Schaltplan von reox stimmt, kannst du aber dann keinen Schalterdruck mehr erkennen.
    Du kannst entweder die LED leuchten lassen, oder einen Knopfdruck erkennen. Beides geht nicht.

    Es gibt für mich spontan zwei Möglichkeiten:

    • Den "5V Pin" nicht an 5V, sondern an einen Arduino Pin anschließen. Diesen als Ausgangs setzen und auf High setzen und einen Pulldown an deinem buttonpin einstellen. Wenn du die LED leuchten lassen möchtest, musst du den "5V Pin" als Input konfigurieren mit einem Pulldown, und deinen buttonpin aus Ausgang und ein "High" ausgeben. Dann musst du an deinem "5V Pin" überprüfe ob der Button gedrückt wurde.
    • Bei der zweiten Variante setzt du auf die Trägheit des Auges. Wenn die LED aus ist machst du die Tasterabfrage wie bisher. Wenn du die LED einschaltest, setzt du deinen buttonpin als Ausgang und high. Um zu überprüfen ob der Button gedrückt wird, schaltest du kurz auf Input mit Pulldown. Dann schaust du nach der Spannung an deinem buttonpin, und danach schaltest du ihn entsprechend wieder auf Ausgang. Die LED geht dabei kurz aus, aber wenn du das in ein paar Millisekunden machst, merkt das niemand.
     
  17. #17 Yoku-San, 21.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Danke für den Input!

    Ja, die erste Variante hatte ich initial mal in Erwähnung gezogen. Das Problem ist aber, dass die Platine ja zwei Knöpfe hat, die unabhängig erkannt werden müssen. Das geht nicht, wenn ich bei einem Knopf den 5V Pin (der beide Knöpfe beliefert) in als Input konfiguriere.

    Ich glaube, dass es wirklich klappen könnte, in dem man von den beiden INPUT-PINs der Knöpfe jeweils zwei PINs am Arduino belegt, von denen einer mit einem 1K-Ohm Widerstand belegt wird. Dann switch man diese beiden Pins je Knopf bei Knopfdruck hin und her zwischen INPUT und OUTPUT (Also PIN1= INPUT und PIN2= Output; nach Switch dann PIN1=OUTPUT und PIN2=INPUT). Dann switcht man damit quasi zwischen INPUT_PULLDOWN und INPUT_PULLUP mit einem 1KOhm Widerstand, der ausreicht, die LED zu betreiben und den PULLUP zu realisieren. Versteht ihr, was ich meine?

    Jetzt brauche ich dafür nur noch einen schönen schlanken Code :rolleyes:
     
  18. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Hi, der Einwand mit dem zweiten Schalter ist korrekt.

    Die Variante mit dem Widerstand funktioniert aber nicht, weil sobald du die LED mit einer Spannung (sie es ein Pullup oder indem du den Pin als Ausgang definierst) auf High setzt, ist der Taster ohne Funktion. Denn der Schalter verbindet dann zwei Leitungen, auf denen aber sowieso beide 5V anliegen. Der Controller kann das nicht merken.
    Vermutlich kannst du wirklich nur auf kurzzeitiges umkonfigurieren der Pins ausweichen.
     
  19. reox

    reox Mitglied

    Dabei seit:
    17.02.2013
    Beiträge:
    822
    Zustimmungen:
    399
    Wie ist denn das am Original Board verschalten? Das geht doch sicher auch in einen µC rein?
    Ich hätte ja vermutet, dass der µC auch einfach zwischen OUT und IN schaltet. Wenn man nach einen Knopfdruck ein fixes Program fahren will und sowieso den Code nicht durch einen versehntlichen Knopfdruck unterbrechen will, würde das Sinn machen.
    bzw:

    Ist sicherlich eine gute Idee und auch leicht umsetzbar.

    Oder du hast ein Oszi und schaust mal im Betrieb was da so passiert.
     
  20. #20 Yoku-San, 24.06.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Also, ich hab die letzten Tage ein bisschen in Tinkercad rumprobiert und eine Konfiguration gefunden, bei der ich jeweils die Knöpfe auslesen kann, wenn die Knöpfe einmal über Widerstände mit 3,3V verbunden sind (3,3V wegen ESP32, der genutzt werden soll), oder aber wenn die Knöpfe über den selben Widerstand mit GND verbunden sind.

    Das hier ist die Verschaltung mit den zwei Widerständen (220 Ohm) mit GND verbunden:

    Tinkercad | From mind to design in minutes

    Um die Konfiguration der Verbindung mit 3,3V zu erhalten, muss man die beiden Widerstände eine Position nach unten bewegen. Dann leuchten die LEDs auch konstant. Bei Knopfdruck kriegen die LEDs laut Simulation kurzzeitig 46 mA ab. Ich hoffe das überleben die.

    Scheint soweit so zu klappen. Jetzt werde ich in nächster Zeit versuchen, dass Switchen zwischen 3,3V und GND in einen schönen Toggle Code mit zusätzlichen Arduino PINs einzubauen. Keine Ahnung, ob ich das hinkriege. Aber davon hängt ab, ob ich mit der Maschine weitermachen kann.

    Wenn ihr eine andere und wahrscheinlich bessere Idee für die Verschaltung und Programmierung habt, zeigt sie mir bitte möglichst genau und fertig programmiert. Gut gemeinte Vorschläge, die ich mangels meiner eingeschränkten Fähigkeiten in Elektrotechnik und Programmierung nicht selber realisieren kann, bringen mich leider nicht viel weiter.

    Ich würde mich freuen, wenn ihr mir trotzdem weiterhelfen könnt. Sei es auch nur im Korrigieren meiner vermutlich falschen Vorgehensweise.
     
Thema:

Hilfe bei Arduino-Programmierung eines Bedienpanels

Die Seite wird geladen...

Hilfe bei Arduino-Programmierung eines Bedienpanels - Ähnliche Themen

  1. Hilfe Espressobezug SBT impress

    Hilfe Espressobezug SBT impress: Ich bekomme leider nur noch säuerliche bezüge. An der Kaffeesorte liegt es nicht. Ebenfalls habe ich am Mahlgrad schon einiges herum probiert und...
  2. Hilfe: Wartungsstau Alex Izzo Duetto 2

    Hilfe: Wartungsstau Alex Izzo Duetto 2: Hallo Forum, mich suche einen kompetenten Anbieter, welcher unsere Maschine warten kann - also Kesselstein entfernen etc. Ich bin in Rastede...
  3. Hilfe ! BZ13 beim Rückspülen kurz vor Explosion !

    Hilfe ! BZ13 beim Rückspülen kurz vor Explosion !: Hallo zusammen ! Meine treue BZ13 macht mir große Sorge ... Ich wollte nur mit Pulycaff rückspülen. Dabei hat sich wohl das Expansionsventil (?)...
  4. Hilfe bei Kaufentscheidung ECM vs. Ascaso?

    Hilfe bei Kaufentscheidung ECM vs. Ascaso?: Hallo zusammen, ich möchte mir einen neuen Siebträger zulegen und für mich stehen zwei Modelle zur Auswahl: 1. Ascaso steel duo plus 2. ECM...
  5. Entscheidungshilfe für Kaffeemühle

    Entscheidungshilfe für Kaffeemühle: Guten Morgen, ich bin auf der Suche nach einer neuen Mühle und habe bereits mehrere ins Auge gefasst und brauche eine Entscheidungshilfe. Zuerst...