int isGenerating = false; //Connesso al Pin DS del 74HC595 int dataPin = 8; //Connesso al Pin ST_CP del 74HC595 int latchPin = 9; //Connesso al Pin SH_CP del 74HC595 int clockPin = 10; int buttonPin = 12; void setup() { //configuriamo i 3 pin di output pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(buttonPin, INPUT); turnOnLeds(0); } void loop() { if (!isGenerating) { if (digitalRead(buttonPin) == HIGH) { isGenerating = true; int wait = 10; for (int i = 0; i <= 20; i++) { int rand = random(1, 7); turnOnLeds(rand); wait += 10; delay(wait); } isGenerating = false; } } } void turnOnLeds(int howMany) { for (int j = 0; j < 7 - howMany; j++) { digitalWrite(clockPin, 0); //mi assicuro che clock si LOW digitalWrite(latchPin, 0); //abbasso il latch per iniziare a programmare il 74HC595 digitalWrite(dataPin, 0); // abbasso il pin data digitalWrite(clockPin, 1); //alzo il clock -> abbiamo "spinto" il valore 1 nel primo registro del 74HC595. digitalWrite(dataPin, 0); //rimetto a zero il data pin e clock pin per non portare valori HIGH oltre questo punto. digitalWrite(clockPin, 0); //rimetto a zero il clock pin. digitalWrite(latchPin, 1); //latch HIGH per confermare gli output. } for (int j = 0; j < howMany; j++) { digitalWrite(clockPin, 0); //mi assicuro che clock si LOW digitalWrite(latchPin, 0); //abbasso il latch per iniziare a programmare il 74HC595 digitalWrite(dataPin, 1); // alzo il pin data digitalWrite(clockPin, 1); //alzo il clock -> abbiamo "spinto" il valore 1 nel primo registro del 74HC595. digitalWrite(dataPin, 0); //rimetto a zero il data pin e clock pin per non portare valori HIGH oltre questo punto. digitalWrite(clockPin, 0); //rimetto a zero il clock pin. digitalWrite(latchPin, 1); //latch HIGH per confermare gli output. } }