Hallo zusammen,
nachdem ich hier schon eine Weile mitlese und die Suchfunktion nach einer Lösung für mein Anfängerproblem erfolglos strapaziert habe, traue ich mich mal zu fragen:
Basierend auf dem ShiftOut-Tutorial habe ich eine entsprechende Schaltung mit einem 74HC595 aufgebaut, die auch soweit funktioniert. (Zum Ausprobieren habe ich derzeit noch LEDs angeschlossen, im späteren Betrieb sollen aber über einen ULN2803 Relais geschaltet werden.)
Das Ein- und Ausschalten der Ausgänge soll mit dem Ablauf einer Maschine synchronisiert werden. Dazu sind auf einer Welle zwei entsprechende Geber montiert. Wenn Geber 1 einen Kontakt schließt, sollen die Ausgänge des 595 deaktiviert werden (digitalWrite(latchPin, LOW);
) In dieser Phase soll das nächste Muster in die Register geschoben werden. Erst wenn Geber 2 schließt, sollen die Ausgänge des 595 wieder aktiviert werden (digitalWrite(latchPin, HIGH);
).
Die Geber sind potenzialfreie Kontakte und schließen Pin 2 bzw 3 gegen Gnd.
Hat jemand eine Idee, wie ich das zuwege bringe?
Ich hab' das nicht funktionierende Gebastel mal wieder rausgenommen und Lücken gelassen.
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
//Pin connected to DS of 74HC595
int dataPin = 11;
//Pins mit Geberanschluß
int gebera = 2;
int geberb = 3;
int muster[] = {8,192,96,48,24,12,6,3,85};
void setup() {
// Pins setzen
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//
//
for (int numberToDisplay = 1; numberToDisplay < muster[0]+1; numberToDisplay++) {
// Hier soll gewartet werden, bis Geber 1 in Position ist
// die im vorherigen Durchlauf gesetzten Ausgänge am 595 abschalten
digitalWrite(latchPin, LOW);
// Muster in 595 schreiben
shiftOut(dataPin, clockPin, MSBFIRST, muster[numberToDisplay]);
// Einschalten per Latch nach Kontaktschluß
// hier soll die Ausführung unterbrochen werden, bis der Geber 2 in Position ist.
//
digitalWrite(latchPin, HIGH);
// Pause kann entfallen, wenn auf den nächsten Geber gewartet wird
// delay(100);
}
}
Ich danke im Voraus ganz herzlich.
Grüße, Michael