Salve a tutti, sto scrivendo un codice al fine di far funzionare un modulo TM1638 come dashboard su alcuni veicoli dotati di centraline in grado di inviare dati utili via seriale, il tutto supportato da un arduino nano.
La prima parte di programma che si occupa di "convertire" il segnale seriale in variabili è stato completato.
Ora sto scrivendo il codice per far funzionare al meglio il modulo TM1638, esso dovrà far funzionare i led in funzione della velocità di rotazione del motore(rpm) e mostrare sul display alcune varibili, tra cui gli rpm, temperature e variabili varie che ottengo via seriale. Il mio obiettivo è cambiare variabile da visualizzare premendo i pulsanti disponibili sul modulo.
Allo stato attuale sono in grado di far funzionare efficientemente i led e mostrare la velocità di rotazione, vi chiedo aiuto e qualche suggerimento su come posso strutturare il codice al fine di cambiare variabile da visualizzare premendo dei pulsanti.
In passato ho fatto altri progetti simili, come un controller per acquario corredato da sonde temperatura, umidità, sd per logging, e modulo rtc ed un display 16x2(i2c), anche lì il mio limite è stato non capire, anche a causa del mio poco tempo disponibile, che struttura utilizzare per far cambiare "schermata" premendo un pulsante.
vi allego il mio attuale codice, spero che mi possate consigliare la giusta via.
Grazie.
PS: attualmente per testare sto utilizzando un ciclo for per generare la variabile rpm, successivamente non ci sarà il ciclo for ma le variabili dipenderanno dal segnale seriale in ingresso.
#include <TM1638plus.h>
#define STROBE_TM 4
#define CLOCK_TM 6
#define DIO_TM 7
bool high_freq = false; //default false,, If using a high freq CPU > ~100 MHZ set to true.
TM1638plus tm(STROBE_TM, CLOCK_TM , DIO_TM, high_freq);
void setup()
{
tm.displayBegin();
}
void loop()
{
for (uint8_t brightness = 7; brightness < 8; brightness++)
for (int rpm = 0; rpm <= 15000; rpm = rpm+500)
{
char rpm1[11];
int tw=0;
uint16_t data = 234;
sprintf(rpm1, "RPm%05d", rpm); //
tm.displayText(rpm1);
tm.brightness(brightness);
//if
if (rpm>500 && rpm<10500){
tm.setLED(0, 1);
}else{
tm.setLED(0, 0);
}
if (rpm>2000 && rpm<10500){
tm.setLED(1, 1);
}else{
tm.setLED(1, 0);
}
if (rpm>4000 && rpm<10500){
tm.setLED(2, 1);
}else{
tm.setLED(2, 0);
}
if (rpm>5000 && rpm<10500){
tm.setLED(3, 1);
}else{
tm.setLED(3, 0);
}
if (rpm>6000 && rpm<10500){
tm.setLED(4, 1);
}else{
tm.setLED(4, 0);
}
if (rpm>7000 && rpm<10500){
tm.setLED(5, 1);
}else{
tm.setLED(5, 0);
}
if (rpm>8000 && rpm<10500){
tm.setLED(6, 1);
}else{
tm.setLED(6, 0);
}
if (rpm>9000 && rpm<10500){
tm.setLED(7, 1);
}else{
tm.setLED(7, 0);
}
if (rpm>10500){
while(tw<5)
{
tm.setLED(0, 1);
tm.setLED(1, 1);
tm.setLED(2, 1);
tm.setLED(3, 1);
tm.setLED(4, 1);
tm.setLED(5, 1);
tm.setLED(6, 1);
tm.setLED(7, 1);
delay(10);
tm.setLED(0, 0);
tm.setLED(1, 0);
tm.setLED(2, 0);
tm.setLED(3, 0);
tm.setLED(4, 0);
tm.setLED(5, 0);
tm.setLED(6, 0);
tm.setLED(7, 0);
delay(10);
tw=tw+1;
}
}else{
tm.setLED(7, 0);
}
//if end
delay(100);
}
tm.reset();
}