Go Down

Topic: Lettura array (Read 314 times) previous topic - next topic

Ale9902

Buonasera a tutti, avrei bisogno di una dritta poichè nonostante il mio arrovellarmi sul problema, non sono giunto ad una soluzione decente. In poche parole ho un programma che memorizza in degli array il movimento di 6 servomotori e nella fase di riproduzione, da me avviata, somma i valori di tali array per rendere il movimento il più fluido possibile e con meno errori possibili. Ora, il mio problema sta nel fatto in cui tale riproduzione avviene in loop una volta avviata, mentre io vorrei che avvenisse soltanto quando un segnale esterno mi dà il consenso, per poi stopparsi e ripetersi quando arriverà un nuovo consenso. Per fare ciò se non erro devo conoscere l' ultimo valore contenuto nell' array di memoria, in modo tale che a tale valore io possa mettere in pausa il programma per poi farlo ripartire a nuovo input. Il fatto è che non so come estrarre l' ultimo valore contenuto nell' array, poichè i valori al suo interno vengono immagazzinati dal movimento di un servomotore, perciò l' andamento è analogico. Qualcuno di voi potrebbe avere idea di come fare ad estrarre l' ultimo valore dagli array di memoria? Grazie mille, buon continuo di serata, Alessandro.

Silente

Non ho capito bene,
Tu vorresti una cosa tipo (correggi se sbaglio)
Loop che fa qualcosa
Qualcosa riempie degli array
Arriva un segnale esterno
I motori si muovono in base al contenuto degli array
Al termine del movimento la loop continua nek suo operato.
Corretto?

SE É COSÌ perché non fare una
Code: [Select]

//in loop
if (condizione esterna)
{
//muovo i motori una volta
}


Attenzione che in questo modo se la durata della condizione esterna fosse maggiore di un ciclo di movimento motori più un ciclo di loop normale i motori si muoverebbero più volte.

Ho capito bene?
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Puso

qualcosa del tipo

SE(leggi i bottone premuto)//ovviamente già il bottone premuto ha una sua logica di ciclo finito(e non è così semplice come sembra...e da capire bene prima di provare ad utilizzarlo)

{
  metti il puntatore al post giusto;
  dai al servo i gradi impostati nell'array puntato;
  avanza o arretra il puntatore;
  SE(il puntatore è >= oppure <= alla dimensione dell' array)
      {
       magari lo confronto con un altre variabile;//che probabilmente non utilizzi
       SE((le variabili sono uguali)||(puntatore>dell'array))
           {
            il puntatore torna a zero
           }
      }
}


ecco qualkosa del genere......spero di essert stato di aiuto.
ciao

Ale9902

Non ho capito bene,
Tu vorresti una cosa tipo (correggi se sbaglio)
Loop che fa qualcosa
Qualcosa riempie degli array
Arriva un segnale esterno
I motori si muovono in base al contenuto degli array
Al termine del movimento la loop continua nek suo operato.
Corretto?

SE É COSÌ perché non fare una
Code: [Select]

//in loop
if (condizione esterna)
{
//muovo i motori una volta
}


Attenzione che in questo modo se la durata della condizione esterna fosse maggiore di un ciclo di movimento motori più un ciclo di loop normale i motori si muoverebbero più volte.

Ho capito bene?
No, scusa se mi sono spiegato in malo modo, praticamente io ho 6 potenziometri e 6 servomotori. Inizialmente premo il pulsante di registrazione e in base ai movimenti che effettuo con i potenziometri, mappo i valori e gli memorizzo in un' array di memoria. Alla pressione del pulsante di riproduzione, tali array vengono scritti dai servomotori, però in loop infinito. Ciò di cui necessiterei invece è che quando viene premuto il pulsante di riproduzione, i servo si preparino a riprodurre per poi effettuare la riproduzione quando arriva un' ulteriore input esterno (che nel mio caso è una fotocellula). la riproduzione viene fatta una sola volta e viene ripetuta ogni qualvolta si ripresenta l' input esterno, considerando sempre vero il fatto che il pulsante di riproduzione sia stato premuto inizialmente (una tantum).

Silente

Ok, grazie del chiarimento. Praticamente io potrei mettere una variabile booleana che rendo vera se sento pulsante di attivazione premuto, e magari per sicurezza la rendo falsa se sento premuto il pulsante di memorizzazione, cosicché i motori non possono partirmi e fare casino mentre manovro i potenziometri (consiglio personale).
Se sento il pulsante azione premuto
Rendo vera la variabile
Le la variabile è vera e sento fotocellula (o non sento fotocellula a seconda del metodo di funzionamento)
Muovo i motori

Una cosa come descritta può andare?
E sai farla?
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Ale9902

Ok, grazie del chiarimento. Praticamente io potrei mettere una variabile booleana che rendo vera se sento pulsante di attivazione premuto, e magari per sicurezza la rendo falsa se sento premuto il pulsante di memorizzazione, cosicché i motori non possono partirmi e fare casino mentre manovro i potenziometri (consiglio personale).
Se sento il pulsante azione premuto
Rendo vera la variabile
Le la variabile è vera e sento fotocellula (o non sento fotocellula a seconda del metodo di funzionamento)
Muovo i motori

Una cosa come descritta può andare?
E sai farla?
Si, penso che possa andare, penso anche di essere in grado di farla poichè alla fine si tratta di due funzioni in and logico, il fatto è che fino ad ora ho provato qualcosa di simile, ma probabilmente cercando di estrarre il valore dagli array ho commesso qualche errore, ora provo con un semplice segnale della fotocellula, grazie mille!

Patrick_M

puoi cercare anche robot arm arduino e sicuramente troverai enne esempi

comunque tu sai a priori di quanti elementi sono composti gli array quindi è semplice eseguirli dal primo all'ultimo elemento al verificarsi di una condizione (fotocellula, pulsante o sensore di qualsivoglia tipo)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Go Up