![]() |
hai ragione:D cosi invece ?? Codice: int tempo, gradi, x, y, valore, gradiRil, i; |
Citazione:
Qui c'è tanta gente che ti può insegnare, ma devi collaborare un po' anche tu... Spostare il ritardo 'a caso' sicuramente ti porterà in circa 10/15 tentativi a metterlo nel posto giusto, ma non è un metodo particolarmente consigliabile. Ti ho detto di capire dove viene letto il pulsante; evidentemente non hai idea di come si faccia a leggere un pulsante... prova almeno a guardare sullo schema su che piedino è e a trovare nel codice dove viene usato quel pin e da lì dovrebbe essere più facile. ESERCIZIO: prendi il codice che hai postato e commenta tutte le righe spiegando cosa fanno. Michele |
:D se sapevo tutte ste cose....... riguardando meglio il tasto viene letto da gpio.f3 quindi per farmi il ritardo Codice: if(gpio.f3) |
ecco le righe commentate e giusto, cio capito qualcosa?:D Codice: int tempo, gradi, x, y, valore, gradiRil, i; //settaggio variabili |
Citazione:
Così va meglio, puoi anche metterlo dopo l'istruzione while(gpio.f3) che aspetta il rilascio del tasto (in realtà aspetta solo il primo rimbalzo...): in questo modo il ritardo parte quando rilasci il tasto. Attenzione perchè hai un problema di parentesi: dopo l'istruzione IF, in caso di test positivo, se non metti la parentesi verrà eseguita solo l'istruzione immediatamente seguente, mentre se usi le parentesi {...} verranno eseguite tutte le istruzioni racchiuse tra le parentesi; consiglio: usa sempre le parentesi anche per una sola istruzione: il codice è più semplice da leggere e da modificare. Michele |
quindi conviene mettere ogni istruzione fra le {...} ed il ritardo dopo il while(gpio.f3) ok piu o meno ci sono... ora come dovrei far ritornare il servo alla posizione iniziale... cosi inizio a smanettarci.. ci vorrebbe un simulatore grafico...sto usando MikroC ma non lo capito tanto.. come funziona il debugger? segue le istruzioni e quanto arriva al primo delay di ADC_READ inizia a contare all'infinito bho :o: |
Citazione:
Se x uguale a zero ma minore di tempo ???? La lettura corretta è: per tutti i valori di x crescenti da 0 a tempo (escluso) vengono ripetute le istruzioni del ciclo for. Gpio.f2 = 1 non genera un segnale servo... gpio.f2 = 0; questa cosa fa? i=i^1; //se i uguale portalo ad 1 cioe tasto premuto i uguale a che cosa? Perchè a 1? Questa istruzione fa una cosa molto diversa... if(i) gradi = gradiRil; else gradi = 40; //se i gradi sono uguali a gradiRil porta a 40 Qui proprio non ci siamo... |
Dunque credo almeno spero:P di aver trovato il punto dove mettere l'istruzione per far ritornare indietro il servo dopo che a eseguito la rotazione, quindi quel GOTO inizio li non va bene di sicuro, la posizione riposo e 40 ma potebbe essere 20 10 0 do per buono 40 quindi le istruzioni sotto sono corrette ma fina a un certo punto come è adesso attende una nuova pressione tasto per ritornare alla posizione iniziale.. quindi secondo la mia intelligenza caprina:P "goto inizio" va spostato alla fine del listato giusto?? Codice: { //ciclo istruzioni dopo pressione tasto |
Citazione:
Il codice da cui sei partito sente 2 pressioni del tasto: alla prima sposta il servo nella posizione impostata in 'gradi' e alla successiva lo porta alla posizione di riposo 40. if(i){ gradi = gradiRil; //gradi = valore rilevato dallADC(gradiRil) } else { gradi = 40; //gradi = 40 oppure il valore rilevato dallADC(gradiRil) } invece di questa scelta devi lasciare fissa l'impostazione che sposta il servo a gradiRil e poi lo riporti alla posizione di partenza, senza dover aspettare di premere ancora il tasto. |
http://prontoinfermieri.it/wp-conten...o-in-fumo1.jpg else gradi = 40; dice attendi nuova pressione per ritornare alla posizione riposo??? e se al posto di else metto return?? |
| Tutti gli orari sono GMT +2. Adesso sono le 13:26. |
Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002