Buongiorno a tutti.
Sapreste indicarmi come modificare il codice qui sotto senza l'avalable della seriale ?
Uso softwareserial.
void read_serial() // FUNCTION FOR READING THE SERIAL MESSAGE
{
Serial.println ("SOL FOUND and reading"); // THE SOL (Start of Line) found notice.
Serial.print("READ : !\n"); //Saying that it has read "!" on the serial port
while (inByte!= '*') // As long as EOL not found, keep reading
if (Serial.available() > 0) // if new data is available
{ inByte = Serial.read(); // Read new byte
Serial.print("READ : "); // Display the new byte
string[string_len] = inByte; // Save the data in a character array
Serial.println(string[string_len]); // Print the characters that was recieved
string_len++;}
else if (Serial.available() == 0)
{Serial.println("EOL not available, data string invalid"); // If EOL not in the string
Serial.println("$N"); //FAIL SIGNATURE
break;
}
if (inByte == '*')
{
Serial.println ("eol FOUND, and full string was"); // Echoes Success Message
Serial.println ("$Y"); //SUCCESS SIGNATURE
for (i=0;i<(string_len-1);i++) Serial.print(string[i]);
Serial.print ("\n");
}
}
Grazie, Alberto
usa la newsoftserial e ti togli il pensiero no 
Magari !!
Quella libreria von va con arduino MEGA ]
if (Serial.available() > 0) // if new data is available
{ inByte = Serial.read();
diventa
inByte = Serial.read();
if (inByte != -1) // if new data is available
{
e
if (Serial.available() == 0)
diventa
inByte = Serial.read();
if (inByte == -1)
però considera che se non è vuoto il buffer della seriale rischi di perdi il dato inByte se non cambi il codice
Grazie lesto per la gentilezza 
Sono tre giorni che sto sclerando per creare un protocollino di trasmissione sulla seriale tra due arduino (uno è UNO e l'altro è MEGA)
l'ultimo codice che ho messo insieme con il vostro aiuto è questo:
#include <SoftwareSerial.h>
#define rxPin 6
#define txPin 7
char string[25];
int i=0;
int string_len;
int inByte;
int last_inByte;
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
// define pin modes for tx, rx, led pins:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
Serial.begin(9600);
}
void loop() {
serial_send();
serial_read();
}
void serial_read(){
inByte = mySerial.read();
string_len = 0;
if (inByte == -1) return;
if (inByte == '!')
{
while (inByte != '*'){
inByte = mySerial.read();
if (inByte != -1){
string[string_len] = inByte;
//Serial.print (string[string_len]);
string_len++;
}
if (inByte == 0){
Serial.println ("FAIL");
mySerial.print("!FAIL*");
}
if (inByte == '*'){
Serial.println ("OK");
mySerial.print("!OK*");
for (i=0;i<(string_len-1);i++) Serial.print(string[i]);
Serial.print ("\n");
}
}
}
}
void serial_send(){
mySerial.print("!CIAO*");
delay (10);
}
L'ho messo su entrambi gli arduino ma non funziona 
Se nel loop lascio send e read non succede nulla se tolgo rea sull'altro arduino vedo iquello che mando.
Non riesco a capire come fare per mettere in ascolto e in trasmissione. allo stesso modo.
Praticamente è un casino.
Come si crea un protocollo full duplex?
Sapete se c'è qualcosa di già fatto ?
Grazie, Alberto
mi spiace ma non puoi usando questa libreria:
*Serial.read() will wait until data arrives
ciò vuol dire che la chiamata è loccante, finchè non arriva qualche info resti bloccato
*Only data received while Serial.read() is being called will be received. Data received at other times will be lost, since the chip is not "listening".
ciò vuol dire che se non sei bloccato nella read() tutti i dati che arrivano li perdi... quindi devi fare una read() ogni 3x2, e comunque c'è il riscio perdita di dati
Insomma impossibile un full duplex
inutile dire che usando gli interrupt potresti costruirti una libreria decisamente migliore (infatti la newSoftSerial usa gli interrupt, e per questo probabilmente non è compatibile col mega)
puoi modificare newSoftSerial per il mega, ma ci vuole tempo ed è alquanto inutile.
Secondo me la soluzione veloce e funzionale è usare una delle 4 seriali sul mega e newSoftSerial sull'UNO, così non solo non hai problemi di perdita dei dati, ma avrai anche un protocollo full-duplex
Ok.
Grazie ancora lesto per la tua preziosa disponibilità.
Alberto
Per conoscenza.
La trasmissione seriale, da una delle tre porte, di Arduino MEGA ed Arduino UNO che usa NewSoftSerial:
NON E' COMPATIBILE 
Funziona solamente se invio dal Mega verso la UNO e non viceversa.
mi sembra alquanto strano. la comunicazione seriale è uno standard, certo ci sono varie implementazioni e settaggi, ma quelli che usa arduino e la newsoftserial sono le stesse, altrimenti newsoftserial non riuscirebbe a comunicare col PC(salvo preventivo settaggio del PC)
controlla bene i collegamenti (tx->rx, rx->tx), newsoftserial è sicuramente compatibile con UNO (stesso chip, atmega328), invece il mega usa la seriale "di default" che è identica in tutto e per tutto con quella che usa col PC
Funziona solamente se invio dal Mega verso la UNO e non viceversa
se funziona in una direzione funziona anche nell'altra. Posta il codice con cui hai fatto i test