buongiorno a tutti, sono nuovo e a digiuno di arduino, ho realizzato il casco di iron man con arduino nano every, premetto che trovato lo schema e il codice già fatti in rete.
funziona tutto bene, si apre e si chiude, ho solo un problema, quando do alimentazione alla scheda i servocomandi fanno un mezzo giro, si può evitare modificando il codice?
Grazie mille a chi mi aiuterà!
Questo è il codice:
#include "ServoEasing.hpp"
ServoEasing servoDx;
ServoEasing servoSx;
const int action_pin = 2;
const int ledPin = 6;
const int potPin = A0;
int location = 31;
int Sx_closed = 170;
int Dx_closed = 15;
int Sx_open = 10;
int Dx_open = 190;
int value;
int maxBrightness;
void setup()
{
pinMode(action_pin, INPUT_PULLUP);
pinMode(potPin, INPUT);
servoDx.attach(9);
servoSx.attach(10);
setSpeedForAllServos(170);
servoDx.setEasingType(EASE_CUBIC_IN_OUT);
servoSx.setEasingType(EASE_CUBIC_IN_OUT);
synchronizeAllServosStartAndWaitForAllServosToStop();
}
void loop()
{
value = analogRead(potPin);
maxBrightness = map(value, 250, 750, 0, 255);
int proximity = digitalRead(action_pin);
if (proximity == LOW)
{
if (location > Sx_open) {
servoDx.setEaseTo(Dx_open);
servoSx.setEaseTo(Sx_open);
synchronizeAllServosStartAndWaitForAllServosToStop();
location = Sx_open;
delay(5);
analogWrite(ledPin, 0);
} else {
servoDx.setEaseTo(Dx_closed);
servoSx.setEaseTo(Sx_closed);
synchronizeAllServosStartAndWaitForAllServosToStop();
location = Sx_closed;
delay(50);
analogWrite(ledPin, maxBrightness / 3);
delay(100);
analogWrite(ledPin, maxBrightness / 5);
delay(100);
analogWrite(ledPin, maxBrightness / 2);
delay(100);
analogWrite(ledPin, maxBrightness / 3);
delay(100);
analogWrite(ledPin, maxBrightness);
delay(100);
}
}
}
Devi tenere traccia della posizione attuale dei servo salvandola in una memoria non volatile (nel caso della Every potrebbe essere l'EEPROM ad esempio).
All'accensione del micro, ci sarà da evitare che i servo vadano nella posizione di default (dovrebbe essere a 90°) e dovrai fare in modo invece che vadano nell'ultima salvata e quindi se non ci sono stai spostamenti "manuali", di fatto dovrebbero rimanere fermi.
Dovrebbe bastare la chiamata alla funzione nel setup() prima di attivare il movimento.
Buongiorno e buon anno, eccomi ancora quà, abbiate pazienza
Ho modificato il codice come mi avete consigliato ma mi da errore, è Usa i tags code per formattare il codice per il forumgiusto come ho fatto?
#include "ServoEasing.hpp"
ServoEasing servoDx;
ServoEasing servoSx;
const int action_pin = 2;
const int ledPin = 6;
const int potPin = A0;
int location = 31;
int Sx_closed = 170;
int Dx_closed = 15;
int Sx_open = 10;
int Dx_open = 190;
int value;
int maxBrightness;
void setup()
{
servoDx.setEaseTo(Dx_open)
servoSx.setEaseTo(Sx_open)
pinMode(action_pin, INPUT_PULLUP);
pinMode(potPin, INPUT);
servoDx.attach(9);
servoSx.attach(10);
setSpeedForAllServos(170);
servoDx.setEasingType(EASE_CUBIC_IN_OUT);
servoSx.setEasingType(EASE_CUBIC_IN_OUT);
synchronizeAllServosStartAndWaitForAllServosToStop();
}
void loop()
{
value = analogRead(potPin);
maxBrightness = map(value, 250, 750, 0, 255);
int proximity = digitalRead(action_pin);
if (proximity == LOW)
{
if (location > Sx_open) {
servoDx.setEaseTo(Dx_open);
servoSx.setEaseTo(Sx_open);
synchronizeAllServosStartAndWaitForAllServosToStop();
location = Sx_open;
delay(5);
analogWrite(ledPin, 0);
} else {
servoDx.setEaseTo(Dx_closed);
servoSx.setEaseTo(Sx_closed);
synchronizeAllServosStartAndWaitForAllServosToStop();
location = Sx_closed;
delay(50);
analogWrite(ledPin, maxBrightness / 3);
delay(100);
analogWrite(ledPin, maxBrightness / 5);
delay(100);
analogWrite(ledPin, maxBrightness / 2);
delay(100);
analogWrite(ledPin, maxBrightness / 3);
delay(100);
analogWrite(ledPin, maxBrightness);
delay(100);
}
}
}
Se non riporti in dettagli CHE errore ti da come si fa a risponderti ???
NI ... come vedi il codice NON è indentato ed è poco leggibile ... io scrivo sempre:
nel post seleziona la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmdT su un Mac, sempre all'interno del IDE).
... se fai così sei sicuro che il codice sarà ben indentato e lo avrai messo nei giusti tag CODE
ciao scusami ho lo stesso problema, potresti incollarmi il tuo codice. Inoltre vedo che il servo che va sulla faccia ruota di molto, non collide la faccia col casco in questo modo ? Grazie
Cortesemente, leggi attentamente il REGOLAMENTO di detta sezione: [REGOLAMENTO] Come usare questa sezione del forum
(... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15)
e poi, come da suddetto regolamento (punto 16.7), fai la tua presentazione IN CODA ALL'APPOSITA DISCUSSIONE: Presentazioni nuovi iscritti: fatevi conoscere da tutti! (Part 2)
spiegando bene quali esperienze hai in elettronica e in programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie
Gianluca
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento, nessuno ti risponderà (eventuali risposte, o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
P.P.S.: Evitate di utilizzare la traduzione automatica fatta dal browser ... vi impedisce di capire la lingua della sezione dove andate a scrivere ...