Salve a tutti, mi sono appena iscritto su questo forum.
Ho dei problemi a gestire il tempo con Arduino. Vi spiego:
Sto cercando di costruire il cannone spara bolle che ho trovato al seguente link: http://scuola.arduino.cc/courses/lessons/view/MVxaMVd
Dopo aver deciso di apportare delle modifiche (un sensore PIR al posto della fotoresistenza, eliminare il potenziometro ventola) e aver fatto i calcoli per transistor e resistenze, sono passato alla scrittura del codice.
Inizialmente ho utilizzato il delay(10000) per far sparare bolle per 10 secondi.
const int ventola = 11;
const int potM = A0; //Potenziometro Motorino per le bolle
const int motore = 9; //Motorino
const int sensorPir = 8; //Sensore di movimento
int sensorMotore = 0; // valore letto dal potenziometro motorino
int outputMotore = 0; // valore in uscita al motorino PWM
int sensorPirValue = 0; //valore letto dal sensore pir
void setup() {
pinMode(sensorPir, INPUT);
pinMode(ventola, OUTPUT);
}
void loop() {
//legge il valore del sensore Pir
sensorPirValue = digitalRead(sensorPir);
if (sensorPirValue == HIGH){
//legge il valore del potenziometro del motore, lo mappa e manda in
//uscita sul motore il segnale PWM
sensorMotore = analogRead(potM);
outputMotore = map(sensorMotore, 0, 1023, 0, 255);
analogWrite(motore, outputMotore);
//fa girare la ventola
digitalWrite(ventola, HIGH);
// attende 10 secondi
delay(10000);
}
}
tuttavia mi sono accorto che in questo modo non sarebbe stato possibile regolare la velocità del motorino mentre questo ruotava.
Quindi ho elaborato quest'altro metodo, un po' più macchinoso:
const int ventola = 11;
const int potM = A0; //Potenziometro Motorino per le bolle
const int motore = 9;
const int sensorPir = 8; //Sensore di movimento
int time = 0; //variabile di tempo
int sensorMotore = 0; // valore letto dal potenziometro motorino
int outputMotore = 0; // valore in uscita al motorino PWM
int sensorPirValue = 0; //valore letto dal sensore pir
void setup() {
pinMode(sensorPir, INPUT);
pinMode(ventola,OUTPUT);
}
void loop() {
//legge il valore del sensore Pir
sensorPirValue = digitalRead(sensorPir);
if (sensorPirValue == HIGH){
time = 10000; //assegna 10000 ms
}
else{
time = 0;
}
if (time > 0){
//legge il valore del potenziometro del motore, lo mappa e manda in
//uscita sul motore il segnale PWM
sensorMotore = analogRead(potM);
outputMotore = map(sensorMotore, 0, 1023, 0, 255);
analogWrite(motore, outputMotore);
//attiva la ventola
digitalWrite(ventola, HIGH);
//attende 300 ms
delay(300);
//sottrae 300 ms
time -= 300;
}
}
Ma nemmeno questo codice funziona correttamente.
Ho fatto diverse ricerche su Google, e molti fanno riferimento al millis() della libreria Time.h, ma non sono riuscito a capire bene come funziona. Adesso mi trovo in una situazione di stallo e non so come procedere. Per favore aiutatemi!
Grazie in anticipo ![]()