grazie!!!
per ora sono arrivato a questo ancora non funziona come dovrebbe ma è gia un grande passo avanti:
TX: (simulatore)
#include <M5Stack.h>
HardwareSerial Serial2_(2);
//#include <M5StickC.h>
//#include <HardwareSerial.h>
void setup() {
M5.begin();
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, 16, 17);
// Serial2.begin(baud, config, rxPin, txPin, bool invert)
// Serial2.begin(9600, SERIAL_8N1, 21, 22); // RX TX STACK GROVE
// Serial2.begin(115200); // RX TX STACK IO
// Serial2.begin(9600, SERIAL_8N1, 32, 33); //STICKC GROVE
// Serial2.begin(9600, SERIAL_8N1, 36, 0); //STICKC I/O
// Serial2.begin(9600, SERIAL_8N1, 25, 13); //STICK GROVE
}
void loop() {
Serial2.write(0xb3); // |
Serial2.write(0x00); // 0
Serial2.write(0x20); // spazio
Serial2.write(0x3c); // 60 cm
Serial2.write(0xb3); // |
Serial2.write(0x01); // 1
Serial2.write(0x20); // spazio
Serial2.write(0x6E); // 110 misura
Serial2.write(0xb3); // |
Serial2.write(0x00); // 0
Serial2.write(0x20); // spazio
Serial2.write(0x46); // 70 ft
Serial2.write(0xb3); // |
Serial2.write(0x01); // 1
Serial2.write(0x20); // spazio
Serial2.write(0x6E); // 110 misura
delay(500);
// per vedere se il codice gira
Serial.println("|0 60");
Serial.println("|1 110");
Serial.println();
Serial.println("|0 70");
Serial.println("|1 110");
Serial.println();
}
RX:
// Example 6 - Receiving binary data
#include <M5Stack.h>
const byte numBytes = 32;
byte receivedBytes[numBytes];
byte numReceived = 0;
boolean newData = false;
void setup() {
M5.begin();
Serial.begin(115200);
Serial.println("<Arduino is ready>");
// Serial2.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert)
Serial2.begin(9600, SERIAL_8N1, 25, 13);
pinMode(5, OUTPUT);
digitalWrite(5, 1);
}
void loop() {
recvBytesWithStartEndMarkers();
showNewData();
}
void recvBytesWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
byte startMarker = 0xb3;
byte endMarker = 0xb3;
byte rb;
while (Serial2.available() > 0 && newData == false) {
rb = Serial2.read();
if (recvInProgress == true) {
if (rb != endMarker) {
receivedBytes[ndx] = rb;
ndx++;
if (ndx >= numBytes) {
ndx = numBytes - 1;
}
}
else {
receivedBytes[ndx] = '\0'; // terminate the string
recvInProgress = false;
numReceived = ndx; // save the number for use when printing
ndx = 0;
newData = true;
}
}
else if (rb == startMarker) {
recvInProgress = true;
}
}
}
void showNewData() {
if (newData == true) {
Serial.print("This just in (HEX values)... ");
for (byte n = 0; n < numReceived; n++) {
Serial.print(receivedBytes[n], HEX);
Serial.print(' ');
}
Serial.println();
newData = false;
}
}
output monitor seriale RX:
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
This just in (HEX values)... 1 20 46
logicamente avendo start e stop byte non mi prende mai la prima parte....... mummble mummmmble