Nokia 5110 et pixels

Bonjour
J'ai trouvé sur le forum une librairie graphique rapide pour l'écran Nokia 5110 :
https://forum.arduino.cc/index.php?topic=176794.0et j'ai voulu la tester.
Elle est effectivement très rapide...
Voulant l'utiliser pour mon jeu de Pong, j'ai dû créer une fonction "getPixel" pour connaitre l'état des pixels. C'est là que les ennuis ont commencé...

Comme c'est codé en C++, et que je ne connais pas ce langage, j'ai essayé de comprendre et adapter la fonction "set Pixel", dont voici le code :

void PCD8544_SPI_FB::setPixel(uint8_t x, uint8_t y, uint8_t value)
{
	if (x >= PCD8544_X_PIXELS || y >= PCD8544_Y_PIXELS) return;
	uint8_t bank = y / 8;
	uint8_t bitMask = 1 << (y % 8);
	uint8_t &byte = this->m_Buffer[(PCD8544_X_PIXELS * bank) + x];
	if (value)
		byte |= bitMask;
	else
		byte &= ~bitMask;
}

Comme ça a l'air assez simple, je me suis lancé pour le "getPixel", que voici :

uint8_t PCD8544_SPI_FB::getPixel(uint8_t x, uint8_t y)
{
	if (x >= PCD8544_X_PIXELS || y >= PCD8544_Y_PIXELS) return;
	uint8_t bank = y / 8;
	uint8_t bitMask = 1 << (y % 8);
	uint8_t &byte = this->m_Buffer[(PCD8544_X_PIXELS * bank) + x];
	byte &= bitMask;
	byte = byte >> (y%8);
	return byte;
}

Il doit y avoir un problème dans mon code, puisque lorsque je l'utilise, je constate des problèmes : des pixels qui s'allument au mauvais endroit lors de l'appel de setPixel.
Quelqu'un peut-il me dire ce qui ne va pas dans mon code ? Merci

Pour préciser : un exemple de code

#include <SPI.h>
#include "PCD8544_SPI.h"

#define USE_FRAME_BUFFER

#ifdef USE_FRAME_BUFFER
PCD8544_SPI_FB display;
#else
PCD8544_SPI display;
#endif


void setup() {
  Serial.begin(9600);
  size_t len;
  display.begin();
  display.clear();   // efface l'écran
  display.writeRect(0, 0, 40, 40, false);
  display.writeRect(10, 10, 20, 20, true);
  for (int i=0; i<=10; i++) {
    for (int j=0; j<=10; j=j+2) {
      display.setPixel(15+i,15+j,0);
  }}
  display.gotoXY(20,0);
  len = display.print(F("ABCD: "));
  len += display.print(12);

  display.writeRect(0, 0, PCD8544_X_PIXELS, PCD8544_Y_PIXELS, false);
  display.setPixel(79,46,1);
  display.renderAll();

//  int i = display.getPixel(80,45);
//  Serial.println(i);
  Serial.println(PCD8544_X_PIXELS);
  Serial.println(PCD8544_Y_PIXELS);

  for (byte y=12; y<40; y=y+3) {
    display.writeRect(60, y, 2, 2, true);
    delay(1000);
    display.renderAll();
  }
}

void loop() {
  // put your main code here, to run repeatedly:

}

Lorsque les lignes sont commentées, tout va bien, lorsqu'elles sont dé-commentées, le premier rectangle tracé dans la boucle à la fin du code fait disparaître un pixel vers les coordonnées (80,47).
Bizarre...

Si tu regardes ce morceau de code de setpixel()

uint8_t &byte = this->m_Buffer[(PCD8544_X_PIXELS * bank) + x];
 if (value)
 byte |= bitMask;
 else
 byte &= ~bitMask;

tu vois que byte permet d'accéder directement au buffer.
Donc lorsque dans getPixel(), tu fais

byte &= bitMask;
 byte = byte >> (y%8);

tu modifies le contenu du buffer.
Dans getPixel(), il faudrait faire quelque chose comme ça

uint8_t monPixel = byte & bitMask;
 monPixel = monPixel >> (y%8);
 return monPixel;

fdufnews:
Donc lorsque dans getPixel(), tu fais

byte &= bitMask;

byte = byte >> (y%8);



tu modifies le contenu du buffer.
Dans getPixel(), il faudrait faire quelque chose comme ça


uint8_t monPixel = byte & bitMask;
monPixel = monPixel >> (y%8);
return monPixel;

Ah, d'accord, c'est une histoire de pointeurs alors ? J'ai jamais été très fort en pointeurs.
Avec ce que tu proposes, tu crées une nouvelle variable "monPixel" qui va lire le contenu de l'adresse calculée et c'est sur sa valeur qu'on fait les opérations ensuite, c'est ça ?
Merci, je vais essayer

ça marche : merci Fdufnews :