Ciao, ho montato un vecchio trenino elettrico e mi è venuto in mente di comandarlo con Arduino al posto che con il vecchio trasformatore a rotella.
La parte elettrica è ok, ora però devo sistemare il codice, per adesso ho scritto questo (grazie anche all'aiuto che mi ha dato uwefed in un altro thread)
#include <AFMotor.h>
AF_DCMotor locomotiva(1, MOTOR12_64KHZ); //Definisco il motore del trenino
char Data[4]; //Stringa usata per immagazzinare i 3 numeri del pwm
int pwm = 0; //Valore di 3 cifre, per impostare la velocità
int i =0;
char a = 'z'; //Questa stringa dovrà immagazzinare il simbolo # usato per capire se voglio selezionare una velocità o l'opzione di un menù
char b; //Conterrà una lettera da usare per il select casevoid setup()
{Serial.begin(9600); //Impostazione del baud-rate
}void loop()
{
if (Serial.available()) {
a=Serial.read(); //legge a
}if (a == '#') //se a è un #
{
Serial.print("ho trovato #");
b=Serial.read(); //leggi b
Serial.print(b); //per adesso lo stampo solo poi quando funziona lo inserirò in un menù
}
else //altrimenti se a non è un #
{
do { // aspetta di leggere 3 Byte e li mettere nella stringa Data.
if (Serial.available()) {
Data_ = Serial.read();_
- i++;*
- }*
- } while (i<3);*
_ Data* = 0; // aggiunge un zero finale per chiudere la stringa*_
* i=0;** pwm = atof(Data); // trasforma la stringa in un numero*
* locomotiva.setSpeed(pwm); //imposto la velocità*
* locomotiva.run(FORWARD); // avanti*
_ Serial.println(pwm); //stampo pwm_
}
}
[/quote]
in pratica non mi funziona nella parte dove gli invio dalla porta seriale il simbolo "#", che dovrebbe indicare che il valore in entrata non è una velocità ma una lettera, che servirà poi per far funzionare un select case
quando nel serial monitor inserisco "#" sembra che non si entri nell'if perchè non viene restituita la scritta "ho trovato #", non viene restituito proprio nulla, invece se inserisco una velocità il trenino mi parte tranquillamente