Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
21 mai 2012 1 21 /05 /mai /2012 11:56

Juste pour donner une idée de comment l'allumage des LED est fait en fonction de l'heure, voici le code de calcul de la matrice (avec le cadrant V3):

 

//matrice calculée. Chaque byte est une ligne de la matrice.

//Chaque bit est une LED de la ligne.

byte row[8];

 

/*

* calcul de la matrice h: heures, m:minutes, s:secondes (inutilisé)

*/

void calcMatrix(byte h, byte m, byte s){
  boolean cha=false;
  for(byte r=0;r<8;r++){
     row[r]=0;
  }
 
  //dian (heure)
  if(!(m==0 && (h==0 || h==12))){
    row[2] |= B00001000;  
  }  
 
  //cha (moins)
  if(m==45 || m==50 || m==55){
    row[2] |= B00000001;
    h++;
    if(h==24){
        h=0;
    }        
    cha=true;
  }

  //yeli (la nuit)
  if(h>=1 && h < 5){
    row[0] |= B00000011;
  }
 
  //zaoshang (tôt le matin)
  if(h>=5 && h < 8){
    row[0] |= B10100000;
  }
  //shangwu (tard le matin)
if(h>=8 && h <= 11){
    row[0] |= B00100100;
  }  
  //zhongwu (midi)
  if(h>=12 && h<14){
    row[0] |= B00001100;
  }    
  //xiawu (après-midi)
  if(h>=14 && h<18){
    row[0] |= B00010100;
  }
  //wanshang (soir)
  if(h>18){
    row[0] |= B01100000;
  }
  //wuye (minuit)
  if(h==0){
    row[0] |= B00000110;
  }
  //10h
  if((h>=10 && h < 12) ||(h>=22)){
    row[1] |= B01000000;
  }
  //0h
  if(h==0){
    row[1] |= B10000000;
  }
  //1h
  if(h==1 || h==11 | h==13 || h == 23){
    row[1] |= B00010000;
  }
  //2h
  if(h==2 || h==14){
    row[1] |= B00001000;
  }
   //3h
  if(h==3 || h==15){
    row[1] |= B00000100;
  }
  //4h
  if(h==4 || h==16){
    row[1] |= B00000010;
  }
  //5h
  if(h==5 || h==17){
    row[1] |= B00000001;
  }
  //6h
  if(h==6 || h==18){
    row[2] |= B10000000;
  }
  //7h
  if(h==7 || h==19){
    row[2] |= B01000000;
  }
  //8h
  if(h==8 || h==20){
    row[2] |= B00100000;
  }
  //9h
  if(h==9 || h==21){
    row[2] |= B00010000;
  }
 
  //zhong (heure pile)
  if(m==0 && h!=0 && h!=12){
    row[2] |= B00000100;
  }
  //ban (demi-heure)
  if(m == 30){
    row[2] |= B00000010;
  }
 
  //minutes

  //shi (dizaines de minutes)
  if((m>=10 && m!=15 && m!=45 && m!=30 && m!=50 && m!=55) || (m==50 && cha)){
   row[3] |= B00000010;
  }
  //d1
  if(m==45 || m==15){
    row[3] |= B10000000;
  }
  //d2
  if(m>=20 && m<30){
    row[3] |= B01000000;
  }
  //d3
  if(m>=30 && m<40 && m!=30){
    row[3] |= B00100000;
  }  
  //d4
  if(m>=40 &&  m!=45 && m<50){
    row[3] |= B00001000;
  }
  //d5
  if(m>50 && m != 55){
    row[3] |= B00000100;
  }
 
  //ke (quart d'heure)
  if(m==15 || m==45){
    row[3] |= B00010000;
  }
  //1
  if(m%10 == 1){
    row[3] |= B00000001;
  }
  //2
  if(m%10 == 2){
    row[4] |= B10000000;
  }
  //3
  if(m%10 == 3){
    row[4] |= B01000000;
  }
  //4
  if(m%10 == 4 && m!=45){
    row[4] |= B00100000;
  }
  //5
  if((m%10 == 5 && m!=15 && m!=45 && m!=55) ||(m==55 && cha)){
    row[4] |= B00010000;
  }
  //6
  if(m%10 == 6){
    row[4] |= B00001000;
  }
  //7
  if(m%10 == 7){
    row[4] |= B00000100;
  }
  //8
  if(m%10 == 8){
    row[4] |= B00000010;
  }
  //9
  if(m%10 == 9){
    row[4] |= B00000001;
  }  
}

Partager cet article
Repost0

commentaires