Doppio Oled.

Salve a tutti.
Vorrei utilizzare due Oled 128x64 insieme ( comprati su internet a due soldi).
Entrambi funzionano perfettamente con la libreria Adafruit SSD_1306 ma non riesco a capire come poterne utilizzare due contemporaneamente con tale libreria. Premetto che ho già assegnato due indirizzi diversi per la comunicazione I2C ma non so come indirizzare un dato all'uno o all'altro.

Ringrazio per adesso e saluto
Luca

Bella domanda! Non mi ero mai posto il problema. Ho trovato qualcosa qua, vedi il post #40: http://forum.arduino.cc/index.php?topic=219419.30.

E vedi anche questo: http://forum.arduino.cc/index.php?topic=248663.0.

Grazie della risposta Sukkopera ma cliccando sui link da te inseriti mi torna una pagina di errore che dice " impossibile raggiungere il sito".

Forse un copia incolla sbagliato?

Grazie ancora se vorrai aiutarmi.
Luca

No, è un problema del bottone che inserisce i link ...
... ho corretto, ora dovrebbero funzionare.

@SukkoPera: Prima di inserire i link, vai in modalità "View Source" (ultimo bottone a destra) così almeno i link vengono inseriti SEMPRE correttamente. :wink:

Guglielmo

Erm, scusate :-[. Sarà il secondo link che sbaglio in ~2000 post...

SukkoPera:
Erm, scusate :-[. Sarà il secondo link che sbaglio in ~2000 post...

E di che ti scusi, NON è mica è colpa tua ... :slight_smile:
... c'è un bug nel software del forum e, se non vai in modalità "View Source" ... il 50% delle volte te li inserisce sbagliati e tocca ogni volta andare a ricorreggerli ... :confused:

Ogni tanto scappava pure a me ... però ormai me ne accorgo dalla maschernia di inserimento del link ... che in modalità "View Source" è differente :wink:

Guglielmo

SukkoPera:
Erm, scusate :-[. Sarà il secondo link che sbaglio in ~2000 post...

Sono 2 di troppo. :wink: :wink: :wink: :wink: :wink:
Ciao Uwe

uwefed:
Sono 2 di troppo. :wink: :wink: :wink: :wink: :wink:
Ciao Uwe

… alla terza posso mangiarlo ? … eh, dai ? … posso ? … posso ? … :smiling_imp:

( > SukkoPera: sto scherzando, ovviamente … forse :wink: :D)

Al massimo potrai bermi! :smiley:

Ok, dov'è il punto per introdurre la cannuccia. ? :smiley:

Oh erm... :relaxed:

ok sukkopera ho visto i threads che hai indicato i quali discutono della libreria u8glib.
Beh a parte la mia pochezza in ambito software mi sembra un bel po' più complicata rispetto alla più familiare " Adafruit " però vedo che con poche modifiche in quel caso è stato possibile usare due Oled.

Nessuno ha fatto la stessa cosa con " Adafruit " ?

Cioé, basta settare la variabile che contiene l'indirizzo del display con cui vuoi parlare prima di farlo, non mi sembra molto complesso...

Cioè......

nella libreria adafruit è definita una variabile di questo tipo:

#define SSD1306_I2C_ADDRESS   0x3C  // 011110+SA0+RW - 0x3C or 0x3D

e quindi basta che nello sketch assegni un valore diverso tipo:

void loop()
{
SSD1306_I2C_ADDRESS = 0x3D;
display.clearDisplay();
......

Mi spiace ma non so proprio come dovrei fare visto che devo inizializzare il display con

void setup()   {  
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
....................

una volta inizializzato il display come faccio a reindirizzarlo nel void loop ?

niente di fatto.........

non riesco a modificare in alcun modo la libreria " Adafruit_ssd1306 " per poter dialogare con due oled.

come imposto la variabile indirizzo Oled?

Help me please.....Help .....

Veramente io parlavo della u8glib, mai usata la Adafruit.

@rullo: magari se mettessi anche un link alla libreria Adafruit che stai usando ci eviteresti di fare delle ricerche che, spesso, portano a risultati diversi da quelli che servono !!!

Guglielmo

Scusate....eccola...

Ringrazio

Mmm ... probabilmente dico una baggianata (il C++ non è il mio forte ... cerco nei limiti del possibile di lavorare in 'C' puro;)) e non so se può funzionare con il C++ in cui è scritta la libreria, comunque potresti fare una prova ...

... come hai visto, l'indirizzo I2C del display è messo in una #define mentre a te serve poterne cambiare il valore ... "in corso d'opera".

Per fare questo, ti servirebbe usare una variabile globale comune sia alla libreria che al tuo programma ... potresti quindi:

  1. eliminate quella #define SSD1306_I2C_ADDRESS 0x3C dal .h della libreria

  2. creare un nuovo .h chiamato, ad esempio, theAddress.h che conterrà:

#ifndef THEADDRESS_H
#define THEADDRESS_H

extern uint8_t SSD1306_I2C_ADDRESS;

#endif
  1. nel .h e nel .cpp della libreria, in testa aggiungere l'include del nuovo .h: #include "theAddress.h"

  2. sempre nel .h e nel .ccp della libreria dichiarare una variabile globale con lo stesso nome, ma SENZA l'extern:

uint8_t SSD1306_I2C_ADDRESS = 0x3C;

  1. nel TUO programma fare la stessa cosa, ovvero includere sia il nuovo .h che dichiarare di nuovo la variabile globale.

  2. a questo punto, PRIMA di chiamare qualsiasi cosa della libreria, tu metti nella variabile il valore dell'indirizzo I2C del display che vuoi comandare e poi chiami ll metodo che così si troverà l'indirizzo I2C del display da usare nella variabile comune a tutti. :slight_smile:

Oh ... tutto questo sempre che ...

  1. io non abbia scritto un mucchio di bojate (cosa sempre possibile)

  2. l'indirizzo dei due display I2C sia diverso uno dall'altro ...

Guglielmo