Il codice è un po' lungo e lo ometto nelle parti non essenziali per questo problema:
#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 */
//#include <SPI.h> /* libreria per comunicazione SPI */
#include <Adafruit_GFX.h> /* libreria grafica di Adafruit */
#include <Adafruit_ST7735.h> /* libreria per il chip ST7735 di gestione del display */
Adafruit_ST7735 display1 = Adafruit_ST7735(cs1, rs1, rst1); /* creazione oggetto display1 per la libreria Adafruit di gestione del chip del display */
Adafruit_ST7735 display2 = Adafruit_ST7735(cs2, rs2, rst2); /* creazione oggetto display2 per la libreria Adafruit di gestione del chip del display */
...
#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 printCH0(){
display1.setTextColor(ST7735_GREEN,ST7735_BLACK); /* */
display1.setTextSize(2); /* */
display1.setCursor(40, 15); /* */
display1.print("VERDE "); /* */
display1.setCursor(40, 33); /* */
display1.print(Vanalog[0], 1); /* */
display1.print("V "); /* */
display1.setTextColor(ST7735_WHITE,ST7735_BLACK); /* */
display1.setTextSize(1); /* */
display1.setCursor(30, 53); /* */
display1.print("Vmax "); /* */
display1.print(VanalogMAX[0], 1); /* */
display1.print("V "); /* */
}
...
...
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() {
...
detectMAX();
keyboard();
resetMAX();
...
Serial.print("varKeyboard: "); Serial.print(varKeyboard); Serial.print(" select: "); Serial.print(select); Serial.print(" reset: "); Serial.print(reset); Serial.print(" varMAX: "); Serial.println(varMAX);
}
Questo è il codice usato su Arduino UNO, per Arduino Micro semplicemente alcuni pin cambiano ma nulla d'altro.
Questo codice non stampa nulla sul monitor seriale.