salve a tutti, ho ben pensato di proporre ai miei amici di effettuare la movimentazione di un carro allegorico che rappresenta la bambola del film coreano squidgam*, controllata da un arduino uno r3, che sarà mai...
Bene armato della mia scarsissima dote di programmazione della enorme ignoranza in materia ma dalla più grande voglia di mettermi in gioco ed imparare, la prima cosa che ho fatto è avere uno schema mentale dei movimenti:
1° ruota il corpo di 180° verso muro finecorsa stop movimento
tempo di attesa di 4 secondi
2° ruota testa di 180° verso "pubblico" (nello sketch verso avanti) finecorsa stop movimento
tempo di attesa 2 secondi
3° accende 2 lampade negli occhi per x tempo alterna accensione spegnimento 2 volte
4°ritorna la testa vero il muro finecorsa stop
5° ritorna la bambola verso pubblico (nello sketch verso avanti) finecorsa stop
Ho anche inserito un pulsante di emergenza che vorrei fosse alto, nel caso in cui ci fosse un guasto allo stesso fermasse comunque tutti i movimenti.
fatto ciò provo a scrivere il mio primo sketch da solo, con l'aiuto iniziale di tinkercad
il risultato non è dei migliori ma non mi arrendo provo e riprovo mi servirebbe un pò di aiuto per capire dove, cosa sbaglio
const int pinAvvio = 2; // Pulsante di avvio
const int pinCorpoMuro = 3; // Relè corpo muro
const int pinTestaAvanti = 4; // Relè testa avanti
const int pinOcchi = 5; // Relè occhi
const int pinTestaMuro = 6; // Relè testa muro
const int pinCorpoAvanti = 7; // Relè corpo avanti
const int pinEmergenza = 12; // Pulsante di emergenza
const int pinFCCorpoMuro = 8; // Finecorsa corpo muro
const int pinFCTestavanti = 9; // Finecorsa testa avanti
const int pinFCTestamuro = 10; // Finecorsa testa muro
const int pinFCCorpoAvanti = 11; // Finecorsa corpo avanti
void setup() {
pinMode(pinAvvio, INPUT);
pinMode(pinCorpoMuro, OUTPUT);
pinMode(pinTestaAvanti, OUTPUT);
pinMode(pinOcchi, OUTPUT);
pinMode(pinTestaMuro, OUTPUT);
pinMode(pinCorpoAvanti, OUTPUT);
pinMode(pinEmergenza, INPUT_PULLUP);
pinMode(pinFCCorpoMuro, INPUT);
pinMode(pinFCTestavanti, INPUT);
pinMode(pinFCTestamuro, INPUT);
pinMode(pinFCCorpoAvanti, INPUT);
}
void loop() {
if (digitalRead(pinEmergenza) == LOW) {
// Se il pulsante di emergenza è premuto, spegni tutti i relè
digitalWrite(pinCorpoMuro, LOW);
digitalWrite(pinTestaAvanti, LOW);
digitalWrite(pinOcchi, LOW);
digitalWrite(pinTestaMuro, LOW);
digitalWrite(pinCorpoAvanti, LOW);
// Aggiungi eventuali altre azioni di emergenza necessarie
} else if (digitalRead(pinAvvio) == HIGH) {
// Primo Movimento
digitalWrite(pinCorpoMuro, HIGH);
while (digitalRead(pinFCCorpoMuro) == LOW) {
// Attendi fino a raggiungere il finecorsa
}
digitalWrite(pinCorpoMuro, LOW);
// Pausa di 4 secondi
delay(4000);
// Secondo Movimento
digitalWrite(pinTestaAvanti, HIGH);
while (digitalRead(pinFCTestavanti) == LOW) {
// Attendi fino a raggiungere il finecorsa
}
digitalWrite(pinTestaAvanti, LOW);
// Pausa di 2 secondi
delay(2000);
// Terzo Movimento
digitalWrite(pinOcchi, HIGH);
delay(3000);
digitalWrite(pinOcchi, LOW);
delay(2000);
digitalWrite(pinOcchi, HIGH);
delay(4000);
digitalWrite(pinOcchi, LOW);
// Quarto Movimento
digitalWrite(pinTestaMuro, HIGH);
while (digitalRead(pinFCTestamuro) == LOW) {
// Attendi fino a raggiungere il finecorsa
}
digitalWrite(pinTestaMuro, LOW);
// Pausa di 3 secondi
delay(3000);
// Quinto Movimento
digitalWrite(pinCorpoAvanti, HIGH);
while (digitalRead(pinFCCorpoAvanti) == LOW) {
// Attendi fino a raggiungere il finecorsa
}
digitalWrite(pinCorpoAvanti, LOW);
}
}