Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



[ Résolut ] Problème de code pour shield lcd + arduino


 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions
Sujet précédent :: Sujet suivant  
Auteur Message
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Dim 6 Avr - 21:24 (2014)    Sujet du message: [ Résolut ] Problème de code pour shield lcd + arduino Répondre en citant

PublicitéSupprimer les publicités ?
Bonjour a tous.

Je me suis lancer a faire ( une bombe factice ) avec écrand LCD et arduino )

Voici les composants:

Écran LCD KeyPad Shield For Arduino SKU: DFR0009 voici un lien sur sa fiche:
http://www.dfrobot.com/wiki/index.php/LCD_KeyPad_Shield_For_Arduino_SKU:_DF…

Et l'arduino duemilanove:

voici ma programmation:


 
Code:

 /*--------------------------------------------------------------------------------------
 Includes
 --------------------------------------------------------------------------------------*/
#include <Wire.h>
#include <LiquidCrystal.h>

/*--------------------------------------------------------------------------------------
 Defines
 --------------------------------------------------------------------------------------*/
// Pins utilisé
#define BUTTON_ADC_PIN           A0  // A0 est l'entrée bouton ADC
#define LCD_BACKLIGHT_PIN         3  // D3 contrôle LCD rétro backlight
// Lectures ADC attendus pour les 5 boutons sur l'entrée ADC
#define RIGHT_10BIT_ADC           0  // droit
#define UP_10BIT_ADC            145  // jusqu'à
#define DOWN_10BIT_ADC          329  // vers le bas
#define LEFT_10BIT_ADC          505  // gauche
#define SELECT_10BIT_ADC        741  // droit
#define BUTTONHYSTERESIS         10  // fenêtre bouton de détection valide
//renvoyer des valeurs pour ReadButtons()
#define BUTTON_NONE               0  // 
#define BUTTON_RIGHT              1  // 
#define BUTTON_UP                 2  // 
#define BUTTON_DOWN               3  // 
#define BUTTON_LEFT               4  // 
#define BUTTON_SELECT             5  // 

// Define our states
#define STATE_TITLE               00  // Un écran de titre
#define STATE_KEYWAIT             05  // En attente d'une pression de touche
#define STATE_GAMESTART           20  // Le jeu commence
#define STATE_TURNSTART           30
#define STATE_INPUTNUMBER         40

// Misc. Defines
#define MSGFLASHDELAY           1000  // Combien de temps à clignoter messages pour (ms)?

/*--------------------------------------------------------------------------------------
 Variables
 --------------------------------------------------------------------------------------*/
byte buttonJustPressed  = false;         //ce sera vrai après ReadButtons () appeler si elle est déclenchée
byte buttonJustReleased = false;         //ce sera vrai après ReadButtons () appeler si elle est déclenchée
byte buttonWas          = BUTTON_NONE;   //utilisée par ReadButtons () pour la détection d'événements de bouton

// Configuration des variables qui seront utilisées
byte state, nextstate;
byte timer, inputpos, flash;
boolean update;
byte bombpos[6], pos[6], signal[6];
byte ipos[6] = {4,5, 11,12, 14,15 };
int tmp;
unsigned long flashtime;

/*--------------------------------------------------------------------------------------
 Init la bibliothèque LCD avec les broches LCD à utiliser
 --------------------------------------------------------------------------------------*/
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);   //Pins pour le bouclier freetronics 16x2 LCD. LCD: ( RS, E, LCD-D4, LCD-D5, LCD-D6, LCD-D7 )

/*--------------------------------------------------------------------------------------
 setup()
 Appelé par l'infrastructure 1 fois, avant le début de la boucle principale
 --------------------------------------------------------------------------------------*/
