buonasera a tutti:
ricevo serialmente, da un apparecchio che trasmette in RS232, con questo codice ed un adattatore RS232/TTL
#include <M5Stack.h>
void setup() {
M5.begin();
Serial.begin(115200);
// Serial2.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert)
Serial2.begin(9600, SERIAL_8N1, 21, 22);
pinMode(5, OUTPUT);
digitalWrite(5, 1);
}
void loop() {
if(Serial.available()) {
int ch = Serial.read();
Serial2.write(ch);
}
if(Serial2.available()) {
int ch = Serial2.read();
Serial.write(ch);
}
}
e sul serial monitor ho un output del genere:
|0 60
|1 92
|0 70
|1 209
|0 50
|1H0RN
|0 50
|1----
a questo punto estrapolo le informazioni che mi interessano e le elaboro... fin qui tutto bene
il problema sussiste quando cerco di ricostruire la stringa per mandarla al TTL/RS232 e quindi al macchinario che si aspetta una stringa come quella che ho ricevuto io...
con i Serial.write ed i valori esadecimali funziona (il macchinario riceve il dato; in questo caso 600 )
void sparaft() { //manda sulle due seriali 6 ft
Serial.write(124); // |
Serial.write(48); // 0
Serial.write(32); // spazio
Serial.write(32); // spazio
Serial.write(55); // "7"0 ft
Serial.write(48); // 7"0" ft
Serial.write(13); // CR '\r'
Serial.write(10); // LF '\n'
Serial.write(124); // |
Serial.write(49); // 1
Serial.write(48); // 0
Serial.write(54); // 6
Serial.write(48); // 0
Serial.write(48); // 0
Serial.write(13); // CR '\r'
Serial.write(10); // LF '\n'
//|0 70
Serial2.write(124); // |
Serial2.write(48); // 0
Serial2.write(32); // spazio
Serial2.write(32); // spazio
Serial2.write(55); // "7"0 ft
Serial2.write(48); // 7"0" ft
Serial2.write(13); // CR '\r'
Serial2.write(10); // LF '\n'
//|0 600
Serial2.write(124); // |
Serial2.write(49); // 1
Serial2.write(48); // zero o spazio, 48 o 32 ???
Serial2.write(54); // 6
Serial2.write(48); // 0
Serial2.write(48); // 0
Serial2.write(13); // CR '\r'
Serial2.write(10); // LF '\n'
}
il problema sussiste quando cerco di sostituire al valore esadecimale ,argomento dei serial write, una variabile...
tipo:
byte decineft = 0;
byte unitaft = 6;
byte dodicineinc = 0;
byte unitainc = 0;
Serial2.write(124); // |
Serial2.write(48); // 0
Serial2.write(32); // spazio
Serial2.write(32); // spazio
Serial2.write(55); // "7"0 ft
Serial2.write(48); // 7"0" ft
Serial2.write(13); // CR '\r'
Serial2.write(10); // LF '\n'
Serial2.write(124); // |
Serial2.write(49); // 1
Serial2.write(decineft); //
Serial2.write(unitaft); //
Serial2.write(dodicineinc); //
Serial2.write(unitainc); //
Serial2.write(13); // CR '\r'
Serial2.write(10); // LF '\n'
il macchinario non riceve nulla o comunque qualche cosa che non capisce.....
cosa sto sbagliando??
grazie