salve a tutti,
mi presento, sono Francesco. Sono arrivato nel mondo di arduino da circa due settimane.
Lo schema del mio progetto è molto semplice:
randomizzare l'accensione spegnimento di 8 led collegati ad altrettanti buzzer (passivi o attivi, ancora non so) così:
accensione del buzzer e spegnimento di esso dopo 2 msec
accensione del led ad esso collegato dopo lo spegnimento del buzzer dopo 50 msec
spegnimento del led dopo 100 msec.
Sto avendo difficoltà già con la prima parte: randomizzare i led con un chip 74hc595.
Ho trovato molto semplice randomizzare le luci attaccando i led direttamente ai pin, ma dovendo poi collegare i buzzer finirei le porte, per questo ho deciso di utilizzare il chip, spero di aver fatto bene..
Comunque vi allego il codice scritto da me con qualche aiuto trovato in giro, manuale compreso.. Per adesso si accendono in modo random i led, ma essi non mi si spengono quando vorrei io, ma lo fanno quando si accende consecutivamente il led successivo (nel codice ho messo dei delay ampi in modo tale che siano ben visibili).
un aiutino al nuovo arrivato?
grazie a tutti e buona giornata!
Francesco
//Random 8 blink
int SER_Pin = 12; //dataPin
int RCLK_Pin = 11; //latchPin
int SRCLK_Pin = 9; //clockPin
byte leds = 0;
int randNumb;
#define number_of_74hc595s 1 //How many of the shift registers are there daisey chained?
#define numOfRegisters number_of_74hc595s * 9
int registers[numOfRegisters];
void setup(){
Serial.begin(9600);
setRegister(1, LOW);
setRegister(2, LOW);
setRegister(3, LOW);
setRegister(4, LOW);
setRegister(5, LOW);
setRegister(6, LOW);
setRegister(7, LOW);
setRegister(8, LOW);
writeRegisters();
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
randomSeed(analogRead(A0));
clearRegisters();
writeRegisters();
}
void clearRegisters(){
//set all registers to LOW
for(int i = numOfRegisters; i > 0; i--){
registers[i] = LOW;
}
}
void writeRegisters(){
//Set and display registers
digitalWrite(RCLK_Pin, LOW);
for(int i = numOfRegisters; i > 0; i--){
digitalWrite(SRCLK_Pin, LOW);
int val = registers[i];
digitalWrite(SER_Pin, val);
digitalWrite(SRCLK_Pin, HIGH);
}
digitalWrite(RCLK_Pin, HIGH);
}
void setRegister(int index, int value){
//set individual register
registers[index] = value;
}
void loop(){
{
delay(500);
leds = 0;
clearRegisters();
delay(500);
int randNum = random(1,9);
Serial.println(randNum);
{
if(randNum == 1)
setRegister(1, HIGH);
}
{
if(randNum == 2)
setRegister(2, HIGH);
}
{
if(randNum == 3)
setRegister(3, HIGH);
}
{
if(randNum == 4)
setRegister(4, HIGH);
}
{
if(randNum == 5)
setRegister(5, HIGH);
}
{
if(randNum == 6)
setRegister(6, HIGH);
}
{
if(randNum == 7)
setRegister(7, HIGH);
}
{
if(randNum == 8)
setRegister(8, HIGH);
}
}
writeRegisters();
delay(1000);
}