Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 20, 4);
- #include <SoftwareSerial.h>
- #include "supporto.h"
- #define SSerialRX 9
- #define SSerialTX 8
- #define SSerialTxControl 7
- #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_pack1 tx;
- t_pack rx;
- void setup() {
- lcd.begin();
- RS485Serial.begin(9600);
- lcd.backlight();
- lcd.setCursor(0, 0);
- lcd.print("Menu demo");
- Serial.begin(9600);
- Serial.println("\nTEST invio struct");
- delay(500); //wait 2 sec
- pinMode(SSerialTxControl, OUTPUT);
- digitalWrite(SSerialTxControl, RS485Receive); // Init Transceiver
- lcd.clear(); //clear the whole LCD
- }
- void loop() {
- if (RS485Serial.available()>0) {
- // sono in attesa di comandi dal master
- 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.dati.destinatario == 1) {
- // faccio quello che devo fare
- }
- lcd.setCursor(0, 0);
- lcd.print(rx.dati.valore);
- }
- }
- // altre operazioni del loop()
- if (millis() - previousMillis >= interval) {
- previousMillis += interval;
- cont ++;
- tx.dati1.idmsg1 = millis();
- tx.dati1.destinatario1 = 1;
- tx.dati1.comando1 = 99;
- tx.dati1.valore1 =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