Salve ragazzi sono nuovo del forum per cui non so se sto scrivendo nel posto giusto.
Vorrei chiedervi una mano. Premetto che sono un principiante in programmazione. Per l'esame di stato vorrei portare un progettino ed ho bisogno di programmarè arduino affinché ogni volta che premo un pulsante mi muova il pimo motore per 1 secondo , ogni 26 volte che premo il pulsante mi muova anche il secondo motore per 1 secondo ed ogni 676 volte che premo il pulsante mi muova anche il tetzo motore per un secondo
NO, non stai scrivendo nel posto giusto ...
... nella sezione dove avevi messo il post c'è chiaramente scritto, in grassetto, di non postare nulla ... quindi, per favore, la prossima volta presta più attenzione, poi, essendo questo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Il tuo post è stato spostato nell'opportuna sezione del forum
Scusami il regolamento lo avevo letto ma ieri internet mi dava problemi e non riuscivo ad aprire la pagina giusta
Che tipo di motori hai collegato? Come? Puoi fare uno schema dei collegamenti e mettere anche il codice che hai scritto fino ad ora (... mi raccomando, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra)?
Guglielmo
Hai giá incominciato a scrivere un sketch?
Cosa sono i Tuoi problemi?
Ciao Uwe
Stai ricostruendo Enigma?
Si sto ricostruendo enigma.
Quando vado a casa posto tutto
Grazie
const int buttonPin = 2;
const int motore1Pin = 8;
const int motore2Pin = 9;
const int motore3Pin = 10;
// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
void setup() {
// initialize the button pin as a input:
pinMode(motore1Pin, OUTPUT); // imposta il pin digitale come output
pinMode(motore2Pin, OUTPUT); // imposta il pin digitale come output
pinMode(motore3Pin, OUTPUT); // imposta il pin digitale come output
pinMode(buttonPin, INPUT);
// initialize serial communication:
Serial.begin(9600);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter, DEC);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;
}
// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 676 == 0) {
digitalWrite(motore1Pin, HIGH); // accende il LED
digitalWrite(motore2Pin, HIGH); // accende il LED
digitalWrite(motore3Pin, HIGH); // accende il LED
delay(500); // aspetta un secondo
digitalWrite(motore1Pin, LOW); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
} else {
if (buttonPushCounter%26 ==0) {
digitalWrite(motore1Pin, HIGH); // accende il LED
digitalWrite(motore2Pin, HIGH); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
digitalWrite(motore1Pin, LOW); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
} else {
digitalWrite(motore1Pin, HIGH); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
digitalWrite(motore1Pin, LOW); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
}
}
}
Questo è il programma che ho fatto riadattando uno che ho trovato. Ovviamente non funziona.
@Antoniospa: ... eppure eri stato invitato a leggere con attenzione il regolamento e ...
... in conformità al regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).
Guglielmo
Non funziona perchè hai inserito tutto nel loop() principale, quindi ti accedne e spegne di continuo i led anche se non premi il tasto
Suddividi in due parti, loop principale e richiami la routine dei led solo quando premi il tasto
in pratica aggiungi il richiamo alla routine
buttonPushCounter++;
controlla(); // esegue solo quando il pulsante cambia di stato
etc etc
e dividi la parte dei led
void controlla() {
// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 676 == 0) {
etc etc
ovviamente aggiungi una graffa alla fine del loop principale
Se stai ricostruendo Enigma, probabilmente saprai che i dischi si muovevano per archi precisi (ogni rotazione spostava il disco dell'arco preciso fra due contatti), e che il sistema prevedeva anche l'uso di piu di 3 dischi (ma questo decidi tu se implementarlo o no), quindi non ti basta "muovere il motore per 1 secondo", se vuoi costruire un'oggetto funzionante, ti serve un sistema per "dire" ad arduino "quando" il disco si e' mosso dell'arco giusto ... quindi piu che muovere i motori per "tot" tempo, sarebbe meglio che tu usassi un qualche tipo di sensori ...
Ad esempio, e rimanendo sul semplice, potresti usare alcune forcelle ottiche, posizionate in modo che il bordo dei dischi, quando inseriti, vada a finire all'interno della corrispondente forcella ... a quel punto basterebbe che tu facessi 26 tagli lungo il bordo, fatti in modo che si trovino al centro della forcella quando i contatti sono posizionati correttamente, ed avresti un sistema dal funzionamento molto piu sicuro che usando solo i tempi ...
la rotazione dei dischi la regolo una volta montato il tutto
Non so se ho sbagliato qualcosa ma non funziona ancora
const int buttonPin = 2;
const int motore1Pin = 8;
const int motore2Pin = 9;
const int motore3Pin = 10;
// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
void setup() {
// initialize the button pin as a input:
pinMode(motore1Pin, OUTPUT); // imposta il pin digitale come output
pinMode(motore2Pin, OUTPUT); // imposta il pin digitale come output
pinMode(motore3Pin, OUTPUT); // imposta il pin digitale come output
pinMode(buttonPin, INPUT);
// initialize serial communication:
Serial.begin(9600);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
controlla();
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter, DEC);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;
}
}
void controlla() {
// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 676 == 0) {
digitalWrite(motore1Pin, HIGH); // accende il LED
digitalWrite(motore2Pin, HIGH); // accende il LED
digitalWrite(motore3Pin, HIGH); // accende il LED
delay(500); // aspetta un secondo
digitalWrite(motore1Pin, LOW); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
} else {
if (buttonPushCounter%26 ==0) {
digitalWrite(motore1Pin, HIGH); // accende il LED
digitalWrite(motore2Pin, HIGH); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
digitalWrite(motore1Pin, LOW); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
} else {
digitalWrite(motore1Pin, HIGH); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
digitalWrite(motore1Pin, LOW); // accende il LED
digitalWrite(motore2Pin, LOW); // accende il LED
digitalWrite(motore3Pin, LOW); // accende il LED
delay(500); // aspetta un secondo
}
}
}
Ma una resistenza di PullDown l'hai messa sul pin dove è collegato il pulsante ?
si di 1 K
praticamente se premo il pulsante smette di contare.
a pulsante rilasciato invece conta di continuo.
Appunto, hai collegato male il pulsante e la resistenza
la resistenza va' tra il GND e il pin 2 e il pin2 è connesso a un capo del pulsante
all'altro capo del pulsante va' collegato il +5V
Antoniospa:
... Per l'esame di stato vorrei portare un progettino ... ogni 676 volte che premo il pulsante mi muova anche il tetzo motore
Mi immagino uno studente che preme un pulsante 676 volte durante l'esame di Stato, con la commissione che guarda grattandosi e lo studente: "..click... 201 ... click... 202... click... ora ci arriviamo, abbiate pazienza, ... click... 203... ops ho perso il conto, resetto..."
Se non l'avevi gia trovato, questo magari ti puo interessare, anche per dettagli storici