/*
SCRITTA SCORREVOLE
Definito un array di caratteri contenente la scritta
Classe 3BE
la mostri sul display ruotando tutti i caratteri di
una posizione verso sinistra ogni 200ms
*/
#include <LiquidCrystal_I2C.h>
#include "HalTimer.h"
LiquidCrystal_I2C lcd(0x27,20,4);
char W[12],S[12]={'C','l','a','s','s','e',' ','3','B','E',' ','\0'};
//oppure char S[]="Classe 3BE ";
int i,n, k; char c;
String T="Classe 3BE ";
void setup()
{ Serial.begin(115200); for(int i=8;i<=13;i++) pinMode(i, OUTPUT);
lcd.init(); lcd.backlight();
}
void loop()
{ //scritta scorrevole col tipo String
lcd.setCursor(0,0);
lcd.print(T);
delay(100);
T=T+T.charAt(0);
T=T.substring(1,T.length());
return;
T=256.77; strcpy(S, dtostrf(123.78,7,2,W));
T+=" ecco\n";T+=1238; T+=" ";
T+=String(12.5673994,4); //se voglio specificare il um di decimali debbo richiamare la funzione String (omonima del tipo String,.., in c++ è il costruttore della classe...)
Serial.print(T);Serial.print(" :: ");Serial.print(S);Serial.println("---------------------");
return;
//versione che usa il tipo String e le funzioni associate
lcd.setCursor(0,0);
lcd.print(T);\
delay(100);
T=T+T.charAt(0);
T=T.substring(1,T.length());
return;
//versione che usa gli array di caratteri.
//rotazione della scritta con modifica dell'array S
//(ad ogni loop tutti i caratteri dentro S vengono ruotati verso sx)
lcd.setCursor(0,0);
lcd.print(S);
delay(100);
c=S[0]; //prima di mettere al posto di S[0] il valore di S[1] salvo S[0] in c (alla fine dovro metterlo in S[10] per avere la ritazione..)
for(i=0;i<11-1;i++)
{S[i]=S[i+1];
}
S[10]=c;
return;
//rotazione con prelievo dei singoli caratteri da stampare
//a partire da una posizione che ruota lungo la stringa
for(i=0,n=0;i<9;i++)
{lcd.setCursor(i,0);
lcd.print(S[ (k+n)]); //k punta all'inizio della scritta da copiare sul display
//k+n punta al carattere da copiare
n++; if(k+n>11) n=-k; //così k+n=0 e si ricomincia dall'inizio della scritta
}
k++; if(k>11)k=0;
delay(200);
return;
//rotazione della scritta con prelievo del carattere corrente da stampare da una posizione che ruota..
for(i=0;i<9;i++)
{lcd.setCursor(i,0);
lcd.print(S[ (k+i)%11 ]); //k punta all'inizio della scritta da copiare sul display
//k+i punta al carattere da copiare in posizione i (%11 perchè raggiunto ò'11 bisogna ripartire da 0)
}
k++; if(k>11)k=0;
delay(200);
return;
// rotazione con uso delle stringhe
lcd.setCursor(0,0);
lcd.print(S);
delay(100);
c=S[0];
for(i=0;i<strlen(S)-1;i++)
{S[i]=S[i+1];
}
S[strlen(S)-1]=c;
return;
}
/*
itoa(v, buf, 2); //buf = arraty of char, V=value int, 2 = base
dtostrf(float_value, min_width, num_digits_after_decimal, where_to_store_string)
*/