86 lines
2.1 KiB
C++
86 lines
2.1 KiB
C++
|
|
|
|
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.
|
|
}
|
|
|
|
|
|
} |