Buon giorno,
anche quest' anno non ho resistito a giocare con Arduino e i trenini,
sono partito per tempo perchè mi servirebbe questo Sketch funzionante per Natale...
Comunque ho questo problema lo sketch parte con il case 1, passando sul Reed o "pulsante" è
lo stesso, poi fà quello che deve fare per poi essere una seconda volta sul reed e passare al
case 2, ancora una volta avanza con il ciclo passando sul Reed e "swiccia" al case 3...
E poi con una nuova sollecitazione del Reed invece di saltare il case 1 e andare al case 2,
fà come gli pare... Ora è un mese che ci provo da solo ma avrei bisogno di un'aiuto, o forse
miracolo! ![]()
Il funzionamento sarebbe:
ho un trenino che Và dalla stazione A e arriva alla stazione B, il ciclo è sempre il solito,
tranne che per la partenza perchè facendo partire lo sketc ho pensato di far partire in treno
in un punto tra A e B in modo che la partenza fosse sempre verso B (Stazione di Monte) nello sketch.
Grazie a chi mi riesce a dare un'imbeccata! Marco
```cpp
// Esempio 10: conta quante volte il pulsante viene premuto, per un ciclo di 4 pressioni,
// ad ogni pressione del pulsante si accende un led per volta
// alla quinta pressione i led lampeggia per 5 volte in sequenza dal 4' al 1' led e poi si riavvia il ciclo.
// Il controllo del numero di volte in cui il pulsante viene premuto viene fatto con l'istruzione "case"
//Questo sketch l'ho modificato ed è l'ultimo che ho fatto, con l'aiuto della pagina di Maffucci,
//Vorrei sistemare un pochino lo sketch, togliere l'ultima parte anche se mi può tornare utile pensandoci...
//Sicuramente voglio mettere una rampa in accelerazione e una din decelerazione almeno ci provo. Marco.
#define BUTTON 2 // pin di input a cui è collegato il pulsante che diventereà il Reed Magnetico
#define DIREZIONE_M 11 // LED collegato al pin digitale 11
#define DIREZIONE_V 10 // LED collegato al pin digitale 10
//#define LED3 12 // LED collegato al pin digitale 12 ****questi led erano inseriti per controllo***
//#define LED4 13 // LED collegato al pin digitale 13 ****Magari li attivo per semaforo stazione****
// Variabili
int ContatorePulsantePremuto = 0; // conta il numero di volte che il pulsante è premuto buttonPushCounter
int StatoPulsante = 0; // stato corrente del pulsante
int StatoPulsantePrecedente = 0; // stato precedente del pulsante
void setup() {
pinMode(BUTTON, INPUT_PULLUP); // imposta il pin digitale come input
pinMode(DIREZIONE_M, OUTPUT); // imposta il pin digitale come output
pinMode(DIREZIONE_V, OUTPUT); // imposta il pin digitale come output
//pinMode(LED3, OUTPUT); // imposta il pin digitale come output
//pinMode(LED4, OUTPUT); // imposta il pin digitale come output
Serial.begin(9600); // apre la porta seriale e la inizzializza a 9600 bps
}
void loop() {
StatoPulsante = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
if (StatoPulsante != StatoPulsantePrecedente) { // compara lo stato del pulsante attuale con il precedente
if (StatoPulsante == HIGH) { // se lo stato è cambiato incrementa il contatore
// se lo stato corrente è alto, il pulsante è passato da off a on
ContatorePulsantePremuto++;
switch (ContatorePulsantePremuto) {
case 1:
Serial.println("SKETCH Nome: Disperazione");
Serial.println(ContatorePulsantePremuto, DEC); // stampa il numero di volte che il pulsante è stato premuto
Serial.println("Il Treno si avvia verso la S.Monte");
analogWrite(DIREZIONE_M, 10); //Partenza gioco del treno, direzione verso la S. Monte
Serial.println("Modulazione analogwrite su PIN 11");
Serial.println("Manetta al 10%");
delay(5000);
Serial.println("Manetta al 20%");
analogWrite(DIREZIONE_M, 20); //Pin 11
delay(5000);
Serial.println("Manetta al 40%");
analogWrite(DIREZIONE_M, 40);
delay(5000);
Serial.println("Manetta al 75%");
analogWrite(DIREZIONE_M, 75);
delay(5000);
Serial.println("Manetta al 100%");
analogWrite(DIREZIONE_M, 100);
break;
case 2: // controlla se il Reed è stato premuto due volte
Serial.println("2");
Serial.print("Arrivo alla S.Monte Treno Locale proveniente da S.Valle "); // stampa sulla console "numero di volte tasto premuto:"
Serial.println(ContatorePulsantePremuto, DEC); // stampa il numero di volte che il pulsante è stato premuto
digitalWrite(DIREZIONE_M, LOW);// spegne il LED11
delay(10000);
digitalWrite(BUTTON, LOW);
Serial.println("Si ferma alla S.Monte");//sosta stazione
Serial.println("si disattiva il Reed");
delay(12000);
Serial.println("Parte il Treno verso S.Valle");
analogWrite(DIREZIONE_V, 10); //riparte verso la S. Monte
Serial.println("Modulazione analogwrite su PIN 10");
Serial.println("Manetta al 10%");
delay(5000);
analogWrite(DIREZIONE_V, 20);
Serial.println("Manetta al 20%");
delay(5000);
analogWrite(DIREZIONE_V, 40);
Serial.println("Manetta al 40%");
delay(5000);
analogWrite(DIREZIONE_V, 75);
Serial.println("Manetta al 75%");
delay(5000);
Serial.println("Manetta al 100%");
analogWrite(DIREZIONE_V, 100); //Velocità al 100% Verificare se pin analogico!!!!!!
digitalWrite(BUTTON, HIGH);
Serial.println("Fine Pausa reed di 32000 millisecondi");// stampa sulla console "off"
break;
case 3: // controlla se il Reed è stato premuto tre volte
Serial.println("3"); // stampa sulla console "on"
Serial.print("Arrivo alla S.Valle Treno Locale proveniente da S.Monte "); // stampa sulla console "numero di volte tasto premuto:"
Serial.println(ContatorePulsantePremuto, DEC); // stampa il numero di volte che il pulsante è stato premuto
Serial.println("Si ferma il Treno a S. Valle");
digitalWrite(DIREZIONE_V, LOW);
delay(10000); //sosta stazione
Serial.println("si disattiva il Reed");
Serial.println("Parte il Treno verso S.Monte");
digitalWrite(BUTTON, LOW);
delay(12000);
analogWrite(DIREZIONE_M, 10); //riparte verso la S. Monte
Serial.println("Manetta al 10%");
delay(5000);
analogWrite(DIREZIONE_M, 20);
Serial.println("Manetta al 20%");
delay(5000);
analogWrite(DIREZIONE_M, 40);
Serial.println("Manetta al 40%");
delay(5000);
analogWrite(DIREZIONE_M, 75);
Serial.println("Manetta al 75%");
delay(5000);
analogWrite(DIREZIONE_M, 100); //Velocità al 100% Verificare se pin analogico!!!!!!
Serial.println("Manetta al 100%");
digitalWrite(BUTTON, HIGH);
Serial.println("Fine Pausa reed di 32000 millisecondi");
break;
case 4: // controlla se il Reed è stato premuto 4 torna a case 2
if (ContatorePulsantePremuto > 3) {
ContatorePulsantePremuto = 0;
StatoPulsante = 0;
StatoPulsantePrecedente = 0; // NON RIESCO A FAR COMINCIARE DAL CASE2
break;
}
}
}}}