74HC595 pour du chenillard a led

Gilles8700:
Moi ça ne marche pas avec le "b" mais plutôt le "B".

Et cela fonctionne aussi en employant la notation classique (c'est à dire non limité à l'univers Arduino) pour écrire un nombre en binaire
--> 0b10010010
C'est l'équivalent de 0xFA52 pour l'écriture en hexadécimal

Gilles8700:
Est ce que c'est possible d'utiliser un for afin d’éviter la répétition de plein de shiftout?

Oui et si modifier la fonction shiftout() ne te déranges pas, tu peux créer ta propre fonction, par exemple shiftout32(), pour transmettre 4 octets d'un coup et éviter ainsi la boucle "for".
C'est assez simple. Tu commence par récupérer le code de shiftout() [--> fichier wiring_shift.c dans l'IDE].

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
	uint8_t i;

	for (i = 0; i < 8; i++)  {
		if (bitOrder == LSBFIRST)
			digitalWrite(dataPin, !!(val & (1 << i)));
		else	
			digitalWrite(dataPin, !!(val & (1 << (7 - i))));
			
		digitalWrite(clockPin, HIGH);
		digitalWrite(clockPin, LOW);		
	}
}

Tu t'en inspire pour écrire ta propre fonction en faisant les modifications suivantes :

  • Nom : différent de l'original. Bien que Skywodd dira qu'à partir du moment où la définition d'une variable change le compilateur se débrouillera tout seul pour choisir le bon code entre deux fonctions qui portent le même nom (j'ai retenu la leçon :grin: ) mais avec nos esprits moins aguerris je pense qu'il est plus simple de changer le nom.

  • changer "uint8_t val" en "uint32_t val"

  • changer la limite de "i" dans la boucle for--> " i < 8 " en " i < 32 "

  • et bien sûr dans ton programme définir sur 32 bits la variable contenant les datas : (uint32_t nom_de_la_variable )
    et lui donner la bonne valeur.

NB :tant qu'à modifier il est même possible d'adapter au fonctionnement du 74HC595 en incluant dans la fonction l'activation du latch en fin de ransmission.

Edit : je viens de vérifier sur le projet Wiring et ils ont déjà réalisé un shiftout() de longueur variable
fichier : Wshift.cpS

/* $Id: WShift.cpp 1156 2011-06-07 04:01:16Z bhagman $
|| @author         Hernando Barragan <b@wiring.org.co>
|| @url            http://wiring.org.co/
|| @contribution   Brett Hagman <bhagman@wiring.org.co>
|| @contribution   Alexander Brevig <abrevig@wiring.org.co>
|| @description
|| | Bit shifting methods.
|| | Wiring Common API
|| @license Please see cores/Common/License.txt.
*/
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint16_t val, uint8_t count, uint8_t delayTime)
{
  int i;

  for (i = 0; i < count; ++i)
  {
    if (bitOrder == LSBFIRST)
      digitalWrite(dataPin, !!(val & (1 << i)));
    else
      digitalWrite(dataPin, !!(val & (1 << ((count - 1) - i))));

    digitalWrite(clockPin, HIGH);
    delayMicroseconds(delayTime);
    digitalWrite(clockPin, LOW);
    delayMicroseconds(delayTime);
  }
}

Il n'ont pas encore de version avec la gestion du Latch