Per usare le librerie Adafruit per la gestione dei display ho visto che bisogna richiamare quella libreria.
I pin che richiamo sono quelli che ho visto essere sul pinout corrispondenti a quelli che mi servono.
Ora ho provato questo codice dove ho eliminato le parti e le funzioni che fanno riferimento ad altre librerie:
#define sclk 13 /* clock della comunicazione SPI, in comune tra i due display. il pin è il 15 per Arduino Pro Micro. */
#define mosi 11 /* comunicazione unidirezionale master -> slave, in comune tra i due display. il pin è il 16 per Arduino Pro Micro. */
#define cs1 2 /* selezione dello slave 1, primo display. */
#define rs1 3 /* pin rs dello slave 1, primo display. */
#define rst1 4 /* reset dello slave 1, primo display. */
#define cs2 5 /* selezione dello slave 2, secondo display */
#define rs2 6 /* pin rs dello slave 2, secondo display */
#define rst2 7 /* reset dello slave 2, secondo display */
#define Vref 5.0 /* calibrazione della tensione di riferimento delle misure */
/*
siccome Arduino legge in entrata al massimo 5 v, devo dividere con un partitore di tensione la Vin.
Per fare ciò utilizzo una Ra = 681 k Ohm 1% e una Rb = potenziometro multigiro 200 k Ohm.
*/
/*
Vin(max) viene calcolata con Vout(max) / (Rb / (Ra + Rb)). Quindi coef = (Ra + Rb) / Rb.
Ma siccome Ra è fisso, basta inserire il valore di Rb.
*/
#define Ra1 680000 /* valore in Ohm di Ra1. 681 k Ohm 1% */
#define Rb1 200000 /* valore in Ohm di Rb1. potenziometro multigiro 200 k Ohm */
#define Ra2 680000 /* valore in Ohm di Ra2. 681 k Ohm 1% */
#define Rb2 200000 /* valore in Ohm di Rb2. potenziometro multigiro 200 k Ohm */
#define Ra3 680000 /* valore in Ohm di Ra3. 681 k Ohm 1% */
#define Rb3 200000 /* valore in Ohm di Rb3. potenziometro multigiro 200 k Ohm */
#define Ra4 680000 /* valore in Ohm di Ra4. 681 k Ohm 1% */
#define Rb4 200000 /* valore in Ohm di Rb4. potenziometro multigiro 200 k Ohm */
float coef[4] = {((Ra1 + Rb1) / Rb1), ((Ra2 + Rb2) / Rb2), ((Ra3 + Rb3) / Rb3), ((Ra4 + Rb4) / Rb4)}; /* array di valori fissi dati dalle resistenze di ogni canale. */
float Vanalog[4] = {0.00, 0.00, 0.00, 0.00}; /* array di valori di tensione, convertiti in analogico tra 0 e 5 v. i valori sono a 2 cifre decimali. */
float VanalogMAX[4] = {0.00, 0.00, 0.00, 0.00}; /* array di valori di tensione massimi, convertiti in analogico tra 0 e 5 v. i valori sono a 2 cifre decimali. */
#define Sample 32 /* numero dei campionamenti */
#define Channel 4 /* numero dei canali */
int CH[4] = {A0, A1, A2, A3}; /* array che per elementi ha i numeri dei pin per richiamare i pin analogici su Arduino Pro Micro. */
int Vdigital[4] = {0, 0, 0, 0}; /* array di valori di tensione, convertiti in digitale tra 0 e 1023. i valori sono interi. */
int VdigitalMAX[4] = {0, 0, 0, 0}; /* array di valori di tensione massimi, convertiti in digitale tra 0 e 1023. i valori sono interi. */
void readCH(byte n){
unsigned int Somma; /* variabile che contiene la somma di tutti i campionamenti (1023 * 32 = 32736 al massimo) */
byte varSample; /* variabile del campionamento */
for (varSample <= (Sample - 1); varSample++;){ /* ciclo for per i campionamenti, da 0 a 31, quindi 32 campionamenti */
Somma += analogRead(CH[n]); /* ad ogni ciclo aggiungi una lettura */
}
Vdigital[n] = Somma / Sample; /* salva nell'array la media dei campionamenti */
Somma = 0; /* uscito dal ciclo for azzera la sommatoria per il prossimo richiamo della funzione */
varSample = 0; /* uscito dal ciclo for azzera la variabile da 0 a 31 per il prossimo richiamo della funzione */
}
void detectMAX(){
for (byte varCH = 0; varCH < (Channel - 1); varCH++){ /* ciclo for per i canali */
if(Vdigital[varCH] > VdigitalMAX[varCH]){ /* if per trovare il valore più alto */
VdigitalMAX[varCH] = Vdigital[varCH]; /* se trovo un valore più alto del precedente lo salvo al posto del precedente */
}
}
}
#define KeyboardPin A4 /* pin lettura tastiera */
byte varKeyboard = 0; /* variabile byte che contiene il valore della lettura del pin anallogico della tastiera */
bool select = false; /* variabile booleana per il pulsante select */
bool reset = false; /* variabile booleana per il pulsante reset */
void keyboard(){
varKeyboard = analogRead(KeyboardPin); /* lettura del pin analogico della tastiera */
if (varKeyboard > 767){select = true;} /* se la lettura è maggiore del valore, allora il pulsante select è premuto e la variabile booleana è true */
else {select = false;} /* in caso contrario la variabile booleana è false */
if(varKeyboard < 767 && varKeyboard > 255){reset = true;} /* se la lettura è minore del valore e allo stesso tempo maggiore di 255, allora il pulsante reset è premuto e la variabile mooleana è true */
else {reset = false;} /* in caso contrario la variabile booleane è false */
}
byte varMAX = 0; /* variabile che contine il numero del canale in base a quante volte schiaccio il tasto select */
void resetMAX(){
if (select){varMAX++;} /* se select è true, aggiungi un valore alla variabile varMAX */
for (varMAX; varMAX <= (Channel - 1);){ /* ciclo for, finché la variabile è minore o uguale del numero dei canali */
if (reset){VdigitalMAX[varMAX] = 0;} /* se reset è true, azzera l'elemento dell'array della tensione digitale corrispondente al canale selezionato */
}
varMAX = 0; /* azzera la variabile */
}
void conversionDA(byte n){
Vanalog[n] = ((Vref * Vdigital[n]) / 1023) * coef[n]; /* conversione tensione da digitale intero ad analogico decimale, da 0 a 22 Volt */
VanalogMAX[n] = ((Vref * Vdigital[n]) / 1023) * coef[n]; /* conversione tensione MAX da digitale intero ad analogico decimale, da 0 a 22 Volt */
}
unsigned long refreshDisplayTime = micros(); /* salva i microsecondi una sola volta all'accensione del processore per il loop del refresh dei due display */
#define refreshDisplayLoop 2000 /* tempo di clock per il loop del refresh dei due display */
void setup() {
Serial.begin(9600);
pinMode(sclk, OUTPUT);
pinMode(mosi, OUTPUT);
pinMode(cs1, OUTPUT);
pinMode(rs1, OUTPUT);
pinMode(rst1, OUTPUT);
pinMode(cs2, OUTPUT);
pinMode(rs2, OUTPUT);
pinMode(rst2, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(A4, INPUT);
}
void loop() {
readCH(0);
readCH(1);
readCH(2);
readCH(3);
detectMAX();
keyboard();
resetMAX();
conversionDA(0);
conversionDA(1);
conversionDA(2);
conversionDA(3);
if(micros() - refreshDisplayTime > refreshDisplayLoop){
refreshDisplayTime += refreshDisplayLoop;
}
Serial.print("varKeyboard: "); Serial.print(varKeyboard); Serial.print(" select: "); Serial.print(select); Serial.print(" reset: "); Serial.print(reset); Serial.print(" varMAX: "); Serial.println(varMAX);
}
Il problema è che anche utilizzando un altro sketch (che non allego perché molto lungo ma che trovate comunque nel topic "Orologio / Sveglia Radiocontrollato" nella sezione "Generale") ho lo stesso problema con Arduino UNO, cioè che non leggo nulla sulla seriale.
Non vorrei fosse un problema software sul pc più che sulla programmazione della scheda.