Trasferimento di valori via seriale tra Arduino UNO e Arduino MEGA

Infatti al MEGA passo l'array che contiene i valori int e non byte... :D :D

P.S. I valori che passo al CRC sono byte, ma quelli che invio al MEGA sono int... Dovrebbe andare bene vero? :cold_sweat:

NO ... dato che tronchi a 8 bit e quindi calcoli un CRC inutile su qualche cosa che non è quello che trasmetti ...

Ma guarda che non ti serve fare questo gioco, come t'ho detto la CRC se ne frega di cosa c'è nei bytes, per cui, puoi benissimo passargli l'array di int ovviamente dando poi [u]la giusta lunghezza[/u] e ... ... visto che ogni int è 2 byte, basta che moltiplichi il numero degli elementi per 2 :D :D :D

Guglielmo

Ooooook :slight_smile:

Così funziona:

#include <SoftwareSerial.h>

SoftwareSerial Seriale(6, 7); //RX,TX

byte N = 1; //NUMERO DI POTENZIOMETRI

byte CRC;

byte CRC8(const int *data, byte len) {
  byte crc = 0x00;
  while (len--) {
    byte extract = *data++;
    for (byte tempI = 8; tempI; tempI--) {
      byte sum = (crc ^ extract) & 0x01;
      crc >>= 1;
      if (sum) {
        crc ^= 0x8C;
      }
      extract >>= 1;
    }
  }
  return crc;
}

void setup()
{
  Serial.begin(9600);
  Seriale.begin(9600);
}


void loop()
{

  int potval[N];

  for (int i = 0; i < N; i++)
  {
    potval[i] = analogRead(i);
    potval[i] = analogRead(i);
  }

  CRC = CRC8(potval, N*2);

  //Per debug
  Serial.write(0x02);
  for (int i = 0; i < N; i++)
  {
    Serial.print(potval[i]);
    if (i < N - 1)
      Serial.print(",");
  }
  Serial.write(0x03);
  Serial.print(CRC);
  Serial.println();


  //Trasmissione dati vera
  Seriale.write(0x02);
  for (int i = 0; i < N; i++)
  {
    Seriale.print(potval[i]);
    if (i < N - 1)
      Seriale.print(",");
  }
  Seriale.write(0x03);
  Seriale.print(CRC);
  Seriale.println();

}

… ma a cosa serve la doppia assegnazione sullo stesso elemento dell’array ?

for (int i = 0; i < N; i++)
 {
   potval[i] = analogRead(i);
   potval[i] = analogRead(i);
 }

Guglielmo

Mi sono dimenticato di toglierla… Errore mio… :-\ :relaxed:

#include <SoftwareSerial.h>

SoftwareSerial Seriale(6, 7); //RX,TX

byte N = 1; //NUMERO DI POTENZIOMETRI

byte CRC;

byte CRC8(const int *data, byte len) {
  byte crc = 0x00;
  while (len--) {
    byte extract = *data++;
    for (byte tempI = 8; tempI; tempI--) {
      byte sum = (crc ^ extract) & 0x01;
      crc >>= 1;
      if (sum) {
        crc ^= 0x8C;
      }
      extract >>= 1;
    }
  }
  return crc;
}

void setup()
{
  Serial.begin(9600);
  Seriale.begin(9600);
}


void loop()
{

  int potval[N];

  for (int i = 0; i < N; i++)
  {
    potval[i] = analogRead(i);
  }

  CRC = CRC8(potval, N*2);

  //Per debug
  Serial.write(0x02);
  for (int i = 0; i < N; i++)
  {
    Serial.print(potval[i]);
    if (i < N - 1)
      Serial.print(",");
  }
  Serial.write(0x03);
  Serial.print(CRC);
  Serial.println();


  //Trasmissione dati vera
  Seriale.write(0x02);
  for (int i = 0; i < N; i++)
  {
    Seriale.print(potval[i]);
    if (i < N - 1)
      Seriale.print(",");
  }
  Seriale.write(0x03);
  Seriale.print(CRC);
  Seriale.println();

}

Ah ... ok, capita. Funziona tutto ? :)

Guglielmo

Si sembra che funzioni tutto... Adesso tocca al programma che riceve...