Pages: [1]   Go Down
Author Topic: Aiuto programmazione newbye  (Read 362 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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)
« Last Edit: May 17, 2012, 11:12:28 am by Mosc » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per la domanda sopra penso di aver risolto, grazie comunque  smiley-grin

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:
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...
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

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

Code:
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:
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?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!  smiley-lol
Logged

Pages: [1]   Go Up
Jump to: