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?
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 ...
guglielmo
quote
serial.flush(); // svuoto il buffer di ricezione serialenon è 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
Post a Comment