Lettura dati del sensore segui linea

Salve a tutti,
Ho comprato il segui linea a 5 canali della Sunfounder, e dello sketch di esempio che hanno nel loro sito/wiki non ho capito nulla, ho gia usato dei segui linea in passato, ma sempre ad 1 solo sensore ed erano molto semplici da utilizzare. Qualcuno mi darebbe una mano a capire come leggere ed interpretare i dati che mi fornisce questo segui linea, utilizzando arduino ?

Sensore: https://www.amazon.it/SunFounder-tracciamento-rilevatore-infrarossi-ATMEGA328P/dp/B07B8KNXR1/ref=sr_1_fkmrnull_2?__mk_it_IT=ÅMÅŽÕÑ&keywords=sunfounder+segui+linea&qid=1558077356&s=gateway&sr=8-2-fkmrnull

Sito del produttore con sketch esempio: http://wiki.sunfounder.cc/index.php?title=Line_Follower_Module(5_channel)

Grazie in anticipo.

E' un array di sensori che ti invia, sul bus I2C (quindi su quello va collegato), il valore di luminosità (quindi un dato analogico) letto da ogni sensore (quindi avrai un numero di 16 bit per ciascun elemento trasmittente/ricevente).

A te poi esaminare i vari valori e capire il chiaro(riflettente)/scuro(non riflettente) che significato abbiano ... ::slight_smile:

Nota che per ciascun sensore, se ho capito bene leggendo il loro codice ...

#include <Wire.h>
int count = 0;
int raw_result[10];
int analog_result[5];
int high_byte;
int low_byte;
void setup() {
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
  Serial.println("Ready");
  delay(1000);
}
void loop() {
  Wire.requestFrom(0x11, 10);    // request 6 bytes from slave device #8
  while (Wire.available()) { // slave may send less than requested
    int c = Wire.read(); // receive a byte as character
    Serial.print(c, HEX);        // print the character
    Serial.print("  ");
    raw_result[count] = c;
    count += 1;
  }
  Serial.println(' ');
  count = 0;
  for (int i = 0; i < 5; i++) {
    high_byte = raw_result[i * 2] << 8;
    low_byte = raw_result[i * 2 + 1];
    analog_result[i] = high_byte + low_byte;
    Serial.print(analog_result[i]);
    Serial.print("  ");
  }
  Serial.println(' ');
  delay(500);
}

... vengono inviati DUE bytes, prima il MSB e poi il LSB che devi mettere assieme in un intero non segnato (16 bit) per avere il valore analogico cercato.

Attenzione che alcuni commenti, in quel codice, mi sembrano errati ...
... esempio dice "// request 6 bytes from slave device #8" quando, in verità fa una "Wire.requestFrom()" per 10 bytes dall'indirizzo 0x11 ::slight_smile:

Guglielmo

gpb01:
E' un array di sensori che ti invia, sul bus I2C (quindi su quello va collegato), il valore di luminosità ...

Quindi per esempio 0 significa bianco e un valore al di sopra vuol dire una livello più o meno intenso di nero ?

Allora, intanto, cortesmente, quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce. Gli utenti da device "mobile" ringrazieranno per la cortesia :wink:

Poi, non so se il bianco è riportato come valore minimo o massimo, questo devi verificarlo tu facendo una semplicissima prova con un cartoncino completamente bianco ed uno completamente nero ... così hai i due estermi e sai tra che valori ti muovi :wink:

Guglielmo

P.S.: Ho troncato io il tuo "quote" :wink:

gpb01:
Poi, non so se il bianco è riportato come valore minimo o massimo, questo devi verificarlo tu facendo una semplicissima prova con un cartoncino completamente bianco ed uno completamente nero ... così hai i due estermi e sai tra che valori ti muovi :wink:

Non puoi capire quanto tu mi abbia aiutato, grazie mille e scusami se prima ho riportato l'intero messaggio

Ancora grazie