Advertisement
uwezi

20220418_test_charlieplexing

Apr 17th, 2022 (edited)
1,436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Arduino.h>
  2.  
  3. uint8_t PINS[6] = {7,6,5,4,3,2};
  4.  
  5. // array of the LED connections, cathode[0] andode[1]
  6. uint8_t LEDS[24][2] =
  7. {
  8.   {6,1},                        // seconds LED
  9.   {2,1}, {1,2}, {3,1}, {1,3},   // 5-hour
  10.   {4,1}, {1,4}, {5,1}, {1,5},   // 1-hour
  11.   {4,3}, {3,4}, {3,2}, {2,3}, {4,2}, {2,4}, {5,2}, {2,5}, {6,2}, {2,6}, {1,6}, // 5-minute
  12.   {5,3}, {3,5}, {6,3}, {3,6}    // 1-minute
  13. };
  14.  
  15. uint8_t framebuffer[24];
  16.  
  17. void setup()
  18. {
  19.   for (uint8_t i = 0; i < 24; i++)
  20.   {
  21.     framebuffer[i] = 0;
  22.   }
  23. }
  24.  
  25. void loop()
  26. {
  27.   static uint8_t i=0;
  28.  
  29.   uint8_t anode, cathode;
  30.  
  31.   cathode = PINS[ LEDS[i][0] -1 ];
  32.   anode   = PINS[ LEDS[i][1] -1 ];
  33.  
  34.   // switch off voltages
  35.   digitalWrite(cathode, LOW);
  36.   digitalWrite(anode,   LOW);
  37.  
  38.   // switch to input
  39.   pinMode(cathode, INPUT);
  40.   pinMode(anode,   INPUT);
  41.  
  42.   // next LED
  43.   i++;
  44.   i %= 24;   //modulo 24
  45.   cathode = PINS[ LEDS[i][0] -1 ];
  46.   anode   = PINS[ LEDS[i][1] -1 ];
  47.  
  48.   // switch to outputs
  49.   pinMode(cathode, OUTPUT);
  50.   pinMode(anode,   OUTPUT);
  51.  
  52.   // switch voltages
  53.   digitalWrite(cathode, LOW);
  54.   digitalWrite(anode,   HIGH);
  55.  
  56.   delay(0.4);
  57.  
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement