Trenino elettrico comandato con Arduino

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 case

void 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

ma scusa il teno è il classico analodico o è un digitale?
perche io ho realizzato a scuola un plastico comandato da un plc e vorrei farne uno comandato da pc con sinottico a monitor .
e poi volevo sapere che funzione dichiari inizialmente

ti ringrazio

la funzione dichiarata inizialmente è per fare funzionare il mototr shield, ovvero un'aggiunta ad arduino, precisamente:
http://www.ladyada.net/make/mshield/

il trenino è analogico, in pratica si alimentano i binari, uno funge da positivo e l'altro negativo, le locomotive sono motorini in corrente continua, la parte elettrica è molto semplice da realizzare ma come vedi ho problemi con il codice

a ok allora avevo capito bene sono locomotive analogiche . perche avevo visto locomotiva 1 e pensavo che avevi la possibilita di comandare sindolamrnete tramite quella funzione + locomotive come succede nel digitale si potrebbe fare una specie di treno digitale con nelle locomotive arduino con il sistema a 3 binari che viene usato per la corrente alternata. con 2 binari si da sempre 9 volt che alimentano l'arduino nella locomotiva e con il 3° binario si mandano tramite seriale i comandi a ogni sngolo treno cosi hai un sistema comandabile singolamente certo da gestire è un bel casino ma magari è possibile io la butto li' magari una mente + allenata della mia su arduino ha delle soluzioni

si ne ho visto uno fatto così, però il mio è originale e già montato per questo volevo comandare una locomotiva per volta, anche perchè il motor shield credo che abbia problemi a comandarne più di una

magari dico una cavolata, ma non vorrei che il problema sia l'uso di #... prova con una lettera normale.
prova anche a stampare il valore numerico di '#' e del carattere ricevuto da seriale, dovrebbe essere in entrmbi i casi 35 (tabella ascii)

ok lesto provo a sostituirlo, anche se nel libro di Massimo Banzi c'è un esempio dove si usa proprio quel carattere