Il progetto non funziona. Solo se metto un tester (voltmetro) tra la massa e il pin digitale 3, per verificare la presenza del segnale del pulsante, allora il progetto funziona. Come può influenzare la presenza del tester sul progetto? Qualcuno può aiutarmi ?
#include <Servo.h>
Servo myServo; // create a servo object
int Angolo = 90; // variable to hold the angle for the servo motor
int Porta;
void setup() {
analogReference(DEFAULT);
myServo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600); // open a serial connection to your computer
pinMode(3, INPUT);
myServo.write(Angolo);
}
void Chiudi(){
if (Angolo > 0){
Serial.print("Sto chiudendo la porta ... ");
while (Angolo >= 0){
myServo.write(Angolo);
Angolo--;
delay(15);
}
Serial.println("CHIUSA");
}
}
void Apri(){
if (Angolo < 90){
Serial.print("Sto aprendo la porta ... ");
while (Angolo <= 90){
myServo.write(Angolo);
Angolo++;
delay(15);
}
Serial.println("APERTA");
}
}
void loop() {
delay(500);
Porta = digitalRead(3);
Serial.println(Porta);
if (Porta == LOW)
Chiudi();
else
Apri();
}
Ovviamente non funziona, serve un debouncing del pulsante e una resistenza di pullup o pulldown. Il tester fa proprio questo, fa da resistenza di pullup. Ricordo che il tester non ha impedenza infinita, ma può andare dall'ordine dei kiloohm a quello dei megaohm.
é importante conoscere gli strumenti che si usano, sopratutto nel vasto mondo delle misure.
Se metti il tester tra massa e pin di entrata il tester fa da pulldown.
Un entrata di Arduino ha un impednza cosí alta che sente anche i disturbi elettromagnetici o campi elettrostatice e li interrpreta come HIGH. Devi mettere una resistenza tra il pin di entrata e massa (pulldown) per mettere il pin a un potenziale definito quando il pulsante non é premuto (aperto). In questo modo l' entrata attraverso la resistnza sente LOW. Quando premi il pulsante al entrata arrivano i 5V e legge HIGH. Nello stasso momento visto che la resistenza sta tra massa e +5V circolerá una corrente. Per tenere piccola questa corrnete si usano resistenze tra 10 kOhm e 100 kOhm (in certi casi anche piú piccole o piú grandi).
Aggiungi una resistenza da 10 KOhm tra pin e massa.
uwefed:
Se metti il tester tra massa e pin di entrata il tester fa da pulldown.
Un entrata di Arduino ha un impednza cosí alta che sente anche i disturbi elettromagnetici o campi elettrostatice e li interrpreta come HIGH. Devi mettere una resistenza tra il pin di entrata e massa (pulldown) per mettere il pin a un potenziale definito quando il pulsante non é premuto (aperto). In questo modo l' entrata attraverso la resistnza sente LOW. Quando premi il pulsante al entrata arrivano i 5V e legge HIGH. Nello stasso momento visto che la resistenza sta tra massa e +5V circolerá una corrente. Per tenere piccola questa corrnete si usano resistenze tra 10 kOhm e 100 kOhm (in certi casi anche piú piccole o piú grandi).
Aggiungi una resistenza da 10 KOhm tra pin e massa.
Ciao Uwe
RISOLTO !
Purtroppo le mie conoscenze di elettronica sono quasi nulle, ho esperienza di programmazione e ho avuto la sensazione/pretesa che si potesse prescindere da queste conoscenze. Per fortuna c'è un forum che aiuta in maniera veloce e precisa.
Grazie !!! (Buon anno a tutti)