ok, e se per caso avessi già messo come buffer size 256 e cmq non bastasse? qual è il massimo che posso impostare?
cmq, questo è il mio codice, le funzioni che non vedete definite non hanno grande importanza per questo problema
#include <AltSoftSerial.h>
// AltSoftSerial always uses these pins:
//
// Board Transmit Receive PWM Unusable
// ----- -------- ------- ------------
// Arduino Uno 9 8 10
// Arduino Mega 46 48 44, 45
AltSoftSerial monitor;
int pnt=0;
int lostDataCounter;
int cs;//checksum value
//char array_response[8220];
float settings[7];
String command;
String response;
boolean flag;
boolean isTypeOneCommand, isTypeTwoCommand;
void setup(){
Serial.begin(57600);
monitor.begin(57600);
delay(20);
setDefaultValues();
pinMode(13,OUTPUT);
pinMode(2,OUTPUT);
pinMode(11,OUTPUT);
}
void loop(){
flag = false;
isTypeOneCommand = false;
isTypeTwoCommand = false;
union{
char byteData[4];
float floatDatum;
}
datum;
digitalWrite(13,LOW);
digitalWrite(11,LOW);
digitalWrite(2,LOW);
command = "";
response = "";
cs = 0;
lostDataCounter = 0;
/*
for (int i=0;i<220;i++){ //initialezes each element of arrayresponse to null character
array_response[i] = 0x00;
}
*/
// k=0;//counter for array_response
while(monitor.available()){
command = monitor.readStringUntil('\r');
command.trim();
if (command.startsWith(":SPNT")){
pnt = getPoints(command);
}
if(command.charAt(5) == 32){
isTypeOneCommand = true;
}
else if(command.charAt(1) == 'D' || command.charAt(1) == 'G'){
isTypeTwoCommand = true;
}
cs = checkSum(command);
monitor.print(command); // type1commands are f
ollowed by hex(cs)
monitor.print(cs,HEX);
monitor.print("\r");
Serial.print(command);
Serial.print(cs,HEX);
Serial.print("\r");
flag = true;
}//---end first while loop
------------------------------------------------------------------
------unica parte che secondo me crea problemi---------
-----------------------------------------------------------------
while(Serial.available() || flag){
digitalWrite(13,HIGH);
char inChar= Serial.read();
delayMicroseconds(300);
if(inChar != -1 ){ //tdr.read() returns -1 when it reads nothing
response += inChar;
delayMicroseconds(100);
flag=false;
}
if(inChar == 13) {
flag = false;
digitalWrite(13,LOW);
}
}
--------------------------------------------------------------------
--------------------------------------------------------------------
-------------------------------------------------------------------
if(response!="")
monitor.println(response);
if(isTypeTwoCommand && command == ":DUMP"){
digitalWrite(2,HIGH);
int j=0;
for (int i = 6; i < 33; i+=4){
datum.byteData[3] = response.charAt(i);
datum.byteData[2]= response.charAt(i+1);
datum.byteData[1]= response.charAt(i+2);
datum.byteData[0]= response.charAt(i+3);
delay(5);
settings[j] = datum.floatDatum;
j++;
}
for (int i=0;i<7;i++){
monitor.println(settings[i],3);
}
digitalWrite(2,LOW);
}
if(isTypeTwoCommand && command == ":GWAV"){
digitalWrite(11,HIGH);
float Data[pnt];
int j=0;
for (int i = 6; i< response.length() - 6 ;i+=4){
delayMicroseconds(100);
datum.byteData[3] = response.charAt(i);
delayMicroseconds(100);
datum.byteData[2]= response.charAt(i+1);
delayMicroseconds(100);
datum.byteData[1]= response.charAt(i+2);
delayMicroseconds(100);
datum.byteData[0]= response.charAt(i+3);
delay(5);
Data[j] = datum.floatDatum;
if( (Data[j] > 1) || (Data[j] < -1) ){
digitalWrite(2,HIGH);
lostDataCounter+=1;
digitalWrite(2,LOW);
}
j++;
}
digitalWrite(11,LOW);
for (int i=0; i<pnt;i++){
delay(50);
monitor.println(Data[i]);
}
monitor.print(lostDataCounter);
monitor.println(" data have been lost during the communication");
}
}//----end void loop()
la seriale hardware è collegata allo strumento mentre quella software è collegata al monitor del pc per vedere i dati