Utilizzo del sensore di colore GY_31

Con la libreria fornita all'interno di qusta cartella l'inizializzazione e la lettura dei vari parametri viene automatizzata. L'unico compito che spetta all'utilizzatore è di mappare i dati con una scala che abbia senso per come sta usando il sensore. Ad esempio se si usa il sensore al buio, oppure fuori al sole, oppure illuminando con i led sopra la scheda i dati di calibrazione cambiano enormemente.

Per questo motivo consiglio di decidere una modalità di lettura, impostare il programma con quella modalità e scrivere i dati su un plotter seriale. Ora osserviamo come si comporta il sensore quando mettiamo davanti al sensore dei cartoncini di controllo (rosso, blu e verde). E mappiamo con il comando map(value, sx, dx, mappedsx, mappedDx).

Ad esempio se vediamo che quando inseriamo un cartoncino nero davanti al sensore il valore sale a 90, e quando invece mettiamo un cartoncino rosso scende a 15, possiamo usare il comando:

map(value, 90, 15, 0, 100) per fare in modo che quando vede nero ci dia un valore prossimo allo 0, e quando vede del rosso ci dia valori vicini al 100.

#include"GY_31.h"
GY_31 sensore;
void setup() {
  /*nella libreria ci sono 2 diversi setup:
    setup(s0, s1, s2, s3, out) 
    setup(s0, s1, s2, s3, out, led) //inizializza anche il pin Led

    e leggere i valori con:
    read(mod)dove mod può essere RED GREEN BLUE CLEAR
    attenzione, il sensore non è calibrato, nel 90% dei casi bisogna calibrare il sensore e rimapparlo con dei valori sensati. sotto vedete dei parametri che dovrebbero andare bene, ma potrebbero non essere perfetti

    set_led(mod) come da nome, si decide se accendere o meno i led
    */
    
  //S0, S1, S2, S3, out
  sensore.setup(8, 9, 10, 11, 12, 13);
  sensore.set_led(HIGH);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("Rosso: ");
  Serial.println(sensore.read(RED)); // dato grezzo

  Serial.print("Rosso calibrato: ");
  Serial.println(map(sensore.read(RED), 60, 15, 0, 100)); // dato calibrato
  /*
  stando al datasheet, le calibrazioni corrette sono:
    rosso: map(data,60,15,0,100)
    blu:   map(data,80,11,0,100)
    verde: map(data,80,20,0,100)
    ma sentitevi liberi di cambiarle a vostro piacimento
  */
}