Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 25 aprile 20, 12:39   #11 (permalink)  Top
User
 
L'avatar di italo.driussi
 
Data registr.: 02-07-2004
Residenza: Ronchi dei Legionari (GO)
Messaggi: 5.690
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
funziona, ho modificato i tempi di delay della corsa in movimento portandoli a 20 e i canali assegnati al servo e all'ingresso che sono diversi.. 10, 8
a questo punto mancherebbe solo una pausa di 2 secondi alle estremità dei fine corsa.

grazie!! è quasi pronto ad essere impiegato, andrà corretta la posizione del servo alle 2 estremità del loop portandola ai gradi giusti della visuale che dovrò avere dalla cam ma il tuo sketch fa precisamente quello che vorrei ottenere.
La metti alla fine dei cicli for

ciao
__________________
Solo Aeromodelli -
Autogiro Elicotteri Multirotori No grazie
italo.driussi non è collegato   Rispondi citando
Vecchio 25 aprile 20, 13:05   #12 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ho provato ad aggiungere alla fine dello sketch la stringa
}
delay(2000);

ottengo la pausa di 2 secondi ma solo su uno dei finecorsa, ora vedo se riesco ad assegnare la pausa anche all'altro..
se copio la stessa stringa anche all'altro delay poco sopra mi perdo la posizione al centro e cicla in entrambe le posizioni radio, quindi l'ho cancellato.

in pratica così fa quasi tutto quello che desidero eccetto la pausa anche sull'altro fine corsa.

#include <Servo.h>
Servo myservo;
int rxpulse = 1500;
int maxsx = 45; //-- tarare
int maxdx = 135; //-- tarare
int pservo = 90;
void setup() {
myservo.attach(10);
pinMode(8, INPUT); //-- legge RX
}

void loop() {
rxpulse = pulseIn(8, HIGH);
if (rxpulse > 1800)
{
myservo.write(90);
delay(200);

}
else
{
for (int n = maxsx; n <= maxdx; n++) {
myservo.write(n);
delay(20);

}

for (int n = maxdx; n >= maxsx; n--) {
myservo.write(n);
delay(20);
}

delay(2000);

}

}
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 13:09   #13 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da italo.driussi Visualizza messaggio
La metti alla fine dei cicli for

ciao
non proprio, se cpio la stessa stringa al "primo for" poi cicla sempre in entrambe le posizioni di aux, anzi, quella che dovrebbe essere ferma al centro cicla solo metà corsa con la pausa di 2 secondi poi recupera velocemente fino al centro e riparte il loop.

l'altra posizione funziona invece benissimo con la pausa di 2 secondi in entrambi i fine corsa..

andrebbe anche bene inserendo le 2 stringhe di delay perchè i fine corsa ora hanno entrambi la pausa ma dovrei ritrovare la posizione ferma avanti come nel primo sketch che hai postato

Ultima modifica di wrighizilla : 25 aprile 20 alle ore 13:16
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 13:39   #14 (permalink)  Top
User
 
L'avatar di giocavik
 
Data registr.: 14-02-2006
Residenza: provincia VT
Messaggi: 3.672
Cioè hai un interruttore sulla
Tx con cui vorresti mandare
la telecamera ai due estremi
e all'occorrenza anche al
centro..?
Se e' così e ci hai il fail safe
banalmente lo programmi per
portare il servo al centro se
spegni la tx, e vai in saccoccia
ad arduino...
giocavik non è collegato   Rispondi citando
Vecchio 25 aprile 20, 13:45   #15 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da giocavik Visualizza messaggio
Cioè hai un interruttore sulla
Tx con cui vorresti mandare
la telecamera ai due estremi
e all'occorrenza anche al
centro..?
Se e' così e ci hai il fail safe
banalmente lo programmi per
portare il servo al centro se
spegni la tx, e vai in saccoccia
ad arduino...
ti ringrazio dell'intervento ma premesso che il failsafe non ce l'ho, credo che non c'entra nulla usare un failsafe.

