class Blink {
private:
uint8_t pin;
uint32_t previousMillis;
uint32_t durata;
public:
// Costruttore della classe
Blink(byte _pin, float _frequenza) {
pin = _pin;
durata = (1/_frequenza)*1000;
pinMode(pin, OUTPUT);
}
// Metodo che pilota l'uscita quando viene chiamato
void blink() {
if (millis() - previousMillis >= durata) {
previousMillis = millis();
digitalWrite(pin, !digitalRead(pin));
}
}
// Metodo che modifica la frequenza di base
void setFrequency(float _frequenza) {
durata = (1/_frequenza)*1000;
}
};
#define LED_YELLOW 11
#define LED_RED 10
#define LED_GREEN 9
Blink blinkYellow(LED_YELLOW, 1);
Blink blinkRed(LED_RED, 2);
Blink blinkGreen(LED_GREEN, 5);
void setup() {
Serial.begin(115200);
Serial.println("Start!");
// Non serve fare nulla qui, ci ha già pensato il costruttore della classe
}
void loop() {
blinkYellow.blink();
blinkRed.blink();
blinkGreen.blink();
// Cambio frequenza ogni 10 secondi
static uint32_t cTime;
if (millis() - cTime >= 10000) {
Serial.println("Cambio frequenza");
cTime = millis();
blinkRed.setFrequency(random(1, 10));
blinkGreen.setFrequency(random(5, 20));
}
}