Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "supporto.h"
- #include <SoftwareSerial.h>
- #define SSerialRX 10
- #define SSerialTX 11
- #define SSerialTxControl 3
- #define RS485Transmit HIGH
- #define RS485Receive LOW
- SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX
- byte ricevuto ;
- int cont=0;
- unsigned long previousMillis = 0;
- const long interval = 300;
- typedef struct {
- // id messaggio
- uint32_t idmsg;
- // id del destinatario
- uint32_t destinatario;
- // valori da comunicare al destinatario
- uint32_t comando;
- uint32_t valore;
- } t_dati;
- #define DIMDATI (sizeof(t_dati))
- typedef struct {
- t_dati dati;
- uint32_t crc;
- } t_pack;
- #define DIMPACK (sizeof(t_pack))
- //ricezione
- typedef struct {
- // id messaggio
- uint32_t idmsg1;
- // id del destinatario
- uint32_t destinatario1;
- // valori da comunicare al destinatario
- uint32_t comando1;
- uint32_t valore1;
- } t_dati1;
- #define DIMDATI1 (sizeof(t_dati1))
- typedef struct {
- t_dati1 dati1;
- uint32_t crc;
- } t_pack1;
- #define DIMPACK1 (sizeof(t_pack1))
- t_pack tx;
- t_pack1 rx;
- void setup() {
- RS485Serial.begin(9600);
- Serial.begin(9600);
- Serial.println("\nTEST invio struct");
- pinMode(SSerialTxControl, OUTPUT);
- digitalWrite(SSerialTxControl, RS485Receive); // Init Transceiver
- }
- void loop() {
- if (RS485Serial.available()>0) {
- ricevuto = Ricevi(RS485Serial, (unsigned char *)&rx, DIMPACK);
- if (ricevuto == RX_OK) {
- // i dati sono arrivati
- // verifico il CRC
- // if (rx.crc == calc_crc32((unsigned char *)&rx.dati, DIMDATI)) {
- // i dati sono validi
- // verifico che la richiesta sia per questo slave
- if (rx.dati1.destinatario1 == 1) {
- // faccio quello che devo fare
- }
- Serial.println(rx.dati1.valore1);
- }
- }
- if (millis() - previousMillis >= interval) {
- previousMillis += interval;
- cont ++;
- tx.dati.idmsg = millis();
- tx.dati.destinatario = 1;
- tx.dati.comando = 99;
- tx.dati.valore =cont;
- //tx.crc = calc_crc32((unsigned char *)&tx, DIMDATI);
- digitalWrite(SSerialTxControl, RS485Transmit);
- Trasmetti(RS485Serial, (unsigned char *)&tx, DIMPACK);
- digitalWrite(SSerialTxControl, RS485Receive);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement