Complimenti Cyberhs...accidenti che sketch complicato....
Vediamo di capirci un pò e intanto grazie tante perchè così ho qualcosa su cui lavorare...
#include <SoftwareSerial.h> // libreria creazione porta seriale virtuale
byte Decimali = 1; // numero decimali
unsigned long Timer = millis(); // timer partito
const unsigned long TimeOut = 240000; // tempo di invio dati in ms (4 min = 4*60*1000)
void setup() {
Serial.begin(9600); // inizializza porta seriale
SerialAux.begin(9600); // inizializza porta seriale ausiliaria
}
void loop() {
if (millis() - Timer > TimeOut) {
SerialAux.println(Temp1, Decimali);
SerialAux.println(Temp2, Decimali);
SerialAux.println(Temp3, Decimali);
SerialAux.println(Temp4, Decimali);
SerialAux.println(Temp5, Decimali);
Timer = millis(); // timer resettato
}
}
-Sugli sketch che mi ha postato Cyberhs non vedo la funzione che indica e programma i Pin da usare per la SoftwareSerial e li aggiungo;
-Per "Decimali" intendo che voglia intendere di mettere un numero tipo 1 o 2 che indica il numero di cifre dopo la virgola;
In questo sketch diciamo che ho quasi capito tutto e ti ringrazio ancora mille volte Cyberhs...
#include <SoftwareSerial.h> // libreria creazione porta seriale virtuale
int I = 0;
int J = 0;
String Z = "";
String SerRx = ""; // azzera buffer ricezione
const unsigned long TimeOut = 1000; // timeout 1 s
unsigned long Timer = millis(); // timer partito
void setup() {
Serial.begin(9600); // inizializza porta seriale
SerialAux.begin(9600); // inizializza porta seriale ausiliaria
}
void loop() {
SerRx = ""; // azzera buffer ricezione
Timer = millis(); // timer partito
while (millis() - Timer < TimeOut) { // attesa timeout
while (SerialAux.available() > 0) { // ricezione da modulo
SerTx += char(SerialAux.read()); // aggiungi carattere al buffer
Timer = millis(); // reset timer
}
}
if (SerRx.length() > 0) { // ci sono dei dati nel buffer (Temp1<CR><LF>Temp2<CR><LF>...Temp5<CR><LF>
J = 0;
I = SerRx.indexOf(13, J); // cerca CR (carriage return) a partire dal carattere J
if (I > 0) {
Z = SerRx.substring(J, I) // sotto stringa dal carattere J al carattere I-1
Temp1 = Z.toInt();
J = I + 2; // nuova posizione di ricerca
}
I = SerRx.indexOf(13, J); // cerca CR (carriage return) a partire dal carattere J
if (I > 0) {
Z = SerRx.substring(J, I) // sotto stringa dal carattere J al carattere I-1
Temp2 = Z.toInt();
J = I + 2; // nuova posizione di ricerca
}
I = SerRx.indexOf(13, J); // cerca CR (carriage return) a partire dal carattere J
if (I > 0) {
Z = SerRx.substring(J, I) // sotto stringa dal carattere J al carattere I-1
Temp3 = Z.toInt();
J = I + 2; // nuova posizione di ricerca
}
I = SerRx.indexOf(13, J); // cerca CR (carriage return) a partire dal carattere J
if (I > 0) {
Z = SerRx.substring(J, I) // sotto stringa dal carattere J al carattere I-1
Temp4 = Z.toInt();
J = I + 2; // nuova posizione di ricerca
}
I = SerRx.indexOf(13, J); // cerca CR (carriage return) a partire dal carattere J
if (I > 0) {
Z = SerRx.substring(J, I) // sotto stringa dal carattere J al carattere I-1
Temp5 = Z.toInt();
}
}
}
Ecco qui nel secondo Sketch ovvero l'Arduino che riceve i dati a dire il vero non mi è chiaro quasi niente...
-la funzione toInt è abbastanza complessa e ora ci studio un pò sopra per riuscire a capire le dinamiche di questa funzione...
-Poi non ho capito bene cosa sono i caratteri CR (carriage return) e LF...studierò anche su questo e intanto provo i due sketch...
Grazie tantissimo...