Ciao a tutti
Sono alle prese con un rover che vorrei comandare da pc tramite python
pero' sto sbagliando qualcosa perchè se mando il valore 255 con il pc il led sul pin 13 non ne vuole sapere di accendersi
/** MultipleServos.pde (bare bones) **/
#define LED 13
void setup() {
// open serial connection
Serial.begin(9600);
pinMode(LED ,OUTPUT);
}
void loop() {
//read the first byte
lettura = Serial.read();
// if it's really the startbyte (255)
if (lettura == 255) {
analogWrite(LED,HIGH);
}
}
Il prog viene compilato regolarmente e qualdo invio da pc si vede i led de tx che lavora...
#!/usr/bin/env python
import serial
usbport = '/dev/ttyUSB0'
ser = serial.Serial(usbport, 9600, timeout=1)
ser.write(255)
questo è l'acceno di script python
Non sono molto ferrato in programmazione quindi non infierite
Facendo le varie prove (e mettendo insieme parti di codice prese qua e la ) ho fatto confusione tra digital e analog :originariamente controllavo il pin 9 con il pwm per poter gestire una rampa di accelerazione per i motori,ma visto che non ci riuscivo ho provato con un digital senza cambiare la chiamata...
Ora provo a seguire i vostri consigli e vi faccio sapere
Grazie a tutti
Allora...spulciando in giro su una montagna di forum sono riuscito nel mio primo intento.
I comandi python dal pc verso arduino andavano bene cosi,mentre lo sketch l'ho modificato cosi e va
int LED = 13; // pin the LED is connected to
int stato; // blink rate stored in this variable
void setup()
{
Serial.begin(9600); // Initialize serial port to send and receive at 9600 baud
pinMode(LED, OUTPUT); // set this pin as output
}
void loop()
{
if ( Serial.available()) // Check to see if at least one character is available
{
char lettura = Serial.read();
if(lettura == '0')
digitalWrite(LED,HIGH);
if(lettura=='1')
digitalWrite(LED,LOW);
}
}
non ho pienamente chiaro a cosa serve char,se qualcuno me lo puo' spiegare imparo una cosa nuova
Ora il prossimo passo è quello di gestire il pwm.
In particolare dovrei tenere il segnale al 50% (128) con un comando e con altri due comandi farlo andare a 0 oppure a 255...se qualcuno mi puo' dare degli spunti sono ben accetti
Ciao a tutti
basta aggiungere questo dove "Pwm" sta per il pin che vuoi usare
la variabile char indica un carattere quindi quei numeri 0,1,2,3,4 sono considerati come dei caratteri dal programma e non puoi usare il loro valore
cio' vuol dire che char è applicabile solo per singoli caratteri,cioè se invece di 0 e 1 avessi usato ,per esempio 'ciao' mi avrebbe restituito errore?giusto?
Grazie per l'esempio,stasera provo
Ciao
int PWM = 9; // output in pwm
int valore=0;
void setup()
{
Serial.begin(9600); // inizializzazione seriale
pinMode(PWM, OUTPUT); // inposta pwm come out
}
void loop(){
if ( Serial.available()) //controllo seriale disponibie
{
char lettura = Serial.read();
if(lettura == '1')
{
for(valore=128;valore<=255;valore+=5)
{
analogWrite(PWM , valore);
delay(10);
}
}
if (lettura=='0')
analogWrite(PWM ,128);
delay(10);
if(lettura=='2')
{
for(valore=128;valore>=0;valore-=5)
{
analogWrite(PWM ,valore);
delay(10);
}
}
}
}
ho fatto in modo di avere due rampe per i due fronti del pwm :dato che dovra' pilotare due ponti con 4 motori piuttosto potenti ,evitero' picchi di assorbimento e slittamenti delle ruote.
ora devo aggiustare i comandi in modo da ottenere le marce av/ind e la rotazione nei due sensi.
Altra cosa sara' quella di portare la freq sui pin 9 e 10 a 8 khz per regolarizzare la rotazione dei motori.
Mi raccomando: io scrivo tutto per avere consigli eper avere conferma che non dico sciocchezze!
Ciao