display multicolor!

salve a tutti ho un display multicolor, ho collegato il tutto secondo questo sito!
http://www.ladyada.net/learn/lcd/charlcd.html

il tutto funziona con quel codice, ma non riesco a farlo illuminare di un solo colore! quindi vi chiedo comandi per spegnere e accendere il display di un solo colore? vi ringrazio!

Non ho visto tutto il codice comunque prova cosi:

void loop() {
    setBacklight(0, 0, 255);
    delay(5);
}

PS: praticamente la funzione setBacklight imposta il colore della luce posteriore secondo il colore ottenuto dai tre valori che passi e che rappresentano il rosso,verde,blu

metti anche il link al tuo display

ecco il display!

con questo sketch il display resta acceso solo di blu! ma ovviamente ci sono righe di codice che non servono, mi aiutate a togliere i pezzi che non servono? appena tolgo un solo pezzo mi segnala un errore!

#include <LiquidCrystal.h>
#include <Wire.h>

#define REDLITE 3
#define GREENLITE 5
#define BLUELITE 6

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// you can change the overall brightness by range 0 -> 255
int brightness = 255;

void setup() {
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("RGB 16x2 Display ");
lcd.setCursor(0,1);
lcd.print(" Multicolor LCD ");

brightness = 100;
}

void loop() {
setBacklight(0, 0, 255);
delay(5);
}

void setBacklight(uint8_t r, uint8_t g, uint8_t b) {

b = map(b, 0, 255, 0, brightness);

b = map(b, 0, 255, 255, 0);

Serial.print(" B = "); Serial.println(b, DEC);

analogWrite(BLUELITE, b);

}

ma perche' vuoi eliminare codice ? ora che sai come far accendere un solo colore potrai in futuro sceglierne un altro.
non e' che eliminado il codice degli altri led guadagni chissa' cosa

si ma ci sono righe di codice che non so a che servono! e all'esame di maturita' dovrei saperlo spiegare! un ultima domanda per cancellare la scritta e farne visualizzare un'altra?

Praticamente vai a settare il colore impostando i colori rosso, verde, blu tramite un segnale PWM per ognuno di questi, in base alla freq di questi hai un colore in uscita

spydread:
per cancellare la scritta e farne visualizzare un'altra?

lcd.clear();

ho gia' provato se metto quel comando seguito o preceduto o anche senza il delay mi compare direttamente la seconda scritta e mi ignora la prima scritta!

Se leggi le reference: LiquidCrystal - Arduino Reference vedi che c'è scritto:
Clears the LCD screen and positions the cursor in the upper-left corner.
quindi per cancellare tutte e due le righe devi spostare il cursore prima su una poi sull'altra.

a parte che non dici che display hai immagino un 2x16, comunque devi sepre specificare dove si trova il cursore

ciclo for i 1-16
{
lcd.setCursor(0,i);
lcd.print(" ");
}

ho messo il link dove ho comprato il mio display, e da li puoi vedere di che display si tratta, dovevi solo rileggere meglio :slight_smile: comunque ancora non sono riuscito a cancellare il display e scrivere una seconda frase.. uff

ypkdani:
Clears the LCD screen and positions the cursor in the upper-left corner.
quindi per cancellare tutte e due le righe devi spostare il cursore prima su una poi sull'altra.

Ma assolutamente no, lcd.clear() cancella tutto il display indipendentemente da dove si trova il cursore e lo riposiziona nella prima colonna della prima riga.
Infatti la libreria liquidcrystal codifica la clear() in questo modo:

void vLcd::clear()
{
  command(LCD_CLEARDISPLAY);  // clear display, set cursor position to zero
  delayMicroseconds(2000);  // this command takes a long time!
}

Ove LCD_CLEARDISPLAY è "#define LCD_CLEARDISPLAY 0x01", ovvero il comando da inviare ad un LCD per l'erase totale come verificabile su un qualunque data sheet di display alfanumerici con controller Hitachi HD44780 compatibile.

