Rien ne s'affiche sur mon deuligne

Forum spécifique au shield Deuligne

Rien ne s'affiche sur mon deuligne

Message non lude Ard3x » Mar 18 Nov 2014 11:11

Bonjour, je suis en train d'essayer de faire marcher ce code sur mon deuligne :
Code: Tout sélectionner
 #include "Wire.h"
    #include <Deuligne.h>

    #define VITESSE_PAC 150
    #define VITESSE_FANT  2000
    #define MAXX  15
    #define MAXY  1

    // initialize the library with the numbers of the interface pins
    Deuligne lcd;

    // Charactère spécifique pacman
    byte pacman[8] = {
       B00000,
       B00000,
       B01110,
       B11011,
       B11100,
       B01110,
       B00000,
       B00000
    };

    // Charactère spécifique fantome
    byte fantome[8] = {
       B00000,
       B00000,
       B01110,
       B10101,
       B11111,
       B11111,
       B10101,
       B00000
    };

    // Tableau des points à manger
    byte points[MAXX+1][MAXY+1];

    int xpac=2; // Position de pacman en X (colone)
    int ypac=1; //position de pacmanen y (ligne)
    int xfant=15;// Position du fantome en X (colone)
    int yfant=0;// Position du fantome en Y (ligne)
    byte light=true; //Eclairage
    long keystruck=0; //dernier appui sur un bouton
    long poursuite=0; //dernier movement du fantome
    byte partieEnCours=true; // pour eviter de boucler sur la fin
    byte vide=false; // pour tester si tout est manger

    void bouge(int x,int y)  // fonction pour bouger pacman
    {
      int oldx=xpac;
      int oldy=ypac;
      if (((xpac+x)>=0)&((xpac+x)<=MAXX)) xpac=xpac+x; //Si pas sorti d'ecran, on change x
      if (((ypac+y)>=0)&((ypac+y)<=MAXY)) ypac=ypac+y;//Si pas sorti d'ecran, on change y
      lcd.setCursor(xpac,ypac); // On se place en nouvelle position
      lcd.write(0); // et on pose le caractere 0 (Pacman)
      lcd.setCursor(oldx,oldy); // On se place en ancienne position
      if ((xpac!=oldx)||(ypac!=oldy)) lcd.print(" "); // et on efface Pacman (s'il a bougé)
      points[xpac][ypac]=false; // mange le truc
      vide=true;
      for (int i=0; i<=MAXX; i=i+1)
        for (int j=0; j<=MAXY; j=j+1)
          if (points[i][j]) vide=false;
      if ((vide)&&(partieEnCours)) gagne();
    }

    void perdu()
    {
      lcd.setCursor(0, 0); // on se place au point 0,0 (1ere ligne, 1er caractere)
      lcd.print("***Game Over****"); // on écrit le début du texte de début
      lcd.setCursor(0, 1); // on se place au point 0,0 (1ere ligne, 1er caractere)
      lcd.print("**You Lost!!***"); // on écrit le début du texte de début
      partieEnCours=false;
    }

    void gagne()
    {
      lcd.setCursor(0, 0); // on se place au point 0,0 (1ere ligne, 1er caractere)
      lcd.print("***Game Over****"); // on écrit le début du texte de début
      lcd.setCursor(0, 1); // on se place au point 0,0 (1ere ligne, 1er caractere)
      lcd.print("***You Won!!***"); // on écrit le début du texte de début
      partieEnCours=false;
    }

    void poursuis()  // fonction pour bouger fantome
    {
      int oldx=xfant;
      int oldy=yfant;
      if (yfant<ypac) yfant=yfant+1;
        else if (yfant>ypac) yfant=yfant-1;
          else if (xfant<xpac) xfant=xfant+1;
            else if (xfant>xpac) xfant=xfant-1;
      lcd.setCursor(xfant,yfant); // On se place en nouvelle position
      lcd.write(1); // et on pose le caractere 0 (Fantome)
      lcd.setCursor(oldx,oldy); // On se place en ancienne position
      if ((oldx!=xfant)||(oldy!=yfant)) // et on efface Fantome (s'il a bougé)
        {
           if (points[oldx][oldy]) lcd.print("."); // remplacé par un point si pas mangé
           else lcd.print(" "); // remplacé par un espace si déja magé
        }
    }

    void setup() {
      Serial.begin(9600);
      Wire.begin(); // initialisation I2C (obligatoire)
      lcd.init(); // initialisation LCD (obligatoire)
      lcd.createChar(0, pacman); // creation du caractere pacman et affectation au numéro 0
      lcd.createChar(1, fantome); // creation du caractere de fantome et affectation au numéro 1
      lcd.backLight(true); // on allume le retro eclairage
      lcd.setCursor(0, 0); // on se place au point 0,0 (1ere ligne, 1er caractere)
      lcd.print("Pacman!"); // on écrit le début du texte de début
      delay (5000); // Splash screen
      for (int i=0; i<=MAXX; i=i+1)
        for (int j=0; j<=MAXY; j=j+1)
          points[i][j]=true; //initialisation du tableau des trucs à manger
      lcd.setCursor(0, 0); // on se place au point 0,0 (1ere ligne, 1er caractere)
      lcd.print("................"); // on descine les points
      lcd.setCursor(0, 1); // on se place au point 0,0 (2ieme ligne, 1er caractere)
      lcd.print("................"); // on écrit les points
      lcd.setCursor(xpac,ypac); // On se place en position de départ de pacman
      lcd.write(0); // et on pose le caractere 0 (Pacman)
      lcd.setCursor(xfant,yfant); // On se place en position de départ du fantome
      lcd.write(1); // et on pose le caractere 1 (fantome)
      poursuite=millis(); // On initialise le timer de poursuite (pour eviter un mouvement immédiat)
    }

    void loop() {
      int thisChar = Serial.read();
      switch (thisChar)
      {
        case 'r':
          lcd.scrollDisplayRight();
          break;
        case 'l':
          lcd.scrollDisplayLeft();
          break;
      }
      if ((thisChar>'a')&(thisChar<'z'))
      {
          lcd.setCursor(1,1);
          lcd.write(thisChar);
      }
      if (millis()-keystruck>VITESSE_PAC) // Si plus de 200ms depuis le dernier mouvement de joystick
      {
        int joy=lcd.get_key();
        switch (joy)
        {
          case -1:
            break;
          case 3:
            Serial.print("Pacman bouge à gauche.\n"); // envoi de controle sur liaison série
            Serial.print(keystruck);
            bouge(-1,0);// déplacement
            keystruck=millis(); // remise à zero du timer de mouvement
          break;
          case 0:
            Serial.print("Pacman bouge à droite\n");// envoi de controle sur liaison série
            bouge(1,0);// déplacement
            keystruck=millis(); // remise à zero du timer de mouvement
          break;
          case 1:
            Serial.print("Pacman bouge en haut\n");// envoi de controle sur liaison série
            bouge(0,-1);// déplacement
            keystruck=millis(); // remise à zero du timer de mouvement
          break;
          case 2:
            Serial.print("Pacman bouge en bas\n");
            bouge(0,1);// déplacement
            keystruck=millis(); // remise à zero du timer de mouvement
          break;
          case 4:
            Serial.print("centre\n");
            light=!light;  //On inverse le statut d'allumage
            lcd.backLight(light); // on applique
            keystruck=millis(); // remise à zero du timer de mouvement
          break;
          default:
            Serial.print(joy); //au cas ou...
            keystruck=millis(); // remise à zero du timer de mouvement
        };   
      };
      if (millis()-poursuite>VITESSE_FANT)
      {
        poursuis();
        poursuite=millis();
      }
      if ((xpac==xfant)&&(ypac==yfant)&&(partieEnCours))
        {
          perdu();
        }
    }