void setup() {
  // Setup pins. 
  pinMode(BUTTON_ADC_PIN, INPUT );         // Entrée analogique pour les boutons de l'écran LCD
  digitalWrite(BUTTON_ADC_PIN, LOW );
  pinMode(LCD_BACKLIGHT_PIN, OUTPUT );     // contrôle du rétroéclairage (off/on)
  digitalWrite(LCD_BACKLIGHT_PIN, HIGH );  // Tournez le rétro-éclairage on
  randomSeed(analogRead(1));               // Envoyer le générateur de nombres aléatoires

  lcd.begin( 16, 2 );                      //bibliothèque LCD affichage 16x2
  lcd.setCursor( 0, 0 );
  //          1234567890123456
  lcd.print( "-_D E F U S E _-" );
  lcd.setCursor( 0, 1 );
  lcd.print( '.' );
  lcd.print(  '.' );   
  flashbacklight();
  lcd.print(   '.' );  
  flashbacklight();
  lcd.print(    '.' ); 
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  lcd.print(    '.' );
  flashbacklight();
  state = STATE_TITLE;  
}


/*--------------------------------------------------------------------------------------
 loop()
 Arduino main loop
 --------------------------------------------------------------------------------------*/
void loop() {
  byte button;

  button = ReadButtons();
  switch(state) {                  // Faire des choses différentes en fonction de "l'état"

  case STATE_TITLE:
    lcd.setCursor( 0, 0 );
    //          1234567890123456
    lcd.print( "= D E F U S E  =");
    lcd.setCursor( 0, 1 );
    lcd.print( "Press[touche]key" );
    nextstate = STATE_GAMESTART;
    state = STATE_KEYWAIT;
    break;

  case STATE_KEYWAIT:
    if(buttonJustPressed) state = nextstate;
    break;

  case STATE_GAMESTART:
    //Init afin de signal
    for(int i = 0; i < 6; i++) signal[i] = i;

    //Afin de signal aléatoire
    for(int cnt = 0; cnt < 500; cnt++) {
      int pos1 = random(6);
      int pos2 = random(6);
      tmp = signal[pos1];
      signal[pos1] = signal[pos2];
      signal[pos2] = tmp;
    }
    //Choisissez une position à la bombe. Il ne peut être 00,00,00
    do {
      tmp = 0;
      for(int i = 0; i < 6; i++) {
        pos[i] = 0;
        bombpos[i] = random(9);
        tmp += bombpos[i];
      }
    }
    while(tmp == 0);
    timer = 300;
    lcd.clear();
    //         1234567890123456
    lcd.print("Trouver la bombe"); 
    lcd.setCursor(0,1);
    lcd.print("il y a des");
    delay(MSGFLASHDELAY); 
    lcd.setCursor(0,0);
    lcd.print("detecteur,Il ya "); 
    lcd.setCursor(0,1);
    lcd.print("1 million piece ");
    delay(MSGFLASHDELAY); 
    lcd.setCursor(0,0);
    lcd.print("Alors comment  ");
    lcd.setCursor(0,1);
    lcd.print("Sa marche?      ");
    delay(MSGFLASHDELAY); 
    state = STATE_TURNSTART;
    //tombe à travers

  case STATE_TURNSTART:
    //         1234567890123456
    //         SSSSSSsig  t:TTT
    //         Flr:YY  Rm:XX.ZZ
    if(timer == 0) {
      flashbacklight();
      lcd.setCursor(0,0);
      lcd.print("B O O O O O O "); 
      lcd.setCursor(0,1);
      lcd.print(" O O O O O OM!");
      delay(MSGFLASHDELAY); 
      lcd.clear();
      lcd.print("Les bombes etait"); 
      lcd.setCursor(0,1);
      lcd.print("Flr:"); 
      lcd.print(bombpos[0]); 
      lcd.print(bombpos[1]);
      lcd.print("Rm:"); 
      lcd.print(bombpos[2]); 
      lcd.print(bombpos[3]);
      lcd.print("."); 
      lcd.print(bombpos[4]); 
      lcd.print(bombpos[5]);
      nextstate = STATE_TITLE;
      state = STATE_KEYWAIT;
      break;
    }
    timer -= 10;
    lcd.clear();
    for(int i = 0; i < 6; i++) {
      lcd.print(9 - abs((int)bombpos[signal[i]] - (int)pos[signal[i]]));
    }
    lcd.print(" sig  t: ");
    if(timer<100) lcd.print("0");
    lcd.print(timer);
    lcd.setCursor(0,1);
    lcd.print("Flr:YY  Rm:XX.ZZ ");
    for(int i = 0; i < 6; i++) {
      lcd.setCursor(ipos[i],2);
      lcd.print(pos[i]);
    }
    inputpos = 0;
    flashtime = millis() + 750; 
    flash = 1;
    state = STATE_INPUTNUMBER;
    //tombe à travers

  case STATE_INPUTNUMBER:
    update = false;
    if(millis() >= flashtime) {
      flashtime = millis() + (750 - (500 * flash));      
      flash = 1 - flash;
      update = true;
    }
    if(buttonJustPressed) {
      switch(button) {
      case BUTTON_LEFT:
        lcd.setCursor(ipos[inputpos],1);
        lcd.print(pos[inputpos]);
        if(inputpos == 0) inputpos = 5;
        else inputpos--;
        update = true;
        break;

      case BUTTON_RIGHT:
        lcd.setCursor(ipos[inputpos],1);
        lcd.print(pos[inputpos]);
        if(inputpos == 5) inputpos = 0;
        else inputpos++;
        update = true;
        break;

      case BUTTON_DOWN:
        if(pos[inputpos] == 0) pos[inputpos] = 9; 
        else pos[inputpos]--;
        update = true;
        break;

      case BUTTON_UP:
        if(pos[inputpos] == 9) pos[inputpos] = 0; 
        else pos[inputpos]++;
        update = true;
        break;

      case BUTTON_SELECT:
        lcd.clear();
        if(bombpos[0] == pos[0] && bombpos[1] == pos[1] && bombpos[2] == pos[2] &&
        bombpos[3] == pos[3] && bombpos[4] == pos[4] && bombpos[5] == pos[5]) {
          //         1234567890123456
          lcd.print("Bombe desactive"); lcd.setCursor(0,1);
          lcd.print("Vous etes un heros!");
          nextstate = STATE_TITLE;
          state = STATE_KEYWAIT;
        } else {
          lcd.print("Numerisation");
          delay(MSGFLASHDELAY/2);
          lcd.print(".");
          delay(MSGFLASHDELAY/3);
          lcd.print(".");
          delay(MSGFLASHDELAY/4);
          lcd.print(".");
          delay(MSGFLASHDELAY/5);
          lcd.print(".");
          delay(MSGFLASHDELAY/6);
          state = STATE_TURNSTART;
        }
        update = false;
        break;
      }
    }
    if(update == true) {
      lcd.setCursor(ipos[inputpos],1);
      if(flash == 0) lcd.print("_");
      else lcd.print(pos[inputpos]);
    }
    break;

  default: 
    break;
  }
  //effacer les drapeaux buttonJustPressed & buttonJustReleased; ils ont déjà fait leur travail
  if(buttonJustPressed)  buttonJustPressed  = false;
  if(buttonJustReleased) buttonJustReleased = false;
  delay(25); //Retard pour arrêter les boutons "sautillement" faux presses. Pas aussi bien comme un véritable anti-rebond.
}

void flashbacklight() {
  digitalWrite(LCD_BACKLIGHT_PIN, LOW);  
  delay(150);
  digitalWrite(LCD_BACKLIGHT_PIN, HIGH); 
  delay(150);
}

/*--------------------------------------------------------------------------------------
 ReadButtons()
 Détecter le bouton enfoncé et retourner la valeur
  Utilise les valeurs mondiales buttonWas, buttonJustPressed, buttonJustReleased.
 --------------------------------------------------------------------------------------*/
byte ReadButtons() {
  unsigned int buttonVoltage;
  byte button = BUTTON_NONE;   // retourner aucun bouton pressé si les contrôles ci-dessous n'écrivent pas btn

  //lire la tension de la broche bouton ADC
  buttonVoltage = analogRead( BUTTON_ADC_PIN );
  //sens que si la tension tombe dans les fenêtres de tension valides
  if( buttonVoltage < ( RIGHT_10BIT_ADC + BUTTONHYSTERESIS ) )
  {
    button = BUTTON_RIGHT;
  }
  else if(   buttonVoltage >= ( UP_10BIT_ADC - BUTTONHYSTERESIS )
    && buttonVoltage <= ( UP_10BIT_ADC + BUTTONHYSTERESIS ) )
  {
    button = BUTTON_UP;
  }
  else if(   buttonVoltage >= ( DOWN_10BIT_ADC - BUTTONHYSTERESIS )
    && buttonVoltage <= ( DOWN_10BIT_ADC + BUTTONHYSTERESIS ) )
  {
    button = BUTTON_DOWN;
  }
  else if(   buttonVoltage >= ( LEFT_10BIT_ADC - BUTTONHYSTERESIS )
    && buttonVoltage <= ( LEFT_10BIT_ADC + BUTTONHYSTERESIS ) )
  {
    button = BUTTON_LEFT;
  }
  else if(   buttonVoltage >= ( SELECT_10BIT_ADC - BUTTONHYSTERESIS )
    && buttonVoltage <= ( SELECT_10BIT_ADC + BUTTONHYSTERESIS ) )
  {
    button = BUTTON_SELECT;
  }
  //gérer drapeaux touche des événements juste pressés et vient de sortir
  if( ( buttonWas == BUTTON_NONE ) && ( button != BUTTON_NONE ) )
  {
    //le bouton a été pressé, mettre buttonJustPressed, ce qui peut éventuellement être utilisé pour déclencher une action ponctuel pour appuyer sur un bouton veille
    //il est du devoir du récepteur pour effacer ces drapeaux si elle veut détecter un nouvel événement de changement de bouton
    buttonJustPressed  = true;
    buttonJustReleased = false;
  }
  if( ( buttonWas != BUTTON_NONE ) && ( button == BUTTON_NONE ) )
  {
    buttonJustPressed  = false;
    buttonJustReleased = true;
  }

  //sauver la dernière valeur de bouton, pour la détection d'événements de modification fois suivante
  buttonWas = button;

  return( button );
}

Voici mon souci le code fonctionne très bien , mais le problème des que je veux entré

un chiffre a laide du clavier intégré de mon lcd le curseur se mais a clignoté avec un

symbole bizarre , alors que sa dois clignoté  avec se tiré ( _ ) <-- tirai du 8 sur le clavier

Voici le symbole bizarre:


Donc a votre avis , soi c'est un problème dans ma programmation ou de shield , ou alimentation ( car je suis brancher en 5V avec le câble USB qui alimente l'Arduino )


Dernière édition par seb03000 le Lun 7 Avr - 22:54 (2014); édité 1 fois
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Lun 7 Avr - 11:15 (2014)    Sujet du message: [ Résolut ] Problème de code pour shield lcd + arduino Répondre en citant

Ok donc les autres caractères sont normaux ??
Je demande car ça ressemble un peu à du charabia bugé on dirait  Very Happy
Ah mon avis, le caractère n'existe pas, c'est pas un problème de branchements je pense.
Une des solutions serait de créer toi même le caractères grâce à cette fonction:
____________________________
http://simple-duino.com
Revenir en haut
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Lun 7 Avr - 11:24 (2014)    Sujet du message: [ Résolut ] Problème de code pour shield lcd + arduino Répondre en citant

En faite cela dois faire comme se si sur la vidéo:

 

lui quand il choisi c'est chiffre il peut le curseur clignote normalement.

Moi mon curseur clignote avec un symbole bizarre , et donc a la place des chiffre j'ai se symbole
Revenir en haut
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Lun 7 Avr - 22:53 (2014)    Sujet du message: [ Résolut ] Problème de code pour shield lcd + arduino Répondre en citant

Problème résolut, il fallait télécharger une des version IDE Arduino 1.0.5 et sa fonctionne.

Moi j'été en version IDE Arduino 0023.

Voilà.
  
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 09:05 (2017)    Sujet du message: [ Résolut ] Problème de code pour shield lcd + arduino

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino