Bonjour à tous je suis nouveau dans ce forum. Dans le cadre d'un projet scolaire j'ai du faire un mini-programme capable d'afficher des messages sur LCD Arduino. Cependant étant novice dans ce domaine, j'ai rencontré des problèmes dont je vais vous en faire part. Je suis actuellement sous Vista 32 bits. Voici le programme.
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
/*********************
Example code for the Adafruit RGB Character LCD Shield and Library
This code displays text on the shield, and also reads the buttons on the keypad.
When a button is pressed, the backlight changes color.
**********************/
// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
// The shield uses the I2C SCL and SDA pins. On classic Arduinos
// this is Analog 4 and 5 so you can't use those for analogRead() anymore
// However, you can connect other I2C sensors to the I2C bus and share
// the I2C bus.
Adafruit_RGBLCDShield spf = Adafruit_RGBLCDShield();
// These #defines make it easy to set the backlight color
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7
void setup() {
// Debugging output
Serial.begin(9600);
// set up the LCD's number of columns and rows:
spf.begin(16, 2);
// Print a message to the LCD. We track how long it takes since
// this library has been optimized a bit and we're proud of it :)
int time = millis();
spf.print("Vous voici dans");
delay(500);
spf.clear();
spf.print("le programme");
delay(500);
spf.clear();
spf.print("Wetkeeper");
time = millis() - time;
Serial.print("Took "); Serial.print(time); Serial.println(" ms");
spf.setBacklight(WHITE);
}
uint8_t i=0;
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
spf.setCursor(0, 1);
// print the number of seconds since reset:
spf.print(millis()/1000);
uint8_t buttons = spf.readButtons();
if (buttons) {
spf.clear();
spf.setCursor(0,0);
if (buttons & BUTTON_UP) {
spf.print("UP ");
spf.setBacklight(RED);
}
if (buttons & BUTTON_DOWN) {
spf.print("DOWN ");
spf.setBacklight(YELLOW);
}
if (buttons & BUTTON_LEFT) {
spf.print("LEFT ");
spf.setBacklight(GREEN);
}
if (buttons & BUTTON_RIGHT) {
spf.print("RIGHT ");
spf.setBacklight(TEAL);
}
if (buttons & BUTTON_SELECT) {
spf.print("SELECT ");
spf.setBacklight(VIOLET);
}
}
}
Et les erreurs lors de la compilation:
In file included from Bienvenue_dans_le_programme_Wetkeeper.ino:1:
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:20: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:23: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:23: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:24: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:24: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:25: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:25: error: 'uint8_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:26: error: 'uint8_t' does not name a type
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:28: error: 'uint16_t' has not been declared
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:29: error: 'uint16_t' does not name a type
C:\Users\Xaras\Documents\Arduino\libraries\Adafruit_RGBLCDShield/Adafruit_MCP23017.h:32: error: 'uint8_t' does not name a type
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
/*********************
Example code for the Adafruit RGB Character LCD Shield and Library
This code displays text on the shield, and also reads the buttons on the keypad.
When a button is pressed, the backlight changes color.
**********************/
// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
// The shield uses the I2C SCL and SDA pins. On classic Arduinos
// this is Analog 4 and 5 so you can't use those for analogRead() anymore
// However, you can connect other I2C sensors to the I2C bus and share
// the I2C bus.
Adafruit_RGBLCDShield spf = Adafruit_RGBLCDShield();
// These #defines make it easy to set the backlight color
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7
void setup() {
// Debugging output
Serial.begin(9600);
// set up the LCD's number of columns and rows:
spf.begin(16, 2);
// Print a message to the LCD. We track how long it takes since
// this library has been optimized a bit and we're proud of it
int time = millis();
spf.print("Vous voici dans");
delay(500);
spf.clear();
spf.print("le programme");
delay(500);
spf.clear();
spf.print("Wetkeeper");
time = millis() - time;
Serial.print("Took "); Serial.print(time); Serial.println(" ms");
spf.setBacklight(WHITE);
}
uint8_t i=0;
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
spf.setCursor(0, 1);
// print the number of seconds since reset:
spf.print(millis()/1000);
uint8_t buttons = spf.readButtons();
if (buttons) {
spf.clear();
spf.setCursor(0,0);
if (buttons & BUTTON_UP) {
spf.print("UP ");
spf.setBacklight(RED);
}
if (buttons & BUTTON_DOWN) {
spf.print("DOWN ");
spf.setBacklight(YELLOW);
}
if (buttons & BUTTON_LEFT) {
spf.print("LEFT ");
spf.setBacklight(GREEN);
}
if (buttons & BUTTON_RIGHT) {
spf.print("RIGHT ");
spf.setBacklight(TEAL);
}
if (buttons & BUTTON_SELECT) {
spf.print("SELECT ");
spf.setBacklight(VIOLET);
}
}
}
Désolé pour le doublon, je pensais avoir posté le premier mais ne l'ayant plus trouvé sur le forum, je pensais qu'il ne c'était pas affiché. Désolé ...
Par contre est-ce que vous pourrez m'expliquer comment ça marche avec les doublons. J'ai essayé de chercher sur Internet mais je n'ai rien trouvé. Juste histoire de savoir les programmer pour entrer une certaine valeur. Merci
Xaras:
Par contre est-ce que vous pourrez m'expliquer comment ça marche avec les doublons. J'ai essayé de chercher sur Internet mais je n'ai rien trouvé. Juste histoire de savoir les programmer pour entrer une certaine valeur. Merci
Hein ? Soit plus clair j'ai rien compris à ta question ...
Excusez-moi avec la panique j'écris trop vite... En fait, je parlais des boutons, je ne sais pas comment les programmer. En fait, dans mon programme ce que je veux c'est demander à l'utilisateur de saisir une certaine valeur avec ces boutons. Après certaines recherches je n'ai rien trouvé...
Merci
Mhh à vrai dire je n'ai pas trop compris en fait ... Si vous pouvez être plus précis s'il vous plaît. Sinon pas d'autres moyens plus simple pour saisir directement des valeurs avec les bouton?
Je t'ai donné un début de réponse mais je pense que tu devrais d'abord réfléchir à comment tu veut entrer tes valeurs.
Déjà il faudrait que tu réfléchisse à quelles valeurs, quels formats (entier, flottant, ...), etc ...
Dans ce cas tu peut utiliser mon algo pour ton application.
Il te faut trois boutons (+, -, ok) et un affichage.
Voila l'algo simplifier à adapter suivant tes besoins :
byte choixEntier() {
/*
* c = bouton appuyé
* value = valeur choisie
* selectOk = booléen True quand l'utilisateur click OK
*/
byte c, value = 0, selectOk = false;
/* Affiche un message */
Serial.println(F("Valeur ?"));
/* Boucle de traitement */
do {
/* Lit le bouton actuellement pressé */
c = getKey();
/* Vérifie qu'un est bien pressé */
if(c == BP_NONE)
continue; /* Si non, repars dans la boucle */
/* Si oui, gère le bouton en question */
switch(c) {
case BP_PLUS: /* Incrémente la valeur avec un test du maximum à ne pas dépasser */
selectOk = false;
if(++value == VALUE_MAX)
--value;
break;
case BP_MINUS: /* Décrémente la valeur, avec un minimum à ne pas dépasser */
selectOk = false;
if(value > VALUE_MIN)
--value;
break;
case BP_SELECT: /* Bouton OK */
selectOk = true;
break;
}
/* Affiche la valeur actuelle */
Serial.println(value);
} while(!selectOk); /* Boucle tant que l'utilisateur n'as pas clické OK */
/* Retourne la valeur choisie */
return value;
}
Il te reste à faire :
une fonction getKey() qui retourne BP_NONE (pas de bouton appuyé), BP_PLUS, BP_MINUS ou BP_SELECT (-> enum)
remplacer l'affichage sur le port série par un affichage sur ton écran