Go Down

Topic: 4 Arduino Master Slave in RS485 (Read 12 times) previous topic - next topic

leo72

Vediamo come potrebbe essere un codice di ricezione di uno slave (usa serialEvent):

Code: [Select]
void loop() {
... il resto del codice
}

void serialEvent() {
  byte myCommand = 0;
  boolean dataIsValid = false;
  if (Serial.read() == 0xFF) { //byte di start giusto
    if (Serial.read() == 0x00) { //accetto comandi solo dal master
      if (Serial.read() == 0x01) { //è un comando destinato a me?
        myCommand = Serial.read(); //leggo il comando
        byte lenComm = Serial.read(); //quanto è lungo il pacchetto dati?
        byte tempPack[lenComm];
        byte i = 0;
        unsigned long oldMillis = millis();
        while (lenComm && Serial.available && (millis() - oldMillis < 500) {
          tempPack[i] = Serial.read();
          i++;
          lenComm--;
        }
        if (lenComm != 0) { //se lenComm non è a 0, vuol dire che è uscito per time
          break;
        }
        byte tempCksm = Serial.read();
        if (calcolaChecksum() != tempCksm) { //non torna il checksum
          break;
        }
        switch (myCommand) {
          case 0x00:
            .....
            break;
          case 0x01: //accendo un pin
            digitalWrite(tempPack[0], HIGH); //so che in tempPack[0] c'è il numero del pin 
            break;
        }
        dataIsValid = true;
      }
    }
  }
  if (!dataIsValid) { //c'è stato un errore
    //svuoto il buffer
    while (Serial.available()) {
      byte temp = Serial.read();
    }
  }
}


Il codice NON è testato, il codice fa SCHIFO, il codice NON è ottimizzato, il codice è solo un ESEMPIO.
Non prendetelo per oro colato  :smiley-sweat: :smiley-sweat:

vittorio68

Io forse posso contribuire un po' di più perchè prossimamente dovrò sviluppare concretamente i concetti discussi sinora (e forse si era notato dal tono del mio confronto con leo72).

Purtroppo però non posso promettere tempi certi perchè dipenderà dall'evoluzione del progetto (probabilmente prima dovrò sviluppare un po' di hardware...).

leo72


Io forse posso contribuire un po' di più perchè prossimamente dovrò sviluppare concretamente i concetti discussi sinora (e forse si era notato dal tono del mio confronto con leo72).

Quale tono?  XD

vittorio68

:) :) :) volevo solo dire che avevo insistito molto su aspetti che potevano forse sembrare un po' il pelo nell'uovo

leo72


:) :) :) volevo solo dire che avevo insistito molto su aspetti che potevano forse sembrare un po' il pelo nell'uovo

Beh, ognuno tende a tirar l'acqua verso il proprio mulino.
Quindi se hai intravisto degli aspetti che, per tuo interesse, volevi approfondire, è normale che cercavi di analizzarli a fondo più di altri.

Go Up