Problemi con seriale


buonasera tutti,

ho creato una relee shield che connetto al pc tramite un convertitore usb-rs232.
ho messo lo schema come attachment.

utilizzo un atmega 328pu in modalità standalone senza quarzo anche se c'è nello schema.
nessun problema, se gli scrivo tramite la seriale mi risponde e tutto fila liscio...

il problema è che dopo due comandi questo non mi risponde più, si blocca e non fa più nulla!
non riesco capire dove sbaglio

appena arriva un messaggio lui entra nel while della seriale e va tutto bene, esegue il comando, svuota il buffer e poi sembra quasi che non ci rientri più... boh, mi date una mano per piacere?


code: [select]


#define rl1 4
#define rl2 5
#define rl3 6
#define rl4 7
#define rl5 8
#define rl6 9

int inbyte = 0;       
char command[128];
int inputsize=0;
string k;
void setup()
{
serial.begin(9600); // imposto la uart per lavorare 9600
pinmode(rl1, output); // imposto il pin sul quale è collegato il led come uscita
        pinmode(rl2, output); // imposto il pin sul quale è collegato il led come uscita
        pinmode(rl3, output); // imposto il pin sul quale è collegato il led come uscita
        pinmode(rl4, output); // imposto il pin sul quale è collegato il led come uscita
        pinmode(rl5, output); // imposto il pin sul quale è collegato il led come uscita
        pinmode(rl6, output); // imposto il pin sul quale è collegato il led come uscita

        serial.println("ok-com");
       
       
        test();
serial.flush(); // svuoto il buffer di ricezione seriale
}


void loop()
{
  inputsize=0;
  while(serial.available() > 0)
  {             
                inputsize = serial.available();             
                (int = 0; < inputsize; i++)
                {
                  command[i] = serial.read();
                }
                 k = command;
               
                if (k== "test")
{
                serial.println("inizio test");
                test();
                serial.println("fine test");
}
                 // relee 1
                 else if (k=="rl1") //accensione
{
                if (digitalread(rl1) == high) // il relee era acceso?
{
        serial.println("già acceso");
}
else // il relee era spento
{
digitalwrite(rl1,high); // lo accendo
serial.println("relee acceso");
}
}
                else if (k=="-rl1") //spengimento
{
if (digitalread(rl1) == low) // il led era acceso?
{
serial.println("già spento");
}
else // il led era spento
{
digitalwrite(rl1,low); // lo accendo
serial.println("relee spento");
}
               }
               // fine relee 1
               // relee 2
                 else if (k=="rl2") //accensione
{
                if (digitalread(rl2) == high) // il relee era acceso?
{
        serial.println("già acceso");
}
else // il relee era spento
{
digitalwrite(rl2,high); // lo accendo
serial.println("relee acceso");
}
}
                else if (k=="-rl2") //spengimento
{
if (digitalread(rl2) == low) // il led era acceso?
{
serial.println("già spento");
}
else // il led era spento
{
digitalwrite(rl2,low); // lo accendo
serial.println("relee spento");
}
               }
               // fine relee 2
               // relee 3
                 else if (k=="rl3") //accensione
{
                if (digitalread(rl3) == high) // il relee era acceso?
{
        serial.println("già acceso");
}
else // il relee era spento
{
digitalwrite(rl3,high); // lo accendo
serial.println("relee acceso");
}
}
                else if (k=="-rl3") //spengimento
{
if (digitalread(rl3) == low) // il led era acceso?
{
serial.println("già spento");
}
else // il led era spento
{
digitalwrite(rl3,low); // lo accendo
serial.println("relee spento");
}
               }
               // fine relee 3
               // relee 4
                 else if (k=="rl4") //accensione
{
                if (digitalread(rl4) == high) // il relee era acceso?
{
        serial.println("già acceso");
}
else // il relee era spento
{
digitalwrite(rl4,high); // lo accendo
serial.println("relee acceso");
}
}
                else if (k=="-rl4") //spengimento
{
if (digitalread(rl4) == low) // il led era acceso?
{
serial.println("già spento");
}
else // il led era spento
{
digitalwrite(rl4,low); // lo accendo
serial.println("relee spento");
}
               }
               // fine relee 4
               // relee 5
                 else if (k=="rl5") //accensione
{
                if (digitalread(rl5) == high) // il relee era acceso?
{
        serial.println("già acceso");
}
else // il relee era spento
{
digitalwrite(rl5,high); // lo accendo
serial.println("relee acceso");
}
}
                else if (k=="-rl5") //spengimento
{
if (digitalread(rl5) == low) // il led era acceso?
{
serial.println("già spento");
}
else // il led era spento
{
digitalwrite(rl5,low); // lo accendo
serial.println("relee spento");
}
               }
               // fine relee 5
               // relee 6
                 else if (k=="rl6") //accensione
{
                if (digitalread(rl6) == high) // il relee era acceso?
{
        serial.println("già acceso");
}
else // il relee era spento
{
digitalwrite(rl6,high); // lo accendo
serial.println("relee acceso");
}
}
                else if (k=="-rl6") //spengimento
{
if (digitalread(rl6) == low) // il led era acceso?
{
serial.println("già spento");
}
else // il led era spento
{
digitalwrite(rl6,low); // lo accendo
serial.println("relee spento");
}
               }
//               // fine relee 6
                       
    serial.flush(); // svuoto il buffer di ricezione seriale
    }
}
//funzione per testare relee
    void test(){
            digitalwrite(rl1,high);
            delay(500);                     
            digitalwrite(rl1,low);
            delay(500);
            digitalwrite(rl2,high);
            delay(500);
            digitalwrite(rl2,low);
            delay(500);
            digitalwrite(rl3,high);
            delay(500);
            digitalwrite(rl3,low);
            delay(500);
            digitalwrite(rl4,high);
            delay(500);
            digitalwrite(rl4,low);
            delay(500);
            digitalwrite(rl6,high);
            delay(500);
            digitalwrite(rl6,low);
            delay(500);
           
    } 

non entro nel problema, ma così al volo vedo una riga con un commento sbagliato e non vorrei che tu ti stia confondendo ...

quote
serial.flush(); // svuoto il buffer di ricezione seriale
non è vero ! se vai leggere il reference per la flush() riporta :

quote
waits transmission of outgoing serial data complete.
quello che pensavi tu era valido con l'ide di versione inferiore alla 1.0 ... ma ora ha tutt'altro significato.

guglielmo


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Problemi con seriale


arduino

Comments

Popular posts from this blog

arduino bug sur secteur, batterie, mais pas en usb?

Static ip - Raspberry Pi Forums

Printing to PDF adds printer margins