sto cercando di ottenere un loop programmabile sia come velocità di scorrimento che come punto di end point nei quali si ferma, compresa la durata della pausa..
ovvio che il più delle volte serve solo la posizione al centro ma non potendo dare un occhiata da entrambi i lati mi sembra una soluzione sensata programmare una nano per fare una panoramica in loop.

lo sketch proposto da Italo va benissimo, manca solo la pausa di 2 secondi agli end point.
per adesso non riesco ad ottenere il loop con le pause agli end point senza che nella posizione aux 2 il servo cicli ugualmente metà corsa con pausa.. sicuramente è una banalità ma appunto sto cercando di capirne la logica.
a dire il vero credo di aver capito che il problema potrebbe essere nel valore for (int n = maxsx; n <= maxdx; n++) che genera il loop indesiderato nella posizione aux nella quale la cam dovrebbe rimanere ferma..

ma non so ancora scriverlo

Ultima modifica di wrighizilla : 25 aprile 20 alle ore 13:54
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 14:06   #16 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
credo di aver capito che inserendo le 2 stringhe delay il problema potrebbe essere nel valore for (int n = maxsx; n <= maxdx; n++) che genera il loop indesiderato anche nella posizione aux2 nella quale la cam dovrebbe rimanere invece ferma..

il passaggio adesso è questo, così corretto con le stringhe delay
in posizione aux1 il loop è meraviglioso, funziona tutto benissimo.

for (int n = maxsx; n <= maxdx; n++) {
myservo.write(n);
delay(20);
}
delay(2000);
}
for (int n = maxdx; n >= maxsx; n--) {
myservo.write(n);
delay(20);
}
delay(2000);
}

ma purtroppo non so ancora scriverlo per correggerlo, per adesso sono solo al livello di copiare e analizzare sintassi e funzioni, posso capire la logica quando la vedrò scritta e potrò confrontare cosa mancava
vabè, comunque alla quinta ora mi va benissimo di essere messo così
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 16:16   #17 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ho risolto! grazie davvero, era solo una questione di parentesi mancanti, un amico mi ha datto questa dritta di incorporare assieme le funzioni di else ed è bastato.

questo è lo sketch con tutto funzionante.


https://pastebin.com/embed_js/CiB7LMY1


#include <Servo.h>
Servo myservo;
int rxpulse = 1500;
int maxsx = 45; //-- taratura fine corsa sx
int maxdx = 135; //-- taratura fine corsa dx
int pservo = 90;
void setup() {
myservo.attach(10);
pinMode(8, INPUT); //-- piedino che legge RX
}
void loop() {
rxpulse = pulseIn(8, HIGH);
if (rxpulse > 1600)
{
myservo.write(90); //-- taratura centratura del servo su canale aux1
delay(200);
}
else
{
{
for (int n = maxsx; n <= maxdx; n++) {
myservo.write(n);
delay(20); //-- velocità di rotazione loop su aux2
}
delay(2000); //-- tempo di pausa endpoint
}
for (int n = maxdx; n >= maxsx; n--) {
myservo.write(n);
delay(20); //-- velocità di rotazione loop su aux2
}
delay(2000); //tempo di pausa endpoint
}
}


vi ringrazio tantissimo, stasera sarà sul camion

questo sketch adesso permette di usare una radio con aux con deviatore 2 posizioni e avere un loop programmabile su una delle 2 posizioni.
permette inoltre:
- centrarsi su un certo grado di rotazione a piacimento per la posizione dove il servo sta fermo.
- decidere la velocità e la corsa del loop
- impostare a piacimento una pausa ai fine corsa (1sec. = 1000)

lo trovo utilissimo, vi ringrazio ancora
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 16:44   #18 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da madqwerty Visualizza messaggio
considerando che non programmo con Arduino da un tot (non programmo da un tot in generale ) e che non ho mai usato la libreria servo..

