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 :

La section de données dépasse l'espace disponible sur la carte


Sujet :

Arduino

  1. #1
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Par défaut La section de données dépasse l'espace disponible sur la carte
    Je suis en train de faire un petit jeu sur écran tactile depuis peu et je veux utiliser Arduino pour le faire. Mon code se compile sans problème, mais quand je le télécharge, j'obtiens une erreur comme celle montrée dans l'image, est-ce parce que j'ai trop de variables définies ?
    Est-ce que c'est parce que j'ai trop de variables définies ? Quelqu'un peut-il me dire comment le réparer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Arduino:1.8.12 (Windows 10), Carte de développement : "Arduino Uno"
     
    Le projet utilise 6336 octets, ce qui occupe (19%) de l'espace de stockage du programme. Le maximum est de 32256 octets. La section des données dépasse l'espace disponible sur la carte.
     
    Les variables globales utilisent 3046 octets, (148%) de la mémoire dynamique, laissant -998 octets pour les variables locales. Le maximum est de 2048 octets.
    Il n'y a pas assez de mémoire ; visitez l'URL suivante pour suivre les instructions permettant de réduire l'utilisation de la mémoire.
    http://www.arduino.cc/en/Guide/Troubleshooting#size
    Erreur lors de la compilation pour la carte de développement Arduino Uno.
     
    Activez dans Fichier -> Préférences
    Option "Afficher la sortie détaillée pendant la compilation".
    Ce rapport contiendra plus d'informations.

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 580
    Par défaut Compression ou dépression
    Bonjour,

    Les messages sont clairs, il y a 998 octets de variables globales en trop.

    L'éventail des solutions est large :
    • Economiser les variable -> voir le code pour être plus précis
    • Stocker ailleurs (PROMEM, carte SD etc.) -> voir le code pour être plus précis
    • Changer de microcontrôleur

    Salutations

  3. #3
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Par défaut
    Voici mon code
    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
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    unsigned int r_flag1 = 0;
    uint8_t   RecievedTemp1[30]       = {0};
     
    uint8_t   cout_i = 0;
    unsigned int quan_hang1 = 0;
    unsigned int quan_hang2 = 0;
    unsigned int quan_hang3 = 0;
    unsigned int quan_lie1 = 0;
    unsigned int quan_lie2 = 0;
    unsigned int quan_lie3 = 0;
    unsigned int quan_zuoxia = 0;
    unsigned int quan_youxia = 0;
     
     
    unsigned int cha_hang1 = 0;
    unsigned int cha_hang2 = 0;
    unsigned int cha_hang3 = 0;
    unsigned int cha_lie1 = 0;
    unsigned int cha_lie2 = 0;
    unsigned int cha_lie3 = 0;
    unsigned int cha_zuoxia = 0;
    unsigned int cha_youxia = 0;
    unsigned int cha[8]={0};
    void setup()
    {
       Serial.begin(115200);
       for(int i=3; i<=8; i++) 
       pinMode(i,OUTPUT);
    }
     
    void loop(){
     
      if(Serial.available() != 0)
      {
    //    for(cout_i = 0; cout_i < 30; cout_i ++)
    //    {
    //        //RecievedTemp1[cout_i] = Serial.readBytes(RecievedTemp1, 15);
    //        Serial.readBytes(RecievedTemp1, 20);
    //        //Serial.println(RecievedTemp1[cout_i]);
    //    }
        Serial.readBytes(RecievedTemp1, 20);
    //    for(cout_i = 0; cout_i < 19; cout_i ++)
    //    {
    //    Serial.println(RecievedTemp1[cout_i]);
    //    }
        switch(RecievedTemp1[13])
      {
      case 49:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang1++;
            quan_lie1++;
            quan_youxia++;
    //        quan[0]++;
    //        quan[3]++;
    //        quan[7]++;
            Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
                cha_hang1++;
                cha_lie1++;
                cha_youxia++;
    //        cha[0]++;
    //        cha[3]++;
    //        cha[7]++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET");
            }
     
            break;
      case 50:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang1++;
                quan_lie2++;
    //        quan[0]++;
    //        quan[4]++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             cha_hang1++;
               cha_lie2++;
    //        cha[0]++;
    //        cha[4]++;
               Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET");
            }
            break;
      case 51:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang1++;
                quan_lie3++;
                quan_zuoxia++;
    //        quan[0]++;
    //        quan[5]++;
    //        quan[6]++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             cha_hang1++;
               cha_lie3++;
                cha_zuoxia++;
    //        cha[0]++;
    //        cha[5]++;
    //        cha[6]++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET");
            }
            break;
      case 52:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang2++;
                quan_lie1++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             cha_hang2++;
               cha_lie1++;
               Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET");
            }
            break;
      case 53:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang2++;
                quan_lie2++;
                quan_zuoxia++;
                quan_youxia++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"x\"}>ET");
              r_flag1 = 0;
              cha_hang2++;
                cha_lie2++;
                cha_zuoxia++;
                cha_youxia++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET");
            }
            break;       
      case 54:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang2++;
                quan_lie3++;
    //        quan[1]++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             cha_hang2++;
               cha_lie3++;
               Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET");
            }
            break;       
      case 55:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang3++;
                quan_lie1++;
                quan_zuoxia++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             cha_hang3++;
               cha_lie1++;
                cha_zuoxia++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET");
            }
            break;        
      case 56:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang3++;
                quan_lie2++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             cha_hang3++;
               cha_lie2++;
               Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET");
            }
            break;       
      case 57:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"circle\"}>ET");
            r_flag1 = 1;
            quan_hang3++;
                quan_lie3++;
                quan_youxia++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET");
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"x\"}>ET");
             r_flag1 = 0;
             quan_hang3++;
               quan_lie3++;
                quan_youxia++;
                Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET");
            }
            break;
      }
      if((quan_hang1==3)||(cha_hang1==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif4\",\"visible\":true}>ET");
          }
          else if((quan_hang2==3)||(cha_hang2==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif5\",\"visible\":true}>ET");
          }
          else if((quan_hang3==3)||(cha_hang3==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif6\",\"visible\":true}>ET");
          }
          else if((quan_lie1==3)||(cha_lie1==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif7\",\"visible\":true}>ET");
          }
          else if((quan_lie2==3)||(cha_lie2==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif8\",\"visible\":true}>ET");
          }
          else if((quan_lie3==3)||(cha_lie3==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif9\",\"visible\":true}>ET");
          }
          else if((quan_zuoxia==3)||(cha_zuoxia==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif10\",\"visible\":true}>ET");
          }
          else if((quan_youxia==3)||(cha_youxia==3))
          {
                Serial.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif11\",\"visible\":true}>ET");
          }
      }
    }

  4. #4
    Membre expérimenté Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Par défaut
    Bonjour,

    J'ai du mal à comprendre où sont les 3046 octets.

    Tu peux déjà essayer de gagner un peu de place sur toutes les variables global unsigned int.
    En as-tu vraiment besoin d'un int ? Je te propos de les passer en unsigned char.


    Je te propose également de te passer toutes tes variables juste en dessous de "void loop();" ça devrait marcher toujours aussi bien.
    Tu en as pas besoin qu'elle soit globale.

    Supprime également t'on tableau cha qui semble inutile.

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 879
    Par défaut
    Ce sont sans doute toutes les chaînes des print.

    Il faut changer tous les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Serial.println("ST<…");
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Serial.println(F("ST<…"));
    pour mettre toutes ces chaînes en Flash

    ____

    Sinon concernant
    Citation Envoyé par cedd70 Voir le message
    Je te propose également de te passer toutes tes variables juste en dessous de "void loop();" ça devrait marcher toujours aussi bien.
    Tu en as pas besoin qu'elle soit globale.
    .
    Oui en général c’est bien de ne pas conserver en variables globales ce qui n’a pas besoin de l’être mais s’il en a besoin tout le temps (la loop ne fait que tourner), elles prendront de la RAM à l’exécution et le compilateur n’aura pas averti du souci mémoire… donc attention ⚠️

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 580
    Par défaut Réduire à feu doux
    Bonjour,

    Il y a seulement 81 octets déclarés et pas d'appel de bibliothèques (au moins dans le code communiqué). Je présume que c'est juste un test car ce programme ne communique qu'avec le terminal série (même s'il déclare, sans les utiliser, 6 pins en sortie).

    Mais il y a beaucoup de chaînes de caractères souvent redondantes. J'ai créé deux fonctions pour simplifier le code mais je n'ai pas testé le code modifié.

    Il reste beaucoup à faire :
    • Des changements de types de variables, indiquées dans le code, permettraient de simplifier les tests en les supprimant.
    • Le n° des image va de 2 à 10 pour un RecievedTemp1[13] (ReceivedTemp1 ?) allant de 49 à 57. Il est facile de faire une fonction similaire à ShowGif() en utilisant comme n° d'image RecievedTemp1[13]-47
    • Par ailleurs, hangX dépend de X=(RecievedTemp1[13]-45) / 3 et lieY de Y=(RecievedTemp1[13]-45) % 3 ce qui incite à l'usage d'un tableau. L'incrémentation de youxia dépend de RecievedTemp1[13] & 3 == 2 et zuoxia dépend de RecievedTemp1[13] & 7 > 2 et impair.

    Il est donc possible d'avoir un code très concis (mais peu adaptable).

    Code C++ : 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
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    unsigned int r_flag1 = 0;                        //   2
    uint8_t      RecievedTemp1[30] = {0};            //  30 -> 32
    uint8_t      cout_i     = 0;                     //   1 -> 33 - Pas dans le code transmis !
    unsigned int quan_hang1 = 0;                     //   2 -> 35
    unsigned int quan_hang2 = 0;                     //   2 -> 37
    unsigned int quan_hang3 = 0;                     //   2 -> 39
    unsigned int cha_hang1  = 0;                     //   2 -> 51
    unsigned int cha_hang2  = 0;                     //   2 -> 53
    unsigned int cha_hang3  = 0;                     //   2 -> 55
    unsigned int quan_lie1  = 0;                     //   2 -> 41
    unsigned int quan_lie2  = 0;                     //   2 -> 43
    unsigned int quan_lie3  = 0;                     //   2 -> 45
    unsigned int cha_lie1   = 0;                     //   2 -> 57
    unsigned int cha_lie2   = 0;                     //   2 -> 59
    unsigned int cha_lie3   = 0;                     //   2 -> 61
    unsigned int quan_zuoxia= 0;                     //   2 -> 47
    unsigned int quan_youxia= 0;                     //   2 -> 49 
    unsigned int cha_zuoxia = 0;                     //   2 -> 63
    unsigned int cha_youxia = 0;                     //   2 -> 65
    unsigned int cha[8]     = {0};                   //  16 -> 81 - Pas dans le code transmis !
     
    void ShowGif(unsigned int q, unsigned int c, uint8_t GifNbr) {
       if((q != 3) | (c != 3)) return;
       Serial.print("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif");
       Serial.print(GifNbr);
       Serial.println("\",\"visible\":true}>ET");
    }      
     
    void DoIt; {
       if(r_flag1) Serial.println("x\"}>ET"); else Serial.println("circle\"}>ET");        
       r_flag1 ^= 1;                                 // 0 ^ 1 = 1 et 1 ^ 1 = 0
    }
     
    void setup()
    {
       Serial.begin(115200);
       for(int i = 3; i <= 8; i++) pinMode(i, OUTPUT);
    }
     
    void loop(){
       if(Serial.available() == 0) return;           // Un delai pourrait être opportun
       Serial.readBytes(RecievedTemp1, 20);
       if(RecievedTemp1[14] != 2) return;            // Pas de changement. Un delai pourrait être opportun
       switch(RecievedTemp1[13]) {
          case 49:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"");
             if(r_flag1 == 0) {                      // Si hang1 était un tableau uint16_t hang1[2]
                quan_hang1++;                        // avec hang1[0]=quan_hang1 et hang1[1]=cha_hang1
                quan_lie1++;                         // Idem pour les autres quan et chan.
                quan_youxia++;                       // Alors les 7 lignes du test deviendraient :
             }                                       //    lie1  [r_flag1]++; 
             else {                                  //    hang1 [r_flag1]++;  
                cha_hang1++;                         //    youxia[r_flag1]++;
                cha_lie1++;
                cha_youxia++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET");
             break;
          case 50:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang1++;
                quan_lie2++;
             }
             else {
                cha_hang1++;
                cha_lie2++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET");
             break;
          case 51:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang1++;
                quan_lie3++;
                quan_zuoxia++;
             }
             else {
                cha_hang1++;
                cha_lie3++;
                cha_zuoxia++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET");
             break;
          case 52:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang2++;
                quan_lie1++;
             }
             else {
                cha_hang2++;
                cha_lie1++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET");
             break;
          case 53:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang2++;
                quan_lie2++;
                quan_zuoxia++;
                quan_youxia++;
             }
             else {
                cha_hang2++;
                cha_lie2++;
                cha_zuoxia++;
                cha_youxia++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET");
             break;       
          case 54:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang2++;
                quan_lie3++;
             }
             else {
                cha_hang2++;
                cha_lie3++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET");
             break;       
          case 55:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang3++;
                quan_lie1++;
                quan_zuoxia++;
             }
             else {
                cha_hang3++;
                cha_lie1++;
                cha_zuoxia++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET");
             break;        
          case 56:
             Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang3++;
                quan_lie2++;
             }
             else {
                cha_hang3++;
                cha_lie2++;
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET");
             break;       
          case 57:
             Serial.println("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"");
             if(r_flag1 == 0) {
                quan_hang3++;
                quan_lie3++;
                quan_youxia++;
             }
             else {
                quan_hang3++;                        // Pas chan_hang3 ?
                quan_lie3++;                         // Pas chan_lie3 ?
                quan_youxia++;                       // Pas chan_youxia ?
             }
             DoIt();
             Serial.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET");
             Show(
             break;
       }
       ShowGif(quan_hang1,  cha_hang1,   4);         // Pas la peine de vérifier si rien n'a changé (RecievedTemp1[14] != 2)
       ShowGif(quan_hang2,  cha_hang2,   5);         
       ShowGif(quan_hang3,  cha_hang3,   6);         
       ShowGif(quan_lie1,   cha_lie1,    7);         
       ShowGif(quan_lie2,   cha_lie2,    8);         
       ShowGif(quan_lie3,   cha_lie3,    9);         
       ShowGif(quan_zuoxia, cha_zuoxia, 10);         
       ShowGif(quan_youxia, cha_youxia, 11);  
    }
    Salutations

  7. #7
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 580
    Par défaut Zip
    Bonsoir,
    Compression de code à vérifier
    Code C++ : 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
    uint8_t  r_flag       = 0;                       
    uint8_t  Received[30] = {0};                     
    uint16_t hang[3, 2]   = {{0}};                   // ex. hang[2, 0] <=> quan_hang3
    uint16_t lie [3, 2]   = {{0}};                   // ex. lie [1, 1] <=> cha_lie2
    uint16_t youxia[2]    = {0};                     // ex. youxia[0]  <=> quan_youxia
    uint16_t zuoxia[2]    = {0};                     // ex. zuoxia[1]  <=> cha_zuoxia 
     
    void ShowGif(uint16_t a[2], uint8_t GifNbr) {
       if((a[0] != 3) | (a[1] != 3)) return;
       Serial.print("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif");
       Serial.print(GifNbr);
       Serial.println("\",\"visible\":true}>ET");
    }    
     
    void SetImg(uint8_t n){
       Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image");
       Serial.print(2 + n);
       if(r_flag) Serial.println("\",\"image\":\"x\"}>ET"); else Serial.println("\",\"image\":\"circle\"}>ET");        
       r_flag ^= 1;                                  // 0 ^ 1 = 1 et 1 ^ 1 = 0
       Serial.print("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button");
       Serial.print(1 + n);
       Serial.println("\",\"enable\":false}>ET");    // On pourrait gagner encore un peu de place avec
    }                                                // une chaîne globale "ST<{\"cmd_code\":\"set_"
     
    void setup()
    {
       Serial.begin(115200);
       for(int i = 3; i <= 8; i++) pinMode(i, OUTPUT);
    }
     
    void loop(){
       if(!Serial.available()) return;               // Un delai pourrait être opportun
       Serial.readBytes(Received, 20);
       if((Received[14] != 2) || (Received[13] < 49) || (Received[13] > 57)) return;    
       uint8_t n = Received[13] - 49;
       uint8_t ndiv3 = (n << 2 + n + 5) >> 4;        // division entière par 3 sans division
       uint8_t nmod3 = ndiv3 ? n-(n << (ndiv3-1)): n;// modulo 3 sans division 
       SetImg(n);
       lie [nmod3][r_flag]++;                        // nmod3 0..2 correspond aux indices 1..3
       hang[ndiv3][r_flag]++;                        // ndiv3 0..2 correspond aux indices 1..3
       if( n & 3 == 0) youxia[r_flag]++;             // 0, 4, 8 soit 49, 53 et 57
       if((n & 6 != 0) && (n & 1 == 0))              // 2, 4, 6 soit 51, 53 et 55
          zuoxia[r_flag]++;
       for(int8_t i = 2; i >= 0; --i) {      
          ShowGif(hang[i], 4 + i);         
          ShowGif(lie [i], 7 + i);         
       }
       ShowGif(zuoxia, 10);         
       ShowGif(youxia, 11);  
    }
    Salutations

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 879
    Par défaut Utiliser F() pour les affichages
    Rajoutez la macro F() pour les print - ca prend de la RAM et de la flash sinon.

  9. #9
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Par défaut
    Citation Envoyé par Jay M Voir le message
    Rajoutez la macro F() pour les print - ca prend de la RAM et de la flash sinon.
    Merci beaucoup pour votre réponse, fantastique, j'ai essayé cette méthode et ça a marché !

  10. #10
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonsoir,
    Compression de code à vérifier
    Code C++ : 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
    uint8_t  r_flag       = 0;                       
    uint8_t  Received[30] = {0};                     
    uint16_t hang[3, 2]   = {{0}};                   // ex. hang[2, 0] <=> quan_hang3
    uint16_t lie [3, 2]   = {{0}};                   // ex. lie [1, 1] <=> cha_lie2
    uint16_t youxia[2]    = {0};                     // ex. youxia[0]  <=> quan_youxia
    uint16_t zuoxia[2]    = {0};                     // ex. zuoxia[1]  <=> cha_zuoxia 
     
    void ShowGif(uint16_t a[2], uint8_t GifNbr) {
       if((a[0] != 3) | (a[1] != 3)) return;
       Serial.print("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif");
       Serial.print(GifNbr);
       Serial.println("\",\"visible\":true}>ET");
    }    
     
    void SetImg(uint8_t n){
       Serial.print("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image");
       Serial.print(2 + n);
       if(r_flag) Serial.println("\",\"image\":\"x\"}>ET"); else Serial.println("\",\"image\":\"circle\"}>ET");        
       r_flag ^= 1;                                  // 0 ^ 1 = 1 et 1 ^ 1 = 0
       Serial.print("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button");
       Serial.print(1 + n);
       Serial.println("\",\"enable\":false}>ET");    // On pourrait gagner encore un peu de place avec
    }                                                // une chaîne globale "ST<{\"cmd_code\":\"set_"
     
    void setup()
    {
       Serial.begin(115200);
       for(int i = 3; i <= 8; i++) pinMode(i, OUTPUT);
    }
     
    void loop(){
       if(!Serial.available()) return;               // Un delai pourrait être opportun
       Serial.readBytes(Received, 20);
       if((Received[14] != 2) || (Received[13] < 49) || (Received[13] > 57)) return;    
       uint8_t n = Received[13] - 49;
       uint8_t ndiv3 = (n << 2 + n + 5) >> 4;        // division entière par 3 sans division
       uint8_t nmod3 = ndiv3 ? n-(n << (ndiv3-1)): n;// modulo 3 sans division 
       SetImg(n);
       lie [nmod3][r_flag]++;                        // nmod3 0..2 correspond aux indices 1..3
       hang[ndiv3][r_flag]++;                        // ndiv3 0..2 correspond aux indices 1..3
       if( n & 3 == 0) youxia[r_flag]++;             // 0, 4, 8 soit 49, 53 et 57
       if((n & 6 != 0) && (n & 1 == 0))              // 2, 4, 6 soit 51, 53 et 55
          zuoxia[r_flag]++;
       for(int8_t i = 2; i >= 0; --i) {      
          ShowGif(hang[i], 4 + i);         
          ShowGif(lie [i], 7 + i);         
       }
       ShowGif(zuoxia, 10);         
       ShowGif(youxia, 11);  
    }
    Salutations
    Merci pour votre réponse ! Vous avez fait un travail fantastique ! Je vais essayer votre code tout de suite, s'il vous plaît attendez pour mes bonnes nouvelles !

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 879
    Par défaut
    et si vous voulez gagner un peu plus en mémoire SRAM, changez les Serial.println("...") en Serial.println(F("...."))
    (idem pour les Serial.print())

  12. #12
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Par défaut
    Oui, j'ai fait les changements que vous avez suggérés et j'ai réussi à télécharger sur ma carte, je posterai une démo plus tard.

  13. #13
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Par défaut
    Voici une démonstration vidéo de mon succès.

  14. #14
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 879
    Par défaut
    Bravo !!!

  15. #15
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 580
    Par défaut The End
    Félicitations.

    Et merci d'avoir pensé à clore cette discussion avec un point final démonstratif (c'est assez rare).

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008R2] Obtenir l'espace disponible des fichiers de données de toutes mes bds
    Par Invité dans le forum Administration
    Réponses: 9
    Dernier message: 06/08/2013, 18h12
  2. Espace disponible sur la pile
    Par JackTheHero dans le forum Débuter
    Réponses: 9
    Dernier message: 08/11/2010, 18h06
  3. Réponses: 7
    Dernier message: 22/06/2010, 15h15
  4. Tester l'espace disponible sur un lecteur reseau
    Par Celestis dans le forum Access
    Réponses: 20
    Dernier message: 03/05/2010, 11h51
  5. Problème d'espace disponible après suppression de données
    Par carjo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2006, 15h48

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