ArduinoCharlieplexing

Dit is het eerste project met Charlieplexing. Dit is een nogal verwarrend onderwerp, ik stel voor om eerst de uitleg erover te lezen.

De Arduino heeft enkele digitale poorten. Voor veel toepassingen genoeg, maar voor andere toepassingen toch wat weinig. Met Charlieplexing kunnen we door een listig gebruik van digitale techniek een aantal poorten besparen.

Een LED schakeling heeft een plus en min voeding nodig. Om een (1) LED te laten branden zijn 2 poorten op de Arduino in gebruik (1x plus en 1x min).

Om 2 LED's te laten branden zijn dan 4 poorten nodig hebben.

We kunnen hier eenvoudig een poort in besparen, want we mogen de min's combineren. Voor 2 LEDs hebben we dan 3 poorten nodig (2x plus voor iedere LED en 1x min). Het kan nog efficienter.



ArduinoAansluiten

In het programma hieronder gaan we de manier die in de uitleg is gegeven gebruiken. De voeding komt van de Arduino. We sluiten daar de draden aan op pin 2 en 3. Beide pinnen stellen we in als OUTPUT kanaal.

De blinkMode is leidend. ALs die op 0 staat voeren we de ene actie uit, en zoniet de andere actie.

Als de loop() functie loopt:

  • Als de blinkMode 0 is.
    Dan zetten we PLUS stroom op dataPin1 en MIN stroom op de andere
    Ook zetten we de blinkMode op 1
  • Als de blinkMode 1 is.
    Dan zetten we MIN stroom op dataPin1 en PLUS stroom op de andere
    Ook zetten we de blinkMode op 0

Iedere keer dat we de loop() functie uitvoeren zal de blinkMode een andere waarde hebben. Als die 0 is namelijk dan voeren we de ene actie uit en zetten dat de blinkMode op 1 voor de volgende keer dat we in de loop() komen. Als we in de loop() functie komen en de blinkMode is 1 dan voeren we acties uit waarna we de blinkMode op 0 zetten. De keer erop zal de eerste functionaliteit weer worden uitgeveoerd.

In de acties zetten we om en om de PLUS en MIN op de 2 pins. Dat zijn de situaties van de uitleg pagina in stap 4 en stap 5.

In deze code zit verder geen intelligentie en beide LED's zullen hier gaan branden. Die intelligentie kunnen we natuurlijk zelf toevoegen.



ArduinoBreadboard