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