Hallo, ich habe früher in der Ausbildung schon mal mit Arduinos gearbeitet, was allerdings schon lange her ist, und die Suchfunktion half mir auch nicht weiter. Mein Ziel ist es, per Taster immer eine LED dazuzuschalten. Die Idee war, per 74HC595 die LEDs anzuschließen und dann über den Arduino in einer Schleife den Taster abzufragen, welche die Tastenanschläge speichert und diese dann an die Schieberegister weiter gibt. meine erste Variante war ein Array weiterzugeben, welches sich selbst erweitert und die Werte ändert. Ich bekomme aber immer nur eine Stelle im Array geändert. meine zweite Variante war, einen Binärzähler immer in den 2^n Schritten zählen zu lassen. Das hat aber überhaupt nicht funktioniert. meine letzte Überlegung ging dahin 160 Arrays mit jeweils 160 Werten zu erstellen und dann den Wert des Tastenzählers einem jeweiligen Array zuzuordnen. gibt es noch eine einfachere Lösung, die mir nicht einfallen will?
Oje, ziemlich Wirr das Ganze.... Nimm ne "Intelligente" LED-Strippe (zB: WS2812 oä.) und das ganze wird für dich wesentlich einfacher! .... PS: Und Bunt ;)
:
Bearbeitet durch User
> hat aber überhaupt nicht funktioniert.
Ein bisschen knapp für eine Fehler Beschreibung
Kay R. schrieb: > Mein Ziel ist es, per Taster immer eine LED dazuzuschalten. > Die Idee war, per 74HC595 die LEDs anzuschließen und dann über den > Arduino in einer Schleife den Taster abzufragen, welche die > Tastenanschläge speichert und diese dann an die Schieberegister weiter > gibt. Genau so. > meine erste Variante war ein Array weiterzugeben, welches sich selbst > erweitert und die Werte ändert. Hää? Ein Array ändert sich nicht selber, das macht bestenfalls die CPU durch DEIN Programm. > Ich bekomme aber immer nur eine Stelle > im Array geändert. Das reicht ja. Du willst ja immer nur eine neue LED anschalten. > meine zweite Variante war, einen Binärzähler immer in den 2^n Schritten > zählen zu lassen. Das hat aber überhaupt nicht funktioniert. Ist auch nicht sinnvoll. > meine letzte Überlegung ging dahin 160 Arrays mit jeweils 160 Werten zu > erstellen und dann den Wert des Tastenzählers einem jeweiligen Array > zuzuordnen. Totaler Käse. > gibt es noch eine einfachere Lösung, die mir nicht einfallen will? Dein 1. Ansatz. Man muss ihn halt richtig und komplett machen. Und ja, das fällt nicht vom Himmel und das kann man auch nicht immer googlen. Leg los. Für 160 einfach LEDs braucht es 160 Bit, welche in 20 Bytes locker Platz haben. Das ist dein Array. Dort musst du per Bitmanipulation schrittweise immer eins setzen und die Daten auf die Schieberegister ausgeben.
Kay R. schrieb: > meine erste Variante Meine erste Variante wäre ein Zähler, der pro Tastendruck um 1 hochzählt. Da kann man dann auch noch so Gimmicks wie Entprellung und Autorepeat mit einbauen. Und dann brauche ich noch eine Hardware, die ich so ansteuern kann, dass die dem Zählerstand entsprechende Anzahl LEDs aufleuchtet. Wie sieht deine Hardware aus? > Ich bekomme aber immer nur eine Stelle im Array geändert. Das kann man am angefügten Code klar erkennen.
:
Bearbeitet durch Moderator
Bis 160 zählen kann man doch prima in einem Byte. Bei der Ausgabe vergleichst Du den Schiebezähler i mit dem Tastenwert t. Bei i < t schiebst Du eine 1 raus, sonst 0. Fertig.
Nimm ein Schieberegister aus ICs und lege den Dateneingang fest auf 1. Der Taster kommt (mit einer Entprellschaltung) an den Takteingang. Wenn du einen Chip aussuchst, der ein Resetsignal hat das auch den Datenspeicher zurücksetzt hast du einen Null-Taster und einen Weiter-Taster. Ganz ohne Software... Das 74164 scheint z.B. zu gehen.
Kay R. schrieb: > Mein Ziel ist es, per Taster immer eine LED dazuzuschalten. > Die Idee war, per 74HC595 Gute Idee. Lass den Arduino, von dessen Programmierung du nichts verstehst, einfach weg. Der 595 kann von selbst immer eine LED mehr leuchten lassen. Der Dateneingang kommt dazu auf 1, und der Taster schiebt. Dazu muss der Tastimpuls entprellt sein und beim Drücken schiebt er, beim loslassen latcht er. Eventuell noch einen Taster zum ausschalten der Lichterkette. Bei 10mA pro LED brauchst du ein Netzteil von 5V/1.6A und 160 Vorwiderstände. Ein CAT4016/DM13 o.ä. reduziert das auf 10 Chips und 10 Widerstände.
1 | #define PIN_SHIFT 8 //SHCP
|
2 | #define PIN_STORE 9 //STCP
|
3 | #define PIN_DATA 10 //DS
|
4 | |
5 | int Taster = 19; // Eingang Taster |
6 | int Zaehler = 0; |
7 | int X = 0; |
8 | byte b = 0b11111; |
9 | |
10 | void setup() |
11 | {
|
12 | pinMode(PIN_STORE, OUTPUT); |
13 | pinMode(PIN_SHIFT, OUTPUT); |
14 | pinMode(PIN_DATA, OUTPUT); |
15 | |
16 | digitalWrite(PIN_STORE, LOW); |
17 | shiftOut(PIN_DATA, PIN_SHIFT, LSBFIRST, b); |
18 | digitalWrite(PIN_STORE, HIGH); |
19 | |
20 | delay(4000); |
21 | Serial.begin(9600); |
22 | pinMode(Taster, INPUT); |
23 | digitalWrite(Taster, HIGH); |
24 | }
|
25 | |
26 | |
27 | void loop() |
28 | {
|
29 | |
30 | if (digitalRead(Taster) == LOW && X == 0) { |
31 | Zaehler++; |
32 | X=1; |
33 | }
|
34 | |
35 | if (digitalRead(Taster) == HIGH && X == 1) { |
36 | delay(250); |
37 | X=0; |
38 | }
|
39 | |
40 | digitalWrite(PIN_STORE, LOW); |
41 | shiftOut(PIN_DATA, PIN_SHIFT, LSBFIRST, b); |
42 | digitalWrite(PIN_STORE, HIGH); |
43 | delay(100); |
44 | |
45 | b << Zaehler; |
46 | Serial.println(Zaehler); |
47 | Serial.println(b); |
48 | }
|
Das war mein letzter Versuch
Das war mein erster Versuch mit den 4015. das habe ich aber auch nicht zum laufen bekommen. Da haben nur die Ausgänge B1-4 in aufsteigender Reihenfolge geleuchtet und auch nur mit einer Blinker LED am Takteingang. Sobald ich die Blinker-LED gegen den Taster mit Kondensator gewechselt habe, ging es nicht mehr.
Kay R. schrieb: > Sobald ich die Blinker-LED gegen den Taster mit Kondensator > gewechselt habe, ging es nicht mehr. Und jetzt kommt der Knackpunkt: Was ging nicht? Und warum ging es nicht? Du solltest nicht blind was zusammenkopieren und drauflosbasteln, sondern mal die Ursache für dieses "Fehlverhalten" analysieren. Dazu musst du mit einem geeigneten Messgerät (Oszilloskop) mal die Pegel an diesem Pin messen und nachschauen, ob das tatsächlich brauchbare Digitalpegel sind. Die braucht der µC nämlich, dass er damit was anfangen kann.
Kay R. schrieb: > Sobald ich die Blinker-LED gegen den Taster mit Kondensator gewechselt > habe, ging es nicht mehr. Tja, vermutlich bist du dem Problem begegnet, dass Taster erst mal prellen und entprellt werden müssen, was dein Kondensator nicht geschafft hat.
Taster entprellen ist ein Grund, dass 160 LEDs auch etwas Strom brauchen, ist Dir sicher auch schon aufgefallen? Gerechnet, gemessen? Stütz-Cs am IC?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.