Voilà, ça fait quelques mois que j'ai ma Raspberry Pi B+ sous Raspbian. J'avais commandé un pack de composants chez Sunfounder pour bien démarrer et pouvoir m'amuser un peu, pack qui contenais notamment 2 registres 74HC595, mais je n'arrive pas à dompter la bête.
J'essaie simplement d'allumer 8 leds grâce à 1 seul registre pour le moment, dans l'ordre que je le veux (en vérité peu m'importe l'ordre, le principe étant de savoir contrôler les leds indépendamment).
Après pas mal de recherche et d'essais, aucun n'ont abouti. Le meilleur résultat que j'ai su obtenir (et encore, c'est en reprenant le code et le schéma qui étaient présent dans le pack acheté, donc aucun mérite lol) est un clignotement de groupes de leds alors qu'elles sont censées clignoter chacune tour à tour.
Etant débutant, je ne sais pas si j'ai fait une erreur dans le montage, ou si le code n'est pas celui promis dans les vidéos de démonstration.
J'ai donc refait un schéma reprenant mon montage :

Et voici le code en C correspondant :
Code : Tout sélectionner
#include <wiringpi.h>
#include <stdio.h>
#define SDI 0 //serial data input
#define RCLK 1 //memory clock input(STCP)
#define SRCLK 2 //shift register clock input(SHCP)
unsigned char LED[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void pulse(int pin)
{
digitalWrite(pin, 0);
digitalWrite(pin, 1);
}
void SIPO(unsigned char byte)
{
int i;
for(i=0;i<8;i++){
digitalWrite(SDI, ((byte & (0x80 >> i)) > 0));
pulse(SRCLK);
}
}
void init(void)
{
pinMode(SDI, OUTPUT); //make P0 output
pinMode(RCLK, OUTPUT); //make P0 output
pinMode(SRCLK, OUTPUT); //make P0 output
digitalWrite(SDI, 0);
digitalWrite(RCLK, 0);
digitalWrite(SRCLK, 0);
}
int main(void)
{
int i;
if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
printf("setup wiringPi failed !");
return 1;
}
init();
while(1){
for(i=0;i<8;i++){
SIPO(LED[i]);
pulse(RCLK);
delay(150);
//printf("i = %d\n",i);
}
delay(500);
for(i=0;i<3;i++){
SIPO(0xff);
pulse(RCLK);
delay(100);
SIPO(0x00);
pulse(RCLK);
delay(100);
}
delay(500);
// digitalWrite(RCLK,0);
for(i=0;i<8;i++){
SIPO(LED[8-i-1]);
pulse(RCLK);
delay(150);
}
delay(500);
for(i=0;i<3;i++){
SIPO(0xff);
pulse(RCLK);
delay(100);
SIPO(0x00);
pulse(RCLK);
delay(100);
}
delay(500);
}
return 0;
}
Merci pour vos futures réponses !