Schieberegister 74HC595

Wie kann man mit dem Schieberegister (74HC595) LEDs mit Tastern ansteuern.
Wenn Taster 1 gedrückt wird soll LED 1 leuchten usw. und das ganze soll über ein Schieberegister laufen.

äh, ganz so ohne Arduino zwischen den Tastern und dem 595?

Taster mit Pullups an RCLK und SRCLK und an SER anschließen, LEDs mit Vorwiderständen an die Ausgänge, dann fleißig Knöpfchen drücken.

Aber was hat das mit einem Arduino zu tun?

Natürlich mit Arduino hab ich vergessen zu schreiben.

Supreme19:
Wie kann man mit dem Schieberegister (74HC595) LEDs mit Tastern ansteuern.
Wenn Taster 1 gedrückt wird soll LED 1 leuchten usw. und das ganze soll über ein Schieberegister laufen.

Du formulierst deine Anforderungen
Schreibst ein Programm, welches die Anforderungen erfüllt
Spielst das Programm auf den Arduino
Baust die Schaltung auf
Und ZACK tuts das!
(oder auch nicht, dann ist Nacharbeit fällig)

Supreme19:
Wie kann man mit dem Schieberegister (74HC595) LEDs mit Tastern ansteuern.
Wenn Taster 1 gedrückt wird soll LED 1 leuchten usw. und das ganze soll über ein Schieberegister laufen.

Nach einiger Erklährung.
Ja das kann man machen.
Wo ist Dein Problem?
oder alternativ:
beschreibe Dein Projekt und wir suchen zusammen nach der besten / praktikabelsten Lösung.
Grüße Uwe

Also bisher funktioniert es, dass man die LEDs mit einem Array sagt ob sie aus oder an gehen. z.B {1,0,0,1,0,1} und die Taster kann ich auch auslesen. Aber wenn ich den Code hochlade sind die LEDs fest angesteuert und lassen sich nicht mehr umsteuern. Also wie könnte ich das lösen?

Supreme19:
Also wie könnte ich das lösen?

Vieleicht indem Du uns Deinen Sketch zeigst?
Grüße Uwe

Nein. Nicht wie ein Sketch sein sollte sondern genau den den Du geschrieben hast. Wie's theoretisch aussehen müßte wissen viele von uns. Wir müssen aber sehen wieso es bei Dir nicht funktioniert.
Grüße Uwe

int shiftPin = 8;
int storePin = 9;
int dataPin = 10;

int buttonValue;

int muster [6] = {0,0,0,0,0,0};

void setup()

{
Serial.begin(9600);
pinMode(storePin, OUTPUT);
pinMode(shiftPin, OUTPUT);
pinMode(dataPin, OUTPUT);

digitalWrite(storePin, LOW);

   for (int i=0; i<6; i++)

{

digitalWrite(shiftPin, LOW);

digitalWrite(dataPin, muster[i]);

digitalWrite(shiftPin, HIGH);

}
digitalWrite(storePin, HIGH);
}

void loop ()
        
{
Serial.println(analogRead(A0));
buttonValue = analogRead(A0);
    
if (buttonValue > 1000)

{  
  muster[0] = 1;
}

else

{
muster[0] = 0;
}   
 delay(100);  
}

Wenn der Knopf gedrückt ist, sollte im Array Nummer 0 auf 1 gehen, und damit auch die 1.Led angehen.

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Außerdem entferne bitte die unnötigen Leerzeilen und formatiere den Code ordentlich (+T in der IDE hilft Dir dabei).

Gruß Tommy

Hallo,

du liest den Taster analog ein. Hmmm, kann man machen, muss man aber nicht.

buttonValue wird größer 1000? Siehst du im seriellen Monitor schreibst du? Dann funktioniert auch die Array Zuweisung. Was du natürlich für deine LED noch machen musst ist, diese geänderte Information an den IC rausschieben. Allein die Array Zuweisung macht es noch nicht.

Die for Schleife im setup für das IC würde ich auch nochmal überdenken. Da wird irgendwas rausgeschoben, aber nicht die Informationen des muster Arrays. Generell solltest du dich nochmal über die Ansteuerung des ICs informieren.

Ich habe das mit dem Taster so gemacht, weil ich mehrere Taster über einen Pin auslesen will, um Pins zu sparen.

In dem Sketch findet in den Zeilen 18 bis 31 die Ausgabe des Musters an das Schieberegister statt.
Als allereinfachste Lösung würde ich das in eine Funktion packen und jedesmal aufrufen, wenn das Muster verändert wurde.

Die LEDs lesen den gewünschten Zustand leider noch nicht direkt aus dem RAM vom Arduino aus :wink: