IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

[UNO] Mon croquis ne démarre pas ?


Sujet :

Arduino

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    985
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 985
    Par défaut [UNO] Mon croquis ne démarre pas ?
    Bonjour à tous ,

    Mon problème du jour est le suivant :

    Je teste un petit de jeu fait à partir :
    - Arduino UNO
    - OLED 128x64 de type SSD1306 I2C ( A5 et A4 )
    - Un bouton poussoir (D6)

    que l'on va appeler PROGA
    1) si je téléverse ce programme celui ne démarre pas, l’écran reste éteint

    2) si je téléverse un autre programme totalement différent appelé PROGB avec les mêmes raccordements
    ce dernier démarre normalement et l’écran s'affiche correctement

    3) si je téléverse à nouveau le PROGA celui-ci se compile et consent à fonctionner normalement

    4) si je coupe l'alimentation , je suis obligé de recommencer toute la procédure

    j'ai renouvelé l'opération des dizaines de fois, changer les UNO (3) , changer les écrans OLED
    j'ai toujours le même problème ..?

    Je soupçonne fortement le traitement des entrées I2C mais sans pourvoir en identifier la raison
    j'y ai aussi adjoint des résistances de 10k sur SDA et SCL
    c'est pourquoi en désespoir de cause je fais appel à vos conseils

    A toute fin utile
    le PROGA est issu de ce modèle :
    https://www.hackster.io/AlexIII/t-re...ex-game-2ed11f
    je joins l'ensemble du croquis du PROGA composé de quelques sous-croquis ....
    notamment celui-ci qui concerne le traitement de l'écran OLED

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    /*
     * Project name: T-rex-duino
     * Description: T-rex game from Chrome brower rewritten for Arduino
     * Project page: https://github.com/AlexIII/t-rex-duino
     * Author: github.com/AlexIII
     * E-mail: endoftheworld@bk.ru
     * License: MIT
    */ 
     
    #ifndef _SH1106_H_
    #define _SH1106_H_
     
    #define SH1106_I2C_SCL_CLOCK  800000UL
    #define SH1106_I2C_ADDR 0b01111000
    #define SH1106_COMMAND 0x00
    #define SH1106_DATA 0x40
     
    #define SH1106_COLS_USED 128
    #define SH1106_PAGES 8
     
    #ifndef LCD_SSD1306
      #define SH1106_COLS_TOTAL 130
    #else 
      #define SH1106_COLS_TOTAL SH1106_COLS_USED
    #endif
     
    template<class I2C_TYPE>
    class SH1106 {
      I2C_TYPE &i2c;
      const uint16_t screenBufferSize;
    public:
      enum AddressingMode {
        HorizontalAddressingMode = 0x00,
        VerticalAddressingMode = 0x01,
        PageAddressingMode = 0x02,
      };
      SH1106(I2C_TYPE &i2c, const uint16_t screenBufferSize): 
        i2c(i2c), screenBufferSize(screenBufferSize) {}
      void begin() {
        uint8_t col = 0;
        uint8_t page = 0;
      }
      void fillScreen(const uint8_t* buffer) {
        reinit();
        sendd(buffer, screenBufferSize);
      }
     
      void fillScreen(const uint8_t* buffer, const uint16_t size, const uint8_t stride = 0) { //stride is not supported
        reinit();
        sendd(buffer, size);
      }
     
      void setInverse(const bool v) {
        inverted = v;
        reinit();
      }
      //Only PageAddressingMode works for SH1106
      //Here we're emulating HorizontalAddressingMode programmatically
      void setAddressingMode(const AddressingMode addressingMode) {} 
     
    private:
      /* lcd control */
      void reinit() {
        i2c.deinit();
        i2c.init(SH1106_I2C_SCL_CLOCK);
        sendc(0xAF); //display on
        sendc(inverted? 0xA7 : 0xA6); //inversion
      }
     
      /* send bytes */
      void sendc(const uint8_t cmd) {
        i2c.start(SH1106_I2C_ADDR);
        i2c.write(SH1106_COMMAND);
        i2c.write(cmd);
        i2c.stop();
      }
      void sendc(const uint8_t cmd1, const uint8_t cmd2) {
        i2c.start(SH1106_I2C_ADDR);
        i2c.write(SH1106_COMMAND);
        i2c.write(cmd1);
        i2c.write(cmd2);
        i2c.stop();
      }
      void sendc(const uint8_t cmd1, const uint8_t cmd2, const uint8_t cmd3) {
        i2c.start(SH1106_I2C_ADDR);
        i2c.write(SH1106_COMMAND);
        i2c.write(cmd1);
        i2c.write(cmd2);
        i2c.write(cmd3);
        i2c.stop();
      }
      void sendd(const uint8_t* d, uint16_t sz) {  
        const uint8_t blackPx = inverted? 0xFF : 0;
        while(sz) {  //page cycle
          sendc(0xB0 + page); //set page address to i (0..7)
          sendc(0x00 + (col&0x0F)); //Sets 4 lower bits of column address 
          sendc(0x10 + (col>>4)); //Sets 4 higher bits of column address 
     
          i2c.start(SH1106_I2C_ADDR);
          i2c.write(SH1106_DATA);
          while(sz) { //column cycle
            i2c.write(*d++);
            --sz;
            if(++col >= SH1106_COLS_USED) {
              while(col++ < SH1106_COLS_TOTAL) i2c.write(blackPx);
              col = 0;
              break;
            }
          }
          i2c.stop();
     
          if(col == 0 && ++page >= SH1106_PAGES) page = 0;
        }     
      }
     
      uint8_t col = 0;
      uint8_t page = 0;
      bool inverted = false;
    };
     
     
    #endif
    Le PROGA se compile normalement avec quelques erreurs comme :
    In file included from ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\t-rex-duino.ino:105:0:
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h: In instantiation of 'void SH1106<I2C_TYPE>::fillScreen(const uint8_t*, uint16_t, uint8_t) [with I2C_TYPE = I2C; uint8_t = unsigned char; uint16_t = unsigned int]':
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\t-rex-duino.ino:201:93: required from here
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h:48:86: warning: unused parameter 'stride' [-Wunused-parameter]
    void fillScreen(const uint8_t* buffer, const uint16_t size, const uint8_t stride = 0) { //stride is not supported
    ^
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h: In instantiation of 'void SH1106<I2C_TYPE>::setAddressingMode(SH1106<I2C_TYPE>::AddressingMode) [with I2C_TYPE = I2C]':
    ..\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\t-rex-duino.ino:274:53: required from here
    ..\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h:59:47: warning: unused parameter 'addressingMode' [-Wunused-parameter]
    void setAddressingMode(const AddressingMode addressingMode) {}
    ^~~~~~~~~~~~~~
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h: In instantiation of 'void SH1106<I2C_TYPE>::begin() [with I2C_TYPE = I2C]':
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\t-rex-duino.ino:287:13: required from here
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h:40:13: warning: unused variable 'col' [-Wunused-variable]
    uint8_t col = 0;
    ^~~
    ...\T-Rex-duino - Clone Arduino du jeu\t-rex-duino-1.1\t-rex-duino\SH1106.h:41:13: warning: unused variable 'page' [-Wunused-variable]
    uint8_t page = 0;
    ^~~~
    Le croquis utilise 12872 octets (39%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
    Les variables globales utilisent 449 octets (21%) de mémoire dynamique, ce qui laisse 1599 octets pour les variables locales. Le maximum est de 2048 octets.

    en vous remerciant
    pascal
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Mon pc ne démarre pas après l'installation de Mandriva
    Par lylia SI dans le forum Mandriva / Mageia
    Réponses: 17
    Dernier message: 15/02/2008, 19h12
  2. Mon application ne démarre pas sur tomcat
    Par dzenakhra dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 12/12/2007, 16h48
  3. mon applet ne démarre pas sous ie
    Par Estats dans le forum Applets
    Réponses: 2
    Dernier message: 27/04/2007, 13h58
  4. Mon pc ne démarre pas
    Par roots_man dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 08/06/2006, 17h13
  5. [VS.Net 2005][ClickOnce] Mon application ne démarre pas
    Par Vonotar dans le forum Visual Studio
    Réponses: 3
    Dernier message: 07/12/2005, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo