Programme capteur d'humidité

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

Merci de votre aide.

On commence par le début.....

Pas dans la bonne rubrique, donc déplacé......

Et de nouveau le code pas entre les balises de code....

:sleeping:

#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);
    }
  }
}

Bonjour,

Ces deux #include tout en haut du fichier n'ont rien à faire là, ils sont déjà quelques lignes plus bas :

#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>

@Jean-Francois : ya un doublon ici :
http://arduino.cc/forum/index.php/topic,163249.0.html#new

... ralala c'est nouveaux membres :grin:

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

Je ne sait pas si ça te sera utile mais moi je fait mes "menu" avec des boucles :

(regarde la fonction chooseDelay() ligne 184 si tu veut un exemple)

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?

Le code il faut le mettre entre les balises code avec le bouton #

Merci d'éditer les messages concerné....

Excusez-moi vous voulez dire quoi par éditer ?

Avec l'option "modify" réouvrir le message et le modifier.

Juste avec vous une idée pour mon problème du coup ? Un moyen de demander à l'utilisateur d'afficher une certaine valeur avec les boutons ?
Merci

Merci pour la forme de politesse en me vouvoyant.... ça ne change pas le fait que le message Nº3 est toujours avec un code hors balise....

Merci de l'éditer !!

XD

Re, voilà j'espère l'avoir modifié comme attendu.

Merci :wink:

Pas de réponse pour ma question ? ....

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 ...

Mhh bah des valeurs entières je pense.

Xaras:
Mhh bah des valeurs entières je pense.

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
  • définir VALUE_MIN et VALUE_MAX (-> const)