Après avoir compilé et téléversé, rien ne s'affiche, il n'y a que des carrées grisâtres sur la première ligne... Une solution ?
Merci
Ard3x
Ard3x
 
Messages: 4
Inscription: Mar 18 Nov 2014 11:09

Re: Rien ne s'affiche sur mon deuligne

Message non lude Laetitia » Mer 19 Nov 2014 11:19

Bonjour,

Avez-vous pensé à régler le contraste du LCD ? Ce réglage se fait via le potentiomètre "Contrast" situé à côté du bouton de reset.
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 291
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Re: Rien ne s'affiche sur mon deuligne

Message non lude Ard3x » Mer 19 Nov 2014 12:06

Bonjour, oui j'ai pensé à le régler mais je ne vois quand même rien. Juste les carrées sur la première ligne...
Ard3x
 
Messages: 4
Inscription: Mar 18 Nov 2014 11:09

Re: Rien ne s'affiche sur mon deuligne

Message non lude Laetitia » Jeu 20 Nov 2014 17:02

Bonjour,

J'ai testé le code sur un Deuligne neuf, aucun souci, le jeu se déroule bien comme prévu.
Avez-vous acheté le shield en kit à souder ou assemblé ? Vérifiez les soudures au niveau du connecteur 16 points du LCD : au niveau de l'écran lui-même ET au verso du PCB.
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 291
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Re: Rien ne s'affiche sur mon deuligne

Message non lude Ard3x » Jeu 20 Nov 2014 19:25

Je l'ai acheté assemblé...
Ard3x
 
Messages: 4
Inscription: Mar 18 Nov 2014 11:09

Re: Rien ne s'affiche sur mon deuligne

Message non lude Laetitia » Ven 21 Nov 2014 09:51

Bonjour,

Les shields assemblés sont normalement testés avant de quitter nos locaux, mais pouvez-vous vérifier les soudures au niveau du connecteur 16 points du LCD, au niveau de l'écran lui-même ET au verso du PCB ?
Et si vous avez un doute, éventuellement poster une photo nette du shield, soudures visibles ?
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 291
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Re: Rien ne s'affiche sur mon deuligne

Message non lude Ard3x » Ven 21 Nov 2014 10:12

J'ai bien vérifié tout est bon... Je pense que ça doit être une erreur stupide dans mon programme non ? Ou le logiciel ??
Ard3x
 
Messages: 4
Inscription: Mar 18 Nov 2014 11:09

Re: Rien ne s'affiche sur mon deuligne

Message non lude Laetitia » Lun 24 Nov 2014 11:05

Bonjour,

Comme précisé dans un précédent message, j'ai testé votre code sur un Deuligne neuf, aucun souci de notre côté. En ce qui concerne l'IDE Arduino, quelle version utilisez-vous ? Vous avez bien la dernière version de notre librairie à jour ?

Sans souci de ce côté-ci j'aurais tendance à opter pour un problème matériel, d'où mes questions à propos des soudures. Une ligne de carrés grisés me fait penser à un écran alimenté mais auquel on n'envoie pas de données...
Pouvez-vous essayer un autre sketch, par exemple "DemoJoy" dans les exemples fournis avec la librairie ?
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 291
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse


Retourner vers Deuligne

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité