Potenziometro + Servo no loop print serial

Salve, come mai il mio servo non arriva ansi non parte da 0 e non arriva ad 180?.
Vorrei che non ripetesse i valori all'infinito nella seriale, ora questo me lo fa.. ma ho notato che non e non parte da 0 ad arrivare a 180, mi si ferma prima e parte dopo il 4.
Ecco il codice:

#include <Servo.h>

int ServoPin = 11;
int POTPin= 14;
int POT;
Servo servo;
int oldPOT;
void setup()
{
    Serial.begin(115200);
    servo.attach(ServoPin);
}
void loop()
{
    POT = analogRead(POTPin);
    POT = map(POT, 0, 1023, 0, 180);
    if(abs(POT - oldPOT)>2)
    {
        servo.write(POT);
        Serial.println(POT);
        oldPOT = POT;
    }
}

Avete idea come mai ?
Grazie mille e buona serata.

prova così

void loop()
{
    POT = analogRead(POTPin);
    value = map(POT, 0, 1023, 0, 180);
    if(abs(value - oldPOT)>2)
    {
        servo.write(value);
        Serial.println(value);
        oldPOT = value;
    }
}

definendo value come un int

È normale, dipende dal giogo meccanico di accoppiamento del potenziometro.

Se non ricordo male, la libreria Servo consente di tarare il segnale di controllo. In questo modo potresti recuperare un po' di errore.

ok, scusate dell'assenza.. ma nel frattempo ho riscritto il codice. Ma perché mangia sempre di 5 gradi e 2 gradi all'inizio. Ho messo la funzione abs, per far che non ripete inutilmente i valori stampati alla seriale.
Questo è il codice scritto adesso:

#include <Arduino.h>
#include <Servo.h>

int SERVOpin = 11;
int POTENZIOMETROpin = A0;
int valPotenziometro;
int mapPotenziometro;
Servo servo;
int tempo = 20;
unsigned long tempo_millis;
int vecchia;
void setup() {
  Serial.begin(115200);
  servo.attach(SERVOpin);
  tempo_millis = millis();
}

void loop() {
  valPotenziometro = analogRead(POTENZIOMETROpin);
  mapPotenziometro = map(valPotenziometro, 0, 1023, 0, 180);
  if (abs(mapPotenziometro - vecchia) > 2) {
    if ((millis() - tempo_millis) > tempo) {
      servo.write(mapPotenziometro);
      Serial.println(mapPotenziometro);
      tempo_millis = millis();
    }
    vecchia = mapPotenziometro;
  }
}

Avete idea ? grazie mille e scusate il ritardo.

Sei certo che il range del potenziometro sia 0/1023? Io ne dubito fortemente...

Ciao, Ale.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.