en général les OLED adafruit sont commandé par SSD1306 ou éventuellement SSD1305 il y a une partie de la mémoire qui est réservée a l'affichage qui est buffurisé il n'est pas impossible donc d'écrire une fonction de relecture
[ It uses 512 bytes of RAM since it needs to buffer the entire display but its very fast! ]
quand on entre dans le code de la librairie du SSD1306 on y trouve les différentes organisations mémoire suivant la définition.
J'ai suivi les indications et j'ai une erreur de compilation :
/Users/leveque/Documents/Arduino/libraries/Adafruit_SSD1306/Adafruit_SSD1306.cpp: In member function 'uint16_t Adafruit_SSD1306::getPixel(int16_t, int16_t)':
/Users/leveque/Documents/Arduino/libraries/Adafruit_SSD1306/Adafruit_SSD1306.cpp:47: error: 'ssd1306_swap' was not declared in this scope
/Users/leveque/Documents/Arduino/libraries/Adafruit_SSD1306/Adafruit_SSD1306.cpp:60: error: 'buffer' was not declared in this scope
hauteur de l'écran multipliée par largeur et divisé par 8 car dans un octet on stocke 8 pixels
donc l'expression retourne en fait la couleur du pixel en calculant l'adresse dans le tableau et en testant 1 bit de l'octet correspondant suivant x et y
mais j'avoue que ne programmant en C que depuis moins d'un an j'ai du mal a décortiquer ... il faut créer un masque et faire un ET logique bit a bit
ici _BV retourne directement un byte correspondant au bit pixel
? est un opérateur de condition raccourci si je puis dire
(condition) ? instruction si vrai : instruction si faux
mais je suis sur qu'une explication détaillée va arriver prochainement ....