animation de matrice led 'compliqué'

Salut

je suis encore sur mon projet avec les matrices leds
donc vu que j'affiche l'heure , la température et l'humidité, je me suis dit qu'il serais intéressant de placer une animation simple entre chaque information.

oui ca marche .. mais pourquoi faire simple quand je peux faire compliquer !

mon problème actuelle c'est que, par exemple, apres l'affichage de l'heure avec ce code :

...

      hora = hour();
      minuto = minute();
      unidadeHora = hora % 10;
      dezenaHora = hora / 10;
      unidadeMinuto = minuto % 10;
      dezenaMinuto = minuto / 10;

 for (int i = 0; i < 8; i++)  
  {
    lc.setRow(3,i,font1[dezenaHora][i]);
  }
delay(delayTime);

 for (int i = 0; i < 8; i++)  
  {
    lc.setRow(2,i,font1[unidadeHora][i]);
  }
delay(delayTime);

  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(1,i,font1[dezenaMinuto][i]);
  }
delay(delayTime);

  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(0,i,font1[unidadeMinuto][i]);
  }
delay(delayTime);
      }

...

la matrice s’éteint pour laisser place à l'animation :

...

for (int j = 0; j < 12; j++)
{
   for (int i = 0; i < 8; i++)  
  {
    lc.setRow(3,i,anim_1[j][i]);
  }
delay(delayTime2);

 for (int i = 0; i < 8; i++)  
  {
    lc.setRow(2,i,anim_1[j][i]);
  }
delay(delayTime2);

  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(1,i,anim_1[j][i]);
  }
delay(delayTime2);

  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(0,i,anim_1[j][i]);
  }
delay(delayTime2);
}
...

apres la fin l'animation, je passe à l'affichage de la température par exemple :

...
    dezenaTemp = temp / 100;
      unidadeTemp = (temp/10) % 10;
      centmTemp = temp % 10;


       for (int i = 0; i < 8; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime);
      
       for (int i = 0; i < 8; i++)  
        {
          lc.setRow(2,i,font2[unidadeTemp][i]);
        }
      delay(delayTime);
      
        for (int i = 0; i < 8; i++)  
        {
          lc.setRow(1,i,font2[centmTemp][i]);
        }
      delay(delayTime);
      
        for (int i = 0; i < 8; i++)  
        {
          lc.setRow(0,i,sp1[0][i]);
        }
      delay(delayTime);
...

j'aimerais bien que le début l’animation fusionne dans l'affichage de l'heure et que la température fusionne dans l’animation .. si vous voyez ce que je veux dire !!

possible ?

esloch:
possible ?

tout est possible... il faut avoir en mémoire les bitmaps des 2 "sources" et les fusionner avant d'afficher...

j'ai reussi apres 36 test .. avec une annimation simple .. mais le code est long :confused:

...

const byte anim_1 = B11111000;

...

//---------------

      hora = hour();
      minuto = minute();
      unidadeHora = hora % 10;
      dezenaHora = hora / 10;
      unidadeMinuto = minuto % 10;
      dezenaMinuto = minuto / 10;
      /////////
      temp = 10 * (sensor.readTemperature());
      dezenaTemp = temp / 100;
      unidadeTemp = (temp/10) % 10;
      centmTemp = temp % 10;
      ////////
      umid = 10 * (sensor.readHumidity());
      dezenaUmid = umid / 100;
      unidadeUmid = (umid/10) % 10;
      centmUmid = umid % 10;
      ////////
      for (int i = 1; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,0,anim_1);
      delay(delayTime2);

      //-0
      for (int i = 2; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,1,anim_1);
      delay(delayTime2);
      lc.setRow(3,0,font2[dezenaTemp][0]);
      delay(delayTime2);      

      //-1
      for (int i = 3; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,2,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 1; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
      
      //-2
            for (int i = 4; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,3,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 2; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
      
      //-3      
      for (int i = 5; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,4,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 3; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
           
      //-4         
      for (int i = 6; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,5,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 4; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
           
      //-5   
      for (int i = 7; i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,6,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 5; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
        
      //-6
      lc.setRow(3,8,font1[dezenaHora][8]);
      delay(delayTime2); 
      lc.setRow(3,7,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 6; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
                
      //-7
      lc.setRow(3,8,anim_1);
      delay(delayTime2);
      for (int i = 0; i < 7; i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
      
       
      
//---------------

....

enfin ... je le garde quand même ... il m'a brûlé la tête !!!

le code améliorer :

...
      //-----
      for (int j = 0; j < 10; j++) 
      {
      for (int i = (j+1); i < 8; i++)  
        {
          lc.setRow(3,i,font1[dezenaHora][i]);
        }
      delay(delayTime2);
      lc.setRow(3,j,anim_1);
      delay(delayTime2);
      for (int i = 0; i < (j-1); i++)  
        {
          lc.setRow(3,i,font2[dezenaTemp][i]);
        }
      delay(delayTime2);
      }
      //-------
...

mais j'utilise une animation basique, simple :

const byte anim_1 = B11111000;

marche 5/5