...........
non so se sia giusta la routine di lettura dell'input, e anche non ricordo come dichiarare gli AND
grazie, ora provo a far funzionare anche il tuo sketch, inizio a capire meglio la sintassi e chiaramente ci voglio provare

mi spaventava un pò questa roba ma alla fine è molto interessante.. anche sbagliando si scoprono ugualmente alcune cose utili.
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 18:14   #19 (permalink)  Top
User
 
L'avatar di madqwerty
 
Data registr.: 18-05-2013
Residenza: Chivasso (TO)
Messaggi: 2.352
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
grazie, ora provo a far funzionare anche il tuo sketch,
de nada, onorato di poterti essere d'aiuto, vista quantità e qualità delle tue opere

l'unico vantaggio del mio è che che non ha delay lunghi nel main loop (li spezzetta in piccoli delay sempre lunghi uguali) quindi se torni al centro con l'interruttore ch3 non devi attendere un tempo random da 0 a 2 secondi del delay alla fine dei cicli for ,

però non l'ho nemmeno passato al compilatore, di sicuro contiene errori grammaticali (gli AND verso il fondo) e anche la lettura del ch3, vedendo come fa lo sketch dopo il mio, ma può servirti per fare un po' di palestra
__________________
v911 - mCPX - PRȎTOS - TRex 450 500 550
A959B - Q32 - DF03 - LRP TC2 - XB4 - M06 - B5(M) - T8E - X1 - T4 - XB2C - GF01
madqwerty non è collegato   Rispondi citando
Vecchio 25 aprile 20, 18:15   #20 (permalink)  Top
User
 
L'avatar di italo.driussi
 
Data registr.: 02-07-2004
Residenza: Ronchi dei Legionari (GO)
Messaggi: 5.690
Prova questo



#define LPAUSA 2000 //-- pausa laterale
#define CPAUSA 2000 //-- pausa centrale
#define maxsx 45 //-- corsa max sx
#define maxdx 135 //-- corsa max dx
#define centro 90 //-- centro servo
#define VelSer 60 //-- velocita servo
#define PinSer 9 //-- pin servo
#define PinRX 8 //-- pin legge RX

#include <Servo.h>
Servo myservo;

int rxpulse = 1500;
int n = 90;

void setup() {
myservo.attach(PinSer);
pinMode(PinRX, INPUT);
}

void loop() {
rxpulse = pulseIn(PinRX, HIGH);
Serial.println(rxpulse);
if (rxpulse > 1700)
{
myservo.write(centro);
delay(200);
} else {
ruota();
}
}


void ruota() {
//-- da centro a sx
for (n = centro; n >= maxsx; n--) {
myservo.write(n);
delay(VelSer);
} delay(LPAUSA);
//-- torno al centro
for (n = maxsx ; n <= centro; n++) {
myservo.write(n);
delay(VelSer);
} delay(CPAUSA);
//-- da centro a dx
for (n = centro; n <= maxdx; n++) {
myservo.write(n);
delay(VelSer);
} delay(LPAUSA);
//-- torno al centro
for (n = maxdx ; n >= centro; n--) {
myservo.write(n);
delay(VelSer);
} delay(CPAUSA);
}
__________________
Solo Aeromodelli -
Autogiro Elicotteri Multirotori No grazie
italo.driussi non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
buggy da completare BoBoPoP Automodellismo Mot. Scoppio Off-Road 41 18 maggio 16 17:56
monster da completare...! bronto_19 Automodellismo Mot. Elettrico Off-Road 2 22 giugno 10 17:35
Sto costruendo uno schiumino (o tzagi), mi aiutate??? crido96 Aeromodellismo Principianti 72 07 febbraio 10 02:26
Come completare una associated B4? ryan-j Automodellismo Mot. Elettrico On-Road 9 04 maggio 08 11:55



Tutti gli orari sono GMT +2. Adesso sono le 18:01.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002