Gioco di luci didattico con AtMega328 standalone

Ecco a voi un nuovo tutorial didattico su un piccolo circuito utilizzando l’integrato AtMega328 in standalone.
Lista componenti:
- 1 batteria da 9 Volt
- 1 Regolatore di carica 7805
- 1 condensatore ceramico da 0,33 uF (oppure elettrolito da 100 uF)
- 1 condensatore ceramico da 0,1 uF (oppure elettrolito da 10 uF)
- 2 condensatori ceramici da 22 pF
- 3 resistenze da 10 Kohm (marrone, nero, arancione)
- 1 quarzo da 16 MHz
- 2 switch
- 6 led
- 6 resistenze da 220 ohm (rosso, rosso, marrone)
Ecco lo schema:
PCB:
Se non sai come fare un circuito stampato leggi il mio tutorial clicca qui!
Ecco il file in pdf del circuito stampato: Circuito Stampato
Sketch da caricare sull’atmega328:
Se non sai come caricare uno sketch su un atmega328 in standalone clicca qui!
// Gioco di luci con atmega328 www.giuseppecaccavale.it
// Written by Giuseppe Caccavale
const int puls1 = 10;
const int puls2 = 12;
int pulsante1 = 0;
int pulsante2 = 0;
const int led1 = A5;
const int led2 = A3;
const int led3 = A1;
const int led4 = 13;
const int led5 = 11;
const int led6 = 9;
int tempo = 300;
void setup(){
pinMode(puls1, INPUT);
pinMode(puls2, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
}
void loop(){
pulsante1 = digitalRead(puls1);
pulsante2 = digitalRead(puls2);
if((pulsante1 == LOW) && (pulsante2 == LOW)){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
if((pulsante1 == LOW) && (pulsante2 == HIGH)){
digitalWrite(led6, LOW);
digitalWrite(led1, HIGH);
delay(tempo);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(tempo);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(tempo);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
delay(tempo);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
delay(tempo);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH);
delay(tempo);
}
if((pulsante1 == HIGH) && (pulsante2 == LOW)){
digitalWrite(led1, LOW);
digitalWrite(led6, HIGH);
delay(tempo);
digitalWrite(led6, LOW);
digitalWrite(led5, HIGH);
delay(tempo);
digitalWrite(led5, LOW);
digitalWrite(led4, HIGH);
delay(tempo);
digitalWrite(led4, LOW);
digitalWrite(led3, HIGH);
delay(tempo);
digitalWrite(led3, LOW);
digitalWrite(led2, HIGH);
delay(tempo);
digitalWrite(led2, LOW);
digitalWrite(led1, HIGH);
delay(tempo);
}
if((pulsante1 == HIGH) && (pulsante2 == HIGH)){
digitalWrite(led2, LOW);
digitalWrite(led5, LOW);
digitalWrite(led1, HIGH);
digitalWrite(led6, HIGH);
delay(tempo);
digitalWrite(led1, LOW);
digitalWrite(led6, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led5, HIGH);
delay(tempo);
digitalWrite(led2, LOW);
digitalWrite(led5, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(tempo);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led5, HIGH);
delay(tempo);
}
}
Funzionamento:
Ora illustro brevemente il funzionamento del circuito (molto banale) :
I due switch corrispondono a due bit binari (0,1). Con due bit è possibile fare 4 diverse combinazioni come:
| n° Comb. | switch 1 | switch 2 |
| 1 | 0 | 0 |
| 2 | 0 | 1 |
| 3 | 1 | 0 |
| 4 | 1 | 1 |
e per ogni combinazione faccio corrispondere una sequenza di luci.
- Combinazione 1 i led rimangono spenti.
- Combinazione 2 i led si accendono da sinistra verso destra.
- Combinazione 3 i led si accendono da destra verso sinistra.
- Combinazione 4 i led si accendono dall’esterno verso l’interno.

