Loading...
Pages: 1 [2]   Go Down
Author Topic: Vi piace il mio braccio?? :D  (Read 888 times)
0 Members and 1 Guest are viewing this topic.
Urbana Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 196
a piccoli passi.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-mr-green smiley-mr-green smiley-mr-green
Cattivo
Logged

Carpi
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per il chiarimento.. No, no.. Array e funzioni sò cosa sono. Solo volevo essere sicuro di come le intendesse insieme!! =) Prima del finesettimana non riesco a provare niente di nuovo, quindi non ve la prendete..! =D
Logged

L'estensione fisica dello stato mentale!

Carpi
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Stò partendo dalle cose più semplici.. Per ora sistemo la funzione per la lettura dei dati..
Code:
void leggi_seriale(){
  byte cont = 0;
  char char_in[10];
  esci == false;
  if (Serial.available()>0) {
    command = Serial.read();
    delay(2);
  }
  while (esci == false) {
    if (Serial.available()>0) {
      Serial.println("Lettura variabile");
      char_in[cont] = Serial.read();
      if (char_in[cont] != ';') {
        Serial.println("Incremento contatore");
        cont ++;
      }
      else {
        Serial.println("Fine stringa");
        char_in[cont] == '/0';
        //esci == true;
        break;
      }
      delay(2);
    }
  }
  Serial.println("Uscito dal ciclo while");
  time_pause = atoi(char_in);
  Serial.println(time_pause, DEC);
  cont = 0;
}

Problema: perchè se metto "break;" il ciclo while termina correttamente mentre se setto esci == true no? Se imposto esci il ciclo si ferma ma non viene impostato nessun comando!
Logged

L'estensione fisica dello stato mentale!

Urbana Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 196
a piccoli passi.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
//esci == true;????
prova con
Code:
esci = true
Per le specifiche c/c++ il comando echi == true è un confronto, ma non è un errore di sintassi.
Non ha senso logico impostare in test in una sequenza di comandi, ma il compilatore è di bocca buona smiley-grin
Di solito l'errore è il contrario (hihi) durante il test si esegue un'assegnazione smiley-wink
Logged

Carpi
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che idiota!!  smiley-cry E si che nell'altro while l'avevo fatto giusto!! Grazie..
Logged

L'estensione fisica dello stato mentale!

Carpi
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nuovi aggiornamenti..
Code:
byte pwm_1 = 3; //Pin Velocità motore 1
byte pwm_2 = 11; //Pin Velocità motore 2
byte pwm_3 = 5; //Pin Velocità motore 3
byte pwm_4 = 6; //Pin Velocità motore 3
byte pwm_5 = 10; //Pin Velocità motore 4
byte dir_1 = 12; //Pin Direzione motore 1
byte dir_2 = 13; //Pin Direzione motore 2
byte dir_3 = 8; //Pin Direzione motore 3
byte dir_4 = 9; //Pin Direzione motore 4
byte dir_5a = 2; //Pin Direzione moore 5
byte dir_5b = 7; //Pin Direzione motore 5
byte stato_1 = 0; //Stato direzione morore 1
byte stato_2 = 0; //Stato direzione morore 2
byte stato_3 = 0; //Stato direzione morore 3
byte stato_4 = 0; //Stato direzione morore 4
byte stato_5 = 0; //Stato direzione morore 5
byte command = 0; //Comando per movimento
byte pwm_speed = 255; // Velocità motori
unsigned long time_pause = 0; //parametro per pausa
boolean esci = false; //uscita da ciclo while

void setup()
{
  // Inizio comunicazione seriale a 9600
  Serial.begin(9600);
  pinMode(pwm_1, OUTPUT);
  pinMode(pwm_2, OUTPUT);
  pinMode(pwm_3, OUTPUT);
  pinMode(pwm_4, OUTPUT);
  pinMode(dir_1, OUTPUT);   
  pinMode(dir_2, OUTPUT);
  pinMode(dir_3, OUTPUT);
  pinMode(dir_4, OUTPUT);
}