spydread:
il tutto funziona con quel codice, ma non riesco a farlo illuminare di un solo colore! quindi vi chiedo comandi per spegnere e accendere il display di un solo colore? vi ringrazio!

Il tuo display ha tre serie di led per la retroilluminazione, una rossa, una verde, una blu, infatti ha 18 pin invece dei classici 16.
Per cambiare colore devi alimentare tutte e tre le serie di led o tramite resistenze di limitazione esterne, colore fisso, oppure tramite tre segnali pwm, e indispensabile mos come driver, da Arduino, in questo modo puoi variarne il colore a piacere.

astrobeed:
Il tuo display ha tre serie di led per la retroilluminazione, una rossa, una verde, una blu, infatti ha 18 pin invece dei classici 16.
Per cambiare colore devi alimentare tutte e tre le serie di led o tramite resistenze di limitazione esterne, colore fisso, oppure tramite tre segnali pwm, e indispensabile mos come driver, da Arduino, in questo modo puoi variarne il colore a piacere.

Esatto, e ricorda che il tuo display ha i led ad anodo comune, per cui per 'alzare' un colore, devi dare un comando pwm 0, mentre per spegnerlo 255 (ne ho uno identico)!

rispondo a ivan64 sto facendo prove adesso e io se il pwm lo metto a 0 e' spento e se metto a 255 lo accendo ( se non ricordo male 255 corrisponde alla massima tensione quindi 5v!)
eee comunaque!
ci sono riuscito! in poche parole il codice che ho copiato io per il multicolor, metteva le righe di codice per la scritta, nel void setup, e appena si metteva un lcd.clear o un delay subentrava solo l'ultima riga di comando, ho spostato il tutto sotto il void loop e funziona tutto.
con il comando lcd.clear e qualche delay.
ora chiedo a chi amministra questo bellissimo forum perche non facciamo una sezione "consigli" dove mettiamo tutti i post che trattano i vari argomenti ovviamente in modo esaustivo, esempio un post che tratta bene i display multicolor, un post che tratta i classici display, e cosi' via, evitiamo sempre di trattare gli stessi argomenti, e mettiamo delle buone guide perche online si trova poco! che ne dite?

spydread:
rispondo a ivan64 sto facendo prove adesso e io se il pwm lo metto a 0 e' spento e se metto a 255 lo accendo ( se non ricordo male 255 corrisponde alla massima tensione quindi 5v!)
eee comunaque!
.......

No, guarda, o hai sbagliato i collegamenti, oppure usi una routine che inverte il comando pwm..... il comune (anodo) per i 3 led è il +5volts, e se sui catodi gli piazzi 5 volts (pwm 255) il led può solo rimanere spento, mentre con pwm 0, sui catodi hai 0volts, ed i led si accendono!
Questo l'ho tratto dal link che hai passato tu:

nella funzione per settare il colore viene invertito il comando pwm

void setBacklight(uint8_t r, uint8_t g, uint8_t b) {
  // normalize the red LED - its brighter than the rest!
  r = map(r, 0, 255, 0, 100);
  g = map(g, 0, 255, 0, 150);
 
  r = map(r, 0, 255, 0, brightness);
  g = map(g, 0, 255, 0, brightness);
  b = map(b, 0, 255, 0, brightness);
 
  // common anode so invert!
  r = map(r, 0, 255, 255, 0);  <---qui!!!!
  g = map(g, 0, 255, 255, 0);
  b = map(b, 0, 255, 255, 0);
  Serial.print("R = "); Serial.print(r, DEC);
  Serial.print(" G = "); Serial.print(g, DEC);
  Serial.print(" B = "); Serial.println(b, DEC);
  analogWrite(REDLITE, r);
  analogWrite(GREENLITE, g);
  analogWrite(BLUELITE, b);
}