Hello,
Donc voila j'ai avancé, j'ai finalement codé ca en Hexa pour gérer une matrice de 16*16 avec 4 shift register en serie et le code est le suivant :
#include <TimerOne.h>
#include <stdio.h>
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
boolean myDebug = false;
uint16_t myMatrice[16] = {0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0040,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000};
void setup()
{
Serial.begin(9600) ;
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
myDebug = false;
Timer1.initialize(500);
Timer1.attachInterrupt(screenUpdate);
}
void loop()
{
if(myDebug){
screenUpdate();
delay(10000);
}
}
void screenUpdate()
{
uint16_t myRow = 0x0001;
for( uint16_t k = 0; k < 16; k++)
{
digitalWrite(latchPin, LOW);
if(myDebug){Serial.print("k : ");Serial.println(k);}
shiftIt(~myRow);
if(myDebug){Serial.print("shift 4 et 3 : ");Serial.println(~myRow,BIN);}
shiftIt(myMatrice[k]);
if(myDebug){
Serial.print("shift 2 et 1 : ");Serial.println(myMatrice[k],BIN);
delay(500);
}
digitalWrite(latchPin, HIGH);
myRow = myRow << 1;
}
}
void shiftIt(uint16_t dataOut)
{
// Shift out 8 bits LSB first, on rising edge of clock
boolean pinState;
//clear shift register read for sending data
digitalWrite(dataPin, LOW);
// for each bit in dataOut send out a bit
for (int i=0; i<16; i++)
{
//set clockPin to LOW prior to sending bit
digitalWrite(clockPin, LOW);
// if the value of DataOut and (logical AND) a bitmask are true, set pinState to 1 (HIGH)
if ( dataOut & (1<<i) )
{pinState = HIGH;}
else
{pinState = LOW;}
//sets dataPin to HIGH or LOW depending on pinState
digitalWrite(dataPin, pinState);
//send bit out on rising edge of clock
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, LOW);
}
//stop shifting
digitalWrite(clockPin, LOW);
}
void setMatrice1(int* myMat)
{
myMat[15] = 0x0000; //B 1100 0000 0000 0000
myMat[14] = 0x4000; //B 0100 0000 0000 0000
myMat[13] = 0x0000; //B 0000 0000 0000 0000
myMat[12] = 0x0000; //B 0000 0000 0000 0000
myMat[11] = 0x0000; //B 0000 0000 0000 0000
myMat[10] = 0x0000; //B 0000 0000 0000 0000
myMat[9] = 0x0000; //B 0000 0000 0000 0000
myMat[8] = 0x0000; //B 0000 0000 0000 0000
myMat[7] = 0xC000; //B 0000 0000 0000 0000
myMat[6] = 0x0000; //B 0000 0000 0000 0000
myMat[5] = 0x0000; //B 0000 0000 0000 0000
myMat[4] = 0x0000; //B 0000 0000 0000 0000
myMat[3] = 0x0000; //B 0000 0000 0000 0000
myMat[2] = 0x0000; //B 0000 0000 0000 0000
myMat[1] = 0x0000; //B 0000 0000 0000 0000
myMat[0] = 0x0000; //B 0000 0000 0000 0000
}
Par contre, étant débutant j'ai besoin d'aide sur les branchements.
EN sachant que ma matrice fait 11*10 led blanches.
Je dois brancher :
- des resistances sur le + des leds
- des transistors sur le - des leds pour gérer la luminosité
Je n'arrive pas à calculer tout ca, je me mélange avec tous les paramétres à prendre en compte, es-ce que quelqu'un peut m'aider.
Je suis en 5V mais :
1 - Tout est relié à une seule sortie de l'arduino qui est connecté à 4 shift register, donc je n'arrive pas à savoir le voltage et ampérage qui sort.
2 - Sur une matrice en multiplexage, je ne sais pas si je dois calculer ma resistance avec une led ou toute la ligne
3 - Pour les transistors même problème je ne sais pas quoi prendre.
Merci de votre aide
Francki