Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: [1]   Go Down
Author Topic: Problema divisione per zero (float/float)  (Read 174 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutto il forum,

stavo riscrivendo il software del mio piccolo line follower e mi sono imbattuto in un problema...

Code:
  for(int i=0; i<4; i++)
  {
    sensorReading[i] = !digitalRead(sensor[i]);
    if(sensorReading[i]==1) {
      activeSensor+=1;
    }
    totalSensor += sensorReading[i] * (i+1);
  }

  avgSensor = totalSensor/activeSensor;
  activeSensor = 0.0;
  totalSensor = 0.0;

in questo modo calcolo l'errore dato da quattro sensori digitali...le classice fotocellule.
Il problema sorge quando per qualche motivo tutti i sensori sono zero...o perchè esce fuori dalla linea o perchè per le vibrazioni un sensore è troppo lontano dalla linea e non si attiva.
Praticamente mi ritrovo 0/0 e avgSesnsor mi restituisce Nan.
Il regolatore che segue prende la tramontana e spara i pwm a tutta birra.
la cosa strana è che se lo rimetto in carreggiata o se in modalità debug sposto il robottino e lo rimetto sulla linea...il calcolo dell'errore resta sempre su NaN...non capisco come risolvere il problema...
Vi è mai capitato? sapete come risolvere il problema?!

Ciao
Alex
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 89
Posts: 5151
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In che senso ?
Anche in matematica N/0 fa infinito e per un calcolatore non ha senso.
Lo devi "intrappolare" con un if (lo devi gestire tu come caso particolare).
Logged

my name is IGOR, not AIGOR

Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In che senso ?
Anche in matematica N/0 fa infinito e per un calcolatore non ha senso.
Lo devi "intrappolare" con un if (lo devi gestire tu come caso particolare).


Si si...infatti mentre aspettavo risposte dagli esperti ho midificato il codice così
Code:
  for(int i=0; i<4; i++)
  {
    sensorReading[i] = !digitalRead(sensor[i]);
    if(sensorReading[i]==1) {
      activeSensor+=1;
    }
    totalSensor += sensorReading[i] * (i+1);
  }

  if (activeSensor != 0){
    avgSensor = totalSensor/activeSensor; 
  }
  else {
    wrongTrack++;
    if (wrongTrack >= tmpWTrack){
      stato = 4;
    }
  }
  activeSensor = 0.0;
  totalSensor = 0.0;

praticamente se la activeSensor è uguale a zero salto la divisione e ci riprovo il giro dopo.
Se questo accade per x volte camio stato e blocco i motori.

Ora ho solo il problema di trare sto cazzo di PID. (il PID l'ho scritto io...non ho usato la libreria..)
E' veramente complicato trovare il giusto modo per avvicinarsi ai valori corretti...
Anche qui, se c'è qualche guru e mi può dare qualche dritta....  smiley-red smiley-red
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 89
Posts: 5151
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry, sul PID non ti sò aiutare. Pazienta, qualcuno ti aiuterà.
Logged

my name is IGOR, not AIGOR

Pages: [1]   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: