Ceci est une ancienne révision du document !
#include <TimerOne.h> unsigned char col[8]={2,3,4,5,6,7,8,9}; // pins for columns unsigned char row[8]={10,11,12,13,14,15,16,17}; // pins for rows unsigned char refreshRow=0; // set index unsigned char lastRefreshRow=7; // for the refresh unsigned int scrollIndex=0; // render starting column in bigMatrix bool matrix [8] [8]; // image of the screen bool bigMatrix [112] [8]; // image of complete message // character set unsigned char carSp[8]={0,0,0,0,0,0,0,0}; // Space unsigned char carEx[8]={24,24,24,24,24,0,24,0}; // ! unsigned char carH[8]={102,102,102,126,102,102,102,0}; // H unsigned char care[8]={0,0,60,102,126,96,60,0}; // e unsigned char carl[8]={56,24,24,24,24,24,60,0}; // l unsigned char caro[8]={0,0,60,102,102,102,60,0}; // o unsigned char carw[8]={0,0,198,214,214,254,108,0}; // w unsigned char carr[8]={0,0,216,108,96,96,240,0}; // r unsigned char card[8]={28,12,124,204,204,204,118,0}; // d unsigned char carF[8]={254,98,104,120,104,96,120,0}; // F unsigned char cara[8]={0,0,120,12,124,204,118,0}; // a unsigned char carb[8]={224,224,124,102,102,102,188,0}; // b unsigned char car5[8]={126,98,96,60,12,108,60,0}; // 5 // fablab_web_5 void setup() { Timer1.initialize(2500); // initialize the timer to refresh the screen (in microsecond) test_matrix(10); // do a matrix led test // write message " Hello world !" in BigMatrix table char2BigMatrix(carSp,0); // [Space] char2BigMatrix(carF,8); // F char2BigMatrix(cara,16); // a char2BigMatrix(carb,24); // b char2BigMatrix(carl,32); // l char2BigMatrix(cara,40); // a char2BigMatrix(carb,48); //b char2BigMatrix(carSp,56); // [Space] char2BigMatrix(carw,64); // w char2BigMatrix(care,72); // e char2BigMatrix(carb,80); // b char2BigMatrix(carSp,88); // [Space] char2BigMatrix(car5,96); // 5 char2BigMatrix(carEx,104); // !( Timer1.attachInterrupt(refresh_matrix); // rely interruption to refresh_matrix function and start the timer } void loop() { // put your main code here, to run repeatedly: bigMatrice2matrice(scrollIndex); // take 8 columns of bigMatrix and send them to matrix scrollIndex+=1; // shift one column for next call if(scrollIndex>111){ // if end of big matrix reached scrollIndex=0; // return to start } delay(100); // delay in ms between one column scrolling } void init_matrix(){ // set power for each rows and columns for (int i=0;i<8;i++){ pinMode(col[i],OUTPUT); digitalWrite(col[i],HIGH); pinMode(row[i],OUTPUT); digitalWrite(row[i],LOW); } } void test_matrix(int lasting){ // light up each led alternatively init_matrix(); for (int y=0;y<8;y++){ digitalWrite(row[y],HIGH); for (int x=0;x<8;x++){ digitalWrite(col[x],LOW); delay(lasting); digitalWrite(col[x],HIGH); } digitalWrite(row[y],LOW); } } void char2BigMatrix(unsigned char character[8],unsigned char colInsert){ // insert a character in specified column of bigMatrix for(int x=colInsert;x<colInsert+8;x++){ for(int y=0;y<8;y++){ bigMatrix[x][y]=!(bitRead(character[y],7-(x-colInsert))); } } } void refresh_matrix(){ // draw matrix state on physical leds digitalWrite(row[lastRefreshRow],LOW); for (int i=0;i<8;i++){ digitalWrite(col[i],matrix[i][refreshRow]); } digitalWrite(row[refreshRow],HIGH); refreshRow++; if (refreshRow>7){ refreshRow=0; lastRefreshRow=7; }else{ lastRefreshRow=refreshRow-1; } } void bigMatrice2matrice(unsigned int colStart){ // copy part of bigMatrix to matrix for(int x=0;x<8;x++){ for(int y=0;y<8;y++){ if (x+colStart>111){ colStart=-x; } matrix[x][y]=bigMatrix[x+colStart][y]; } } }
lien : http://www.blogule.net/index.php/2016/01/30/scrolling-sur-matrice-a-led/