Salve!
Ho preparato un piccolo programma di cui allego il codice:
#include <EEPROM.h>;
int dir;
int inv;
void setup(){
pinMode(5, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop(){
inv = digitalRead(5);
if(inv == LOW){ //marcia
dir = EEPROM.read(0);
if(dir == 0){ //marcia a
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);}
else{ //marcia b
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);}
}
else{
digitalWrite(2, LOW); //fermo motore
digitalWrite(3, LOW); //fermo motore
digitalWrite(4, LOW); //fermo motore
digitalWrite(8, LOW); //spente luci
digitalWrite(9, LOW); //spente luci
if(dir == 0){ //cambio direzione
dir = dir+1;
EEPROM.write(0, dir);
delay(3000); //aspetto
}
else{
dir = dir-1;
EEPROM.write(0, dir);
delay(3000);}
}}
Dovrebbe permettere l’inversione di marcia di un motore DC controllato da un Ponte ad H e sincronizzare l’accensione delle luci con il senso di marcia.
La variabile “dir”, memorizzata nell’EEPROM per conservarla anche in caso di mancanza di corrente, stabilisce la direzione e la variabile “inv”, prodotta da un impulso di sovracorrente ridotto da un diodo zener alla tensione di 5V e stabilizzato da un condensatore, ne effettua il cambiamento.
Quando “inv” è “LOW” avviene la marcia, quando è “HIGH” avviene l’inversione.
Durante l’operazione di inversione della polarità il motore e le luci sono disattivate.
L’impulso di inversione è un impulso pulito, della durata di circa un secondo ed il delay di 3000 ms serve per stabilizzarlo e separarlo dal resto.
In questa versione funziona tutto ma non avviene l’inversione, cioè “dir” rimane sempre = 0 o non viene memorizzata.
Con l’emulatore Autodesk funziona perfettamente invece su di un Arduino Pro Micro no.
Mi è stata suggerita l’ipotesi di cambiare il tipo di variabile da “int” a “byte” ma la situazione è peggiorata in quanto non funziona più nulla.
Qualcuno mi può auitare?
Claudio Dionisi