Go Down

Topic: Aiuto programmazione newbye (Read 370 times) previous topic - next topic

Mosc

May 17, 2012, 06:08 pm Last Edit: May 17, 2012, 06:12 pm by Mosc Reason: 1
Salve a tutti, mi sto cimentando nella gestione di una pinza gestita da motori DC senza finecorsa.
Quindi, devo fare in modo che una volta iniziata la chiusura, dopo un TOT tempo (che dovrà esser calibrato con il tempo che ci mette la pinza a chiudersi ) i motori si fermino.

Purtroppo non ho quì con me nè Arduino, ne il materiale...

Ho pensato ad un algoritmo del genere:

Code: [Select]
void chiusurapinza ()
{
 tempo_inizio_chiusura = millis();
 
 if ( stato_pinza == 1 ) // pinza aperta
 {  
   while ( tempo_corrente - tempo_inizio_chiusura < intervallo_apertura )
   {
     tempo_corrente = millis();
     
     digitalWrite( pin_motore_pinza_C, LOW );
     digitalWrite( pin_motore_pinza_D, HIGH );
   }
   
     digitalWrite( pin_motore_pinza_C, LOW );
     digitalWrite( pin_motore_pinza_D, LOW );
     
     stato_pinza = 0; // pinza chiusa
   }
 }
}


Può funzionare secondo voi? Voi come lo avreste fatto?
Avrei voluto evitare di mettere while, che mi limitano un pò il programma.. (durante il while non può ricevere altri dati, o comunque svolgere altre operazioni)

Mosc

Per la domanda sopra penso di aver risolto, grazie comunque  :D

Ora mi si è presentato un altro problema... Dovuta alle mie carenze di programmazione in C  :smiley-fat:

Vorrei un array di stringhe, per fare una cosa del genere:

Code: [Select]
void richiesta_posizione_pinza()
{
  char posizione[2];
 
  if ( stato_elevatore == 0 )
    posizione[1] = "abbassata";
  else
    posizione[1] = "sollevata";
   
  if ( stato_pinza == 0 )
    posizione[2] = "chiusa";
  else
    posizione[2] = "aperta";
   
  Serial.print( "La pinza e' ");
  Serial.print( posizione[1] );
  Serial.print( " e ");
  Serial.println( posizione[2] );
}


Se metto string al posto di char non funziona, ma neanche così funziona...

lesto

char è una sola lettera, quindi non può contenere una stringa. in olre gli array partono a contare da 0, quindi se dici char posizione[2];
poi puoi usare gli indici 0 e 1: posizione[0]; e posizione[1]; !!!

se metti String (notare la lettera maiscola!) dovrebbe funzionare

edit: String e sistemare gli indici, ovvio :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Mosc


char è una sola lettera, quindi non può contenere una stringa. in olre gli array partono a contare da 0, quindi se dici char posizione[2];
poi puoi usare gli indici 0 e 1: posizione[0]; e posizione[1]; !!!

se metti String (notare la lettera maiscola!) dovrebbe funzionare

edit: String e sistemare gli indici, ovvio :)


Facendo prove a caso, ho fatto questo prima di leggere la risposta e funziona (anche se non sò perchè)  :D

Code: [Select]
void richiesta_posizione_pinza()
{
  char* posizione[2];
 
  if ( stato_elevatore == 0 )
    posizione[1] = "abbassata";
  else
    posizione[1] = "sollevata";
   
  if ( stato_pinza == 0 )
    posizione[2] = "chiusa";
  else
    posizione[2] = "aperta";
   
  Serial.print( "La pinza e' ");
  Serial.print( posizione[1] );
  Serial.print( " e ");
  Serial.println( posizione[2] );
}


Comunque grazie mille, correggo subito!

Code: [Select]
void richiesta_posizione_pinza()
{
  String posizione[2];
 
  if ( stato_elevatore == 0 )
    posizione[0] = "abbassata";
  else
    posizione[0] = "sollevata";
   
  if ( stato_pinza == 0 )
    posizione[1] = "chiusa";
  else
    posizione[1] = "aperta";
   
  Serial.print( "La pinza e' ");
  Serial.print( posizione[0] );
  Serial.print( " e ");
  Serial.println( posizione[1] );
}


Quindi durante l'inizializzazione non si "inizia a contare" da 0?

lesto

sì, nell'inizializzazione dici il numero di elementi che vuoi, e poi però quando li usi parti a contare da 0. il motivo è che così la matematica dei puntatori viene più semplice, ma è roba che non vedi
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Mosc


sì, nell'inizializzazione dici il numero di elementi che vuoi, e poi però quando li usi parti a contare da 0. il motivo è che così la matematica dei puntatori viene più semplice, ma è roba che non vedi
Capito, grazie mille per la spiegazione!  XD

Go Up