Go Down

Topic: Libreria Servo (Read 58 times) previous topic - next topic

ardlucabla

Apr 10, 2019, 02:58 pm Last Edit: Apr 10, 2019, 03:15 pm by ardlucabla
Buongiorno a tutti (nuovamente  :) ). Avrei alcune perplessità per quando riguarda il codice della libreria Servo. In particolare:

Code: [Select]

//Costruttore della classe

Servo::Servo()
{
  if( ServoCount < MAX_SERVOS) {
        this->servoIndex = ServoCount++;                    // assign a servo index to this instance
servos[this->servoIndex].ticks = usToTicks(DEFAULT_PULSE_WIDTH);   // store default values  - 12 Aug 2009
  }
  else
    this->servoIndex = INVALID_SERVO ;  // too many servos
}


Credo sia un errore logico aumentare il ServoCount nel momento stesso in cui si dichiara la variabile di tipo Servo. Così si impone un limite sul numero di variabili istanziabili, mentre il limite che si vuole esprimere è sul numero di Servo pilotati contemporaneamente.

Così come credo sia un errore assegnare subito una ampiezza di default.

Code: [Select]

//Codice dell'attacch di Arduino

uint8_t Servo::attach(int pin, int min, int max)
{
  if(this->servoIndex < MAX_SERVOS ) {
    pinMode( pin, OUTPUT) ;                                   // set servo pin to output
    servos[this->servoIndex].Pin.nbr = pin;
    // todo min/max check: abs(min - MIN_PULSE_WIDTH) /4 < 128
    this->min  = (MIN_PULSE_WIDTH - min)/4; //resolution of min/max is 4 uS
    this->max  = (MAX_PULSE_WIDTH - max)/4;
    // initialize the timer if it has not already been initialized
    timer16_Sequence_t timer = SERVO_INDEX_TO_TIMER(servoIndex);
    if(isTimerActive(timer) == false)
      initISR(timer);
    servos[this->servoIndex].Pin.isActive = true;  // this must be set after the check for isTimerActive
  }
  return this->servoIndex ;
}


L' azione che deve fare uno sviluppatore prima di ogni write è l'attacch. Nel caso in cui la distanza in termini di tempo tra l'attacch e la prima write non sia trascurabile, il Servo viene portato alla posizione corrispondente a 1500us su 20000us (e questo potrebbe essere un comportamento indesiderato).

Possono essere osservazioni corrette?

Go Up