void loop()
{
  if (Serial.available() > 0) { //Se sono presenti dati nel buffer
    leggi_seriale(); //li leggo con la funzione
  }
  switch (command) { //Switch sul comando
  case 'q':
    clear_command();
    if (stato_1 == 0)
    {
      pausa();
      analogWrite(pwm_1, pwm_speed);
      digitalWrite(dir_1, LOW);
      Serial.println("Chiude pinza");
      stato_1 = 1;
      break;
    }
    else if (stato_1 == 1)
    {
      pausa();
      analogWrite(pwm_1, pwm_speed);
      digitalWrite(dir_1, HIGH);
      Serial.println("Apre pinza");
      stato_1 = 0;
      break; 
    }
  case 'w':
    clear_command(); 
    if (stato_2 == 0)
    { 
      pausa();
      analogWrite(pwm_2, pwm_speed);
      digitalWrite(dir_2, LOW);
      Serial.println("Scende braccio 1");
      stato_2 = 1;
      break;
    }
    else if (stato_2 == 1)
    {
      pausa();
      analogWrite(pwm_2, pwm_speed);
      digitalWrite(dir_2, HIGH);
      Serial.println("Sale braccio 1");
      stato_2 = 0;
      break; 
    }
  case 'e':
    clear_command(); 
    if (stato_3 == 0)
    {
      pausa();
      analogWrite(pwm_3, pwm_speed);
      digitalWrite(dir_3, LOW);
      Serial.println("Sale braccio 2");
      stato_3 = 1;
      break;
    }
    else if (stato_3 == 1)
    {
      pausa();
      analogWrite(pwm_3, pwm_speed);
      digitalWrite(dir_3, HIGH);
      Serial.println("Scende braccio 2");
      stato_3 = 0;
      break; 
    }
  case 'r':
    clear_command(); 
    if (stato_4 == 0)
    {
      pausa();
      analogWrite(pwm_4, pwm_speed);
      digitalWrite(dir_4, LOW);
      Serial.println("Scende braccio 3");
      stato_4 = 1;
      break;
    }
    else if (stato_4 == 1)
    {
      pausa();
      analogWrite(pwm_4, pwm_speed);
      digitalWrite(dir_4, HIGH);
      Serial.println("Sale braccio 3");
      stato_4 = 0;
      break; 
    }
  case 't':
    clear_command(); 
    if (stato_5 == 0)
    {
      pausa();
      analogWrite(pwm_5, pwm_speed);
      digitalWrite(dir_5a, LOW);
      digitalWrite(dir_5b, HIGH);
      Serial.println("Gira a destra");
      stato_5 = 1;
      break;
    }
    else if (stato_5 == 1)
    {
      pausa();
      analogWrite(pwm_5, pwm_speed);
      digitalWrite(dir_5a, HIGH);
      digitalWrite(dir_5b, LOW);
      Serial.println("Gira a sinistra");
      stato_5 = 0;
      break;   
    }
  case '1':
    pausa();
    clear_command();
    analogWrite(pwm_1, 0);
    analogWrite(pwm_2, 0);
    analogWrite(pwm_3, 0);
    analogWrite(pwm_4, 0);
    analogWrite(pwm_5, 0);
    Serial.println("Stop!");
    break;
  case 's':
    clear_command();
    Serial.print ("Pwm impostato a: ");
    Serial.println (pwm_speed, DEC);
    break;
  case 'a':
    clear_command();
    delay(250);
    break;
  }
}

void leggi_seriale(){
  byte cont = 0;
  char char_in[10];
  esci = false;
  if (Serial.available()>0) {
    command = Serial.read();
    delay(2);
  }
  while (esci == false) {
    if (Serial.available()>0) {
      char_in[cont] = Serial.read();
      if (char_in[cont] != ';') {
        cont ++;
      }
      else {
        char_in[cont] == '/0';
        esci = true;
        //break;
      }
      delay(2);
    }
  }
  if (command == 'p') {
    clear_command();
    if (cont <= 3 ) {
      pwm_speed = atoi(char_in);
      Serial.print("Velocità pwm impostata a: ");
      Serial.println(pwm_speed, DEC);
    }
    else if (cont > 3 ) {
      Serial.println("Parametri accettati 0-255");
      cont = 0;
    }
    else {
      time_pause = atoi(char_in);
    }
  }
  cont = 0;
}

void pausa(){
  delay(time_pause);
  time_pause=0;
}

void clear_command(){
  command = 0;
}

Ho corretto la parte riguardante la lettura dalla seriale. In questo modo è stato raggruppato il comando per l'impostazione del pwm perchè usava la stessa identica procedura! Ho portato la pulizia del comando ricevuto in una funzione, cos' da scriverlo una sola volta! In questo modo sono passato da circa 6,8k del primo sketch a 4.1k di questo!!
Logged

L'estensione fisica dello stato mentale!

Urbana Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 196
a piccoli passi.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io ti posto la mia proposta smiley-wink
Prova a vedere se ti è chiaro cosa ho scritto.
Caso mai lo commentiamo assieme smiley-wink

edit:
Binary sketch size: 2960 bytes (of a 30720 byte maximum)
« Last Edit: April 08, 2011, 07:02:39 am by Stilgar » Logged

Carpi
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dai, così non vale.. Dovresti prendertela con quella della tua età!! Aahahah!!  smiley-grin
Scerzi a parte... Penso di averci capito poco, o quasi niente. Direi a partire da tutto.. Mi sà proprio che devo studiare il C prima di arrivare a tanto! Se avessi la pazienza di spiegarlo te ne sarei grato, altrimenti cerco di capirlo da solo con calma! In ogni caso vorrei capire, non copiare!
Logged

L'estensione fisica dello stato mentale!

Urbana Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 196
a piccoli passi.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ha ha ha ha
A parte lo studiarsi la programmazione in c/c++ che ti consiglio caldamente.
I comandi per i motori sono di 3 tipi.
Li ho messi dentro 3 funzioni.
Poi la funzione che legge da seriale, converte al volo i numeri, senza passare per funzioni precostituite (occupando meno spazio, non utilizzando array d'appoggio). (E' solo un'embrione di parser, forse funziona smiley-wink ) Arduino è a casa, e non ho la possibilità di verificare il tutto dall'ufficio.
In ogni caso.
1) Organizzo la memoria con i riferimenti alle funzioni da chiamare.
2) Chiamo le operazioni in funzione del codice numerico che esce (tramite Token.Command) dalla seriale.
Nulla di complesso. Solo riorganizzato il codice, senza ridondanza di istruzioni smiley-wink

Facciamo prima se mi chiedi i singoli punti smiley-grin


Logged

Carpi
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora.. Adesso devo uscire quindi fino a stasera, se sarò a casa non se ne parla! Poi guarderò meglio e con più attenzione!!
Logged

L'estensione fisica dello stato mentale!

Pages: 1 [2]   Go Up
Print
 
Jump to: