Sforzo Servo

come mai un servo (in un braccio robotico) appena lo connetto al pc tramite arduino uno non risponde a nessun commando? la cosa strana è che arriva a fine corsa e vuole proseguire facendo uno sforzo assurdo.. io non riesco a comandarlo.. qual è il problema?

Quale schema e quale sketch?

questo il codice:

#include <Servo.h>
int data;
Servo s1;
void setup() {
  Serial.begin(9600);
    s1.attach(9);
    s1.write(0);
}

void loop() {
  data=Serial.read();
  switch (data)
    {

      case '0'://Reset servo position
        s1.write(45);
        Serial.print("0");
        break;

      case '1'://Look right
        s1.write(90);
        Serial.print("1");
        break;

      case '2'://Look left
        s1.write(180);
        Serial.print("2");
        break;
    }
}

ne ho provati diversi con lo stesso codice ma tutti lo stesso risultato…

il collegamento è il piu semplice:

massa–>massa arduino
vcc–> 5v arduino
segnale–> pin 9

Nel loop richiedi la lettura di un byte dalla porta seriale, ma prima devi verificare se nel buffer di ricezione sono presenti uno più byte:

if (Serial.available() > 0) {  // sono presenti uno o più byte nel buffer di ricezione
data = Serial.read();        // leggi il primo byte
}

Supponiamo che tu dal PC abbia spedito il carattere '1'.

Nel buffer di ricezione ti ritrovi il byte 0x31, corrispondente al decimale 49.

ah okok grazie!

ho provato come lei mi ha detto ma sembra impazzito il braccio! gira come vuole quasi all'impazzata... al codice ho aggiunto la parte da lei consigliata...

Ricardati che i caratteri che invii sono in ascii Aggiungici un "-48" al serial.read per fare la conversione

non cambia nulla!

#include <Servo.h>
int data;
Servo s1;
void setup() {
  Serial.begin(9600);
    s1.attach(9);
    s1.write(0);
}

void loop() {
  if(Serial.available()>0)
  {
  data=Serial.read()-48;
  switch (data)
    {

      case '0'://Reset servo position
        s1.write(45);
        Serial.print("0");
        break;

      case '1'://Look right
        s1.write(90);
        Serial.print("1");
        break;

      case '2'://Look left
        s1.write(180);
        Serial.print("2");
        break;
    }
  }
}

niente di niente

Io comunque i case non li faccio con le virgolette, prova a levarle

intendi il singolo apice? quello è corretto! l'ho fatto uguale ad un programma che mi controlla un robot perciò su quello sono sicuro che non ci siano errori

Fai una prova, perchè il codice è piccolino e non penso proprio che ci siano errori, poi controlla che il servo funzioni a dovere, magari è li il problema

niente.. ho provato ma non cambia proprio niente

Fai un serial.print di data e vedi che esce fuori