
![]() | #1 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| mi aiutate a completare uno sketch?
sto giocando con una arduino nano e vorrei poter usare il ch3 di una radio a volantino (on off) in modo che su una posizione ottengo un servo loop che va da un fine corsa all'altro. questo è lo sketch del servo loop, appena si carica il servo inizia a ruotare da un lato all'altro della sua corsa. int pos = 0; void setup() { myservo.attach(10); } void loop() { for(pos = 0; pos < 180; pos += 1) { myservo.write(pos); delay(25); } for(pos = 180; pos>=1; pos-=1) { myservo.write(pos); delay(25); } } purtroppo sono non più di 4 ore totali che gioco con questa roba e la nebbia è troppo densa, non mi riesce. ![]() vorrei poterlo completare aggiungendo tutto quello che manca per dire alla nano che dovrà fare il loop quando riceverà il segnale di una delle 2 posizioni dalla ricevente del radiocomando. mentre nell'altra posizione il servo dovrà stare fisso centrato indipendentemente dalla posizione nella quale sarà quando verrà azionato l'aux ch3 della radio, in pratica come se la nano non ci fosse. per favore mi aiutate? ![]() vorrei fare questo progetto per ovviare alla mancanza di un ch3 proporzionale sulla mia radio spektrum dx3s l'applicazione servirebbe per ruotare una videocamera e darsi un'occhiata intorno ma poter tornare alla visuale frontale in qualsiasi momento. ma se avete altre soluzioni potrebbero essere altrettanto interessanti. |
![]() | ![]() |
![]() | #2 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
ops.. ho dimenticato le prime 2 stringhe: ![]() #include <Servo.h> Servo myservo; di seguito il resto scritto nel post precedente. ![]() myservo.attach 10 può essere cambiato di valore in base a quale piedino usate in uscita per il segnale del servo. vorrei anche poter aggiungere una breve pausa raggiunti i fine corsa, 1 secondo andrebbe bene. sto studiando come fare, se lo sapete aiutatemi per favore ![]() Ultima modifica di wrighizilla : 24 aprile 20 alle ore 23:25 |
![]() | ![]() |
![]() | #3 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
ok almeno questo è stato facile.. questo è lo sketch del servo che ruota in loop con una pausa di 2 secondi sui fine corsa #include <Servo.h> Servo myservo; int pos = 0; void setup() { myservo.attach(10); // il piedino assegnato al segnale servo } void loop() { for (pos = 0; pos <= 180; pos += 1) { //il servo ruota da 1 a 180 gradi con step di 1 passo alla volta myservo.write(pos); delay(15); // la velocità con la quale il servo effettuerà la sua corsa in un verso } delay(2000); //2000 sono 2 secondi di pausa for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); // la velocità con la quale il servo effettuerà la sua corsa nell'altro verso } delay(2000); //altri 2 secondi di pausa prima di ricominciare il loop } --------------------- per adesso sono arrivato qui.. se sapete come fare per aggiungere quello che manca per comandare il loop dalla ricevente del modello vi sarei riconoscente ![]() Ultima modifica di wrighizilla : 24 aprile 20 alle ore 23:57 |
![]() | ![]() |
![]() | #4 (permalink) Top |
User Data registr.: 18-05-2013 Residenza: Chivasso (TO)
Messaggi: 2.352
|
considerando che non programmo con Arduino da un tot (non programmo da un tot in generale ![]() #include <Servo.h> Servo myServo, myInput; int newPos, oldPos; bool direzione; void setup() { myServo.attach(10); myInput.attach(ingresso_ch3); newPos = 90; oldPos = 90; direzione = true; myservo.write(pos); } void loop() { oldPos = newPos; if (myInput.read() < soglia_on_off_ch3) { newPos = 90; direzione = true; } else { if (direzione) { if (newPos < 220) NewPos++; else direzione = false; } else { if(newPos > -40) NewPos--; else direzione = true; } if ( (newPos != oldPos) AND (newPos <= 180) AND (newPos >=0) ) myservo.write(newPos); delay(25); } non so se sia giusta la routine di lettura dell'input, e anche non ricordo come dichiarare gli AND
__________________ v911 - mCPX - PRȎTOS - TRex 450 500 550 A959B - Q32 - DF03 - LRP TC2 - XB4 - M06 - B5(M) - T8E - X1 - T4 - XB2C - GF01 |
![]() | ![]() |
![]() | #5 (permalink) Top |
User Data registr.: 18-05-2013 Residenza: Chivasso (TO)
Messaggi: 2.352
|
newPos e oldPos ti servono per capire che da un loop all'altro la posizione sia stata ricalcolata, quindi non dare comandi al servo non utili alla causa, direzione serve per ricordare da un loop all'altro dove stava muovendo e newPos oltre a 180 e inferiore a 0 ti servono per gestire i delay del servo fermo a dx o sx, tanto il controllo finale non li manderà al servo scritto così "a sensazione" eh ![]()
__________________ v911 - mCPX - PRȎTOS - TRex 450 500 550 A959B - Q32 - DF03 - LRP TC2 - XB4 - M06 - B5(M) - T8E - X1 - T4 - XB2C - GF01 |
![]() | ![]() |
![]() | #6 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
![]() lo decido io? ad esempio nella parentesi (ingresso_ch3) scrivo 8 e poi collego la rx al piedino 8? inoltre non ritrovo scritto un delay di 2 secondi sui fine corsa comunque dopo lo carico e lo studio meglio. Ultima modifica di wrighizilla : 25 aprile 20 alle ore 01:20 | |
![]() | ![]() |
![]() | #7 (permalink) Top |
User Data registr.: 02-07-2004 Residenza: Ronchi dei Legionari (GO)
Messaggi: 5.707
|
Punto di partenza #include <Servo.h> Servo myservo; int rxpulse = 1500; int maxsx = 45; //-- tarare int maxdx = 135; //-- tarare int pservo = 90; void setup() { myservo.attach(9); pinMode(3, INPUT); //-- legge RX } void loop() { rxpulse = pulseIn(3, HIGH); if (rxpulse > 1700) { myservo.write(90); delay(200); } else { for (int n = maxsx; n <= maxdx; n++) { myservo.write(n); delay(50); } for (int n = maxdx; n >= maxsx; n--) { myservo.write(n); delay(50); } } }
__________________ Solo Aeromodelli - Autogiro Elicotteri Multirotori No grazie |
![]() | ![]() |
![]() | #8 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
ho provato a inserire un valore numerico ma rimane l'errore myservo not declared abbi pazienza è certamente banale ma ancora non sono capace di passare oltre intanto sul serial monitor ho testato i valori ottenuti dalla nano dalla ricevente. le 2 posizioni del canale ausiliario sono 1100 e 1904 ora non so dire ancora quale delle 2 sarà il loop. al canale servo ho assegnato il piedino 10 mentre l'ingresso del segnale è al piedino 8 | |
![]() | ![]() |
![]() | #9 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| 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. ![]() Ultima modifica di wrighizilla : 25 aprile 20 alle ore 11:30 |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
buggy da completare | BoBoPoP | Automodellismo Mot. Scoppio Off-Road | 41 | 18 maggio 16 16:56 |
monster da completare...! | bronto_19 | Automodellismo Mot. Elettrico Off-Road | 2 | 22 giugno 10 16:35 |
Sto costruendo uno schiumino (o tzagi), mi aiutate??? | crido96 | Aeromodellismo Principianti | 72 | 07 febbraio 10 01:26 |
Come completare una associated B4? | ryan-j | Automodellismo Mot. Elettrico On-Road | 9 | 04 maggio 08 10:55 |