const int ledPin13 = 13;
const int ledPin12 = 12;
const int ledPin11 = 11;
const int potenziometro = A0;
const int buzzer = 6;
unsigned long tempoLed13 = 0;
unsigned long tempoLed12 = 0;
unsigned long tempoNota = 0;
unsigned long inizioNota = 0;
const unsigned long intervalloLed13 = 1000;
const unsigned long intervalloLed12 = 500;
const unsigned long durataNota = 100;
bool statoLed13 = LOW;
bool statoLed12 = LOW;
bool notaAlta = true;
bool buzzerAttivo = false;
void setup() {
pinMode(ledPin13, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(potenziometro, INPUT);
}
void loop() {
unsigned long tempoAttuale = millis();
// LED sul pin 13
if (tempoAttuale - tempoLed13 >= intervalloLed13) {
tempoLed13 = tempoAttuale;
statoLed13 = !statoLed13;
digitalWrite(ledPin13, statoLed13);
}
// LED sul pin 12
if (tempoAttuale - tempoLed12 >= intervalloLed12) {
tempoLed12 = tempoAttuale;
statoLed12 = !statoLed12;
digitalWrite(ledPin12, statoLed12);
}
// LED sul pin 11 controllato dal potenziometro
int valorePotenziometro = analogRead(potenziometro);
int luminosita = map(valorePotenziometro, 0, 1023, 0, 255);
analogWrite(ledPin11, luminosita);
// Intervallo tra le note:
// 1000 ms al minimo, 150 ms al massimo
unsigned long intervalloNote = map(
valorePotenziometro,
0,
1023,
1000,
150
);
// Avvia una nuova nota
if (!buzzerAttivo &&
tempoAttuale - tempoNota >= intervalloNote) {
tempoNota = tempoAttuale;
inizioNota = tempoAttuale;
buzzerAttivo = true;
if (notaAlta) {
tone(buzzer, 1000); // Nota alta
} else {
tone(buzzer, 250); // Nota bassa
}
notaAlta = !notaAlta;
}
// Ferma la nota dopo 100 ms
if (buzzerAttivo &&
tempoAttuale - inizioNota >= durataNota) {
noTone(buzzer);
buzzerAttivo = false;
}
}