Fonction gb.display.setColor();

Bonjour,

La fonction gb.display.setColor(); peut s’utiliser avec plusieurs arguments.
Par défaut, on peut utiliser 16 mots clés prédéfinis suivants :

WHITE
GRAY
DARKGRAY
BLACK
PURPLE
PINK
RED
ORANGE
BROWN
BEIGE
YELLOW
LIGHTGREEN
GREEN
DARKBLUE
BLUE
LIGHTBLUE

Si je veux faire varier les couleurs à l’écran, je mets cette liste dans une variable de type String :

String couleur[16] = {"WHITE", "GRAY", "DARKGRAY", "BLACK", "PURPLE", "PINK", "RED", "ORANGE", "BROWN", "BEIGE", "YELLOW", "LIGHTGREEN", "GREEN", "DARKBLUE", "BLUE", "LIGHTBLUE"};

Je veux utiliser une boucle pour faire varier les couleurs comme suit :

  for (int i=0; i<16; i++)
  {
    gb.display.setColor(couleur[i]);
  }

Sauf que ça me renvoie le message d’erreur suivant :

error: no matching function for call to 'Gamebuino_Meta::Image::setColor(String&)'
     gb.display.setColor(couleur[i]);

Comment passer les valeurs du tableau couleur en argument de la fonction gb.display.setColor(); ?
D’avance merci pour votre aide.

ce n’est pas une chaîne mais une valeur 16b, soit une vrai couleur hexa

1 Like

En effet, ce ne sont pas des chaines de caractères.
Le cpp est un langage typé : chaque variable doit être définie par un type qui définit comment doit être interpréter la donnée qui y est stockée et sa taille en mémoire : chaine de texte, nombre entier, ou ici couleur.
Il faut déclarer le tableau avec quelque chose dans ce gout la :

Color couleur[16] = { WHITE, GRAY, DARKGRAY, BLACK, PURPLE, PINK, RED, ORANGE, BROWN, BEIGE, YELLOW, LIGHTGREEN, GREEN, DARKBLUE, BLUE, LIGHTBLUE};

Merci à tous les 2 pour votre aide.

Je confirme qu’avec le type Color, ça fonctionne !

Voilà ce que ça donne (essai sans prétention d’affichage de couleurs et de tailles différentes d’un rectangle en modifiant le programme “compteur”).

#include <Gamebuino-Meta.h>
using namespace std;

int compteur = 0;
Color couleur[16] = { WHITE, GRAY, DARKGRAY, BLACK, PURPLE, PINK, RED, ORANGE, BROWN, BEIGE, YELLOW, LIGHTGREEN, GREEN, DARKBLUE, BLUE, LIGHTBLUE};

void setup() {
  gb.begin();
}

void loop() {
  while(!gb.update());
  gb.display.clear();
  
  if (gb.buttons.repeat(BUTTON_UP,0)){
    compteur++;
    gb.sound.playTick();    // On joue un son
  }
  if (gb.buttons.repeat(BUTTON_DOWN,0)){
    compteur--;
    gb.sound.playTick();    // On joue un son
  }
  if (gb.buttons.pressed(BUTTON_HOME)){
    compteur=0;
    gb.sound.playTick();    // On joue un son
  }
  gb.display.print(compteur);
  gb.display.setColor(couleur[compteur%16]);
  gb.display.fillRect(compteur, 8, 2, 4+compteur);
}
1 Like