You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					421 lines
				
				9.4 KiB
			
		
		
			
		
	
	
					421 lines
				
				9.4 KiB
			| 
								 
											8 years ago
										 
									 | 
							
								#include <FastGPIO.h>
							 | 
						||
| 
								 | 
							
								#include <TimerOne.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int iByte;
							 | 
						||
| 
								 | 
							
								byte col = 0;
							 | 
						||
| 
								 | 
							
								byte leds[12][4];
							 | 
						||
| 
								 | 
							
								byte pass = 1;
							 | 
						||
| 
								 | 
							
								int fadecount = 1;
							 | 
						||
| 
								 | 
							
								const int fadelimit = 3000;
							 | 
						||
| 
								 | 
							
								const int fadelimitshort = 1000;
							 | 
						||
| 
								 | 
							
								byte mode = 4;
							 | 
						||
| 
								 | 
							
								byte brightness = 2;
							 | 
						||
| 
								 | 
							
								boolean changemode = 0;
							 | 
						||
| 
								 | 
							
								int rain = 0;
							 | 
						||
| 
								 | 
							
								const int rainlimit = 5000;
							 | 
						||
| 
								 | 
							
								const int rainfade = 5000;
							 | 
						||
| 
								 | 
							
								byte rx = 0;
							 | 
						||
| 
								 | 
							
								byte ry = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
							 | 
						||
| 
								 | 
							
								int pins[17] = {
							 | 
						||
| 
								 | 
							
								  -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 14, 15, 18, 19, 20, 21
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// col[xx] of leds = pin yy on led matrix
							 | 
						||
| 
								 | 
							
								int cols[12] = {
							 | 
						||
| 
								 | 
							
								  pins[8], pins[7], pins[6], pins[5], pins[9], pins[10], pins[11], pins[12], pins[13], pins[14], pins[15], pins[16]
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// row[xx] of leds = pin yy on led matrix
							 | 
						||
| 
								 | 
							
								int rows[4] = {
							 | 
						||
| 
								 | 
							
								  pins[1], pins[2], pins[3], pins[4]
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define DELAY 0
							 | 
						||
| 
								 | 
							
								extern byte leds[12][4];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void setup() {
							 | 
						||
| 
								 | 
							
								  Serial1.begin(9600);
							 | 
						||
| 
								 | 
							
								  setupLeds();
							 | 
						||
| 
								 | 
							
								  for (int s = 0; s < 5; s++) {
							 | 
						||
| 
								 | 
							
								    for ( int r = 1; r  < 9; r++)  {
							 | 
						||
| 
								 | 
							
								      delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								      delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								      for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								        for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								          leds[i][j] = 1;
							 | 
						||
| 
								 | 
							
								          for (int p = 0; p < 25; p++) {
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          leds[i][j] = r;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for ( int r = 9; r  > 0; r--)  {
							 | 
						||
| 
								 | 
							
								      delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								      delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								      delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								      for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								        for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								          leds[i][j] = 1;
							 | 
						||
| 
								 | 
							
								          for (int p = 0; p < 25; p++) {
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          leds[i][j] = r;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void loop() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  switch (mode) {
							 | 
						||
| 
								 | 
							
								    case 0:
							 | 
						||
| 
								 | 
							
								      //Blacklight
							 | 
						||
| 
								 | 
							
								      for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								        for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								          leds[i][j] = brightness;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      checkserial();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 1:
							 | 
						||
| 
								 | 
							
								      //Breathing
							 | 
						||
| 
								 | 
							
								      for ( int r = 1; r  < 9; r++)  {
							 | 
						||
| 
								 | 
							
								        checkserial();
							 | 
						||
| 
								 | 
							
								        if (changemode == 0) {
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								            for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								              leds[i][j] = 1;
							 | 
						||
| 
								 | 
							
								              for (int p = 0; p < 25; p++) {
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								              leds[i][j] = r;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      for ( int r = 9; r  > 0; r--)  {
							 | 
						||
| 
								 | 
							
								        checkserial();
							 | 
						||
| 
								 | 
							
								        if (changemode == 0) {
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								            for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								              leds[i][j] = 1;
							 | 
						||
| 
								 | 
							
								              for (int p = 0; p < 25; p++) {
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								              leds[i][j] = r;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      for ( int r = 1; r  < 30; r++)  {
							 | 
						||
| 
								 | 
							
								        checkserial();
							 | 
						||
| 
								 | 
							
								        if (changemode == 0) {
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								          delayMicroseconds(65000);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 2:
							 | 
						||
| 
								 | 
							
								      //Random
							 | 
						||
| 
								 | 
							
								      leds[random(12)][random(4)] = random(8);
							 | 
						||
| 
								 | 
							
								      delayMicroseconds(10000);
							 | 
						||
| 
								 | 
							
								      checkserial();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 3:
							 | 
						||
| 
								 | 
							
								      //Rain
							 | 
						||
| 
								 | 
							
								      rain++;
							 | 
						||
| 
								 | 
							
								      if (rain > rainlimit) {
							 | 
						||
| 
								 | 
							
								        rain = 0;
							 | 
						||
| 
								 | 
							
								        rx = random(12);
							 | 
						||
| 
								 | 
							
								        ry = random(4);
							 | 
						||
| 
								 | 
							
								        if (leds[rx][ry] == 0) {
							 | 
						||
| 
								 | 
							
								          leds[rx][ry] = 18;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      fadecount++;
							 | 
						||
| 
								 | 
							
								      if (fadecount > rainfade) {
							 | 
						||
| 
								 | 
							
								        fadecount = 1;
							 | 
						||
| 
								 | 
							
								        for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								          for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								            if (leds[i][j] > 0) {
							 | 
						||
| 
								 | 
							
								              leds[i][j] = leds[i][j] - 1;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      checkserial();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 4:
							 | 
						||
| 
								 | 
							
								      //Reactive
							 | 
						||
| 
								 | 
							
								      fadecount++;
							 | 
						||
| 
								 | 
							
								      if (fadecount > fadelimit) {
							 | 
						||
| 
								 | 
							
								        fadecount = 1;
							 | 
						||
| 
								 | 
							
								        for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								          for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								            if (leds[i][j] > 0) {
							 | 
						||
| 
								 | 
							
								              leds[i][j] = leds[i][j] - 1;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      checkserial();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 5:
							 | 
						||
| 
								 | 
							
								      //Reactive Target
							 | 
						||
| 
								 | 
							
								      fadecount++;
							 | 
						||
| 
								 | 
							
								      if (fadecount > fadelimitshort) {
							 | 
						||
| 
								 | 
							
								        fadecount = 1;
							 | 
						||
| 
								 | 
							
								        for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								          for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								            if (leds[i][j] > 0) {
							 | 
						||
| 
								 | 
							
								              leds[i][j] = leds[i][j] - 1;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      checkserial();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    default:
							 | 
						||
| 
								 | 
							
								      mode = 0;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  changemode = 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void checkserial() {
							 | 
						||
| 
								 | 
							
								  if (Serial1.available() > 0) {
							 | 
						||
| 
								 | 
							
								    iByte = Serial1.read();
							 | 
						||
| 
								 | 
							
								    if (iByte == 100) {
							 | 
						||
| 
								 | 
							
								      brightness++;
							 | 
						||
| 
								 | 
							
								      if (brightness > 9) {
							 | 
						||
| 
								 | 
							
								        brightness = 1;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (iByte == 101) {
							 | 
						||
| 
								 | 
							
								      mode++;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (iByte < 100) {
							 | 
						||
| 
								 | 
							
								      if (mode == 4) {
							 | 
						||
| 
								 | 
							
								        byte row = iByte / 16;
							 | 
						||
| 
								 | 
							
								        byte col = iByte % 16;
							 | 
						||
| 
								 | 
							
								        leds[col][row] = 18;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (mode == 5) {
							 | 
						||
| 
								 | 
							
								        byte row = iByte / 16;
							 | 
						||
| 
								 | 
							
								        byte col = iByte % 16;
							 | 
						||
| 
								 | 
							
								        for (byte i = 0; i < 12;  i++) {
							 | 
						||
| 
								 | 
							
								          leds[i][row] = 18;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        for (byte p = 0; p < 4;  p++) {
							 | 
						||
| 
								 | 
							
								          leds[col][p] = 18;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void setupLeds() {
							 | 
						||
| 
								 | 
							
								  // sets the pins as output
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<2>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<3>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<4>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<5>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<6>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<7>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<8>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<9>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<10>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<16>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<14>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<15>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<18>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<19>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<20>::setOutputLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<21>::setOutputLow();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // set up Cols
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<6>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<7>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<8>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<9>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<10>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<16>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<14>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<15>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<18>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<19>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<20>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<21>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // set up Rows
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<2>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<3>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<4>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								  FastGPIO::Pin<5>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  clearLeds();
							 | 
						||
| 
								 | 
							
								  Timer1.initialize(25);
							 | 
						||
| 
								 | 
							
								  Timer1.attachInterrupt(display);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void clearLeds() {
							 | 
						||
| 
								 | 
							
								  // Clear display array
							 | 
						||
| 
								 | 
							
								  for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								    for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								      leds[i][j] = 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void onLeds() {
							 | 
						||
| 
								 | 
							
								  // Clear display array
							 | 
						||
| 
								 | 
							
								  for (int i = 0; i < 12; i++) {
							 | 
						||
| 
								 | 
							
								    for (int j = 0; j < 4; j++) {
							 | 
						||
| 
								 | 
							
								      leds[i][j] = 7;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Interrupt routine
							 | 
						||
| 
								 | 
							
								void display() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  switch (col) { // Turn whole previous column off
							 | 
						||
| 
								 | 
							
								    case 0:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<6>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 1:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<7>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 2:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<8>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 3:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<9>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 4:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<10>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 5:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<16>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 6:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<14>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 7:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<15>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 8:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<18>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 9:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<19>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 10:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<20>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 11:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<21>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  col++;
							 | 
						||
| 
								 | 
							
								  if (col == 12) {
							 | 
						||
| 
								 | 
							
								    col = 0;
							 | 
						||
| 
								 | 
							
								    pass++;
							 | 
						||
| 
								 | 
							
								    if (pass > 8) {
							 | 
						||
| 
								 | 
							
								      pass = 1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  for (int row = 0; row < 4; row++) {
							 | 
						||
| 
								 | 
							
								    if (leds[col][row] > pass) {
							 | 
						||
| 
								 | 
							
								      switch (row) { // Turn on this led
							 | 
						||
| 
								 | 
							
								        case 0:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<2>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        case 1:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<3>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        case 2:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<4>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        case 3:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<5>::setOutputValueLow();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								      switch (row) { // Turn off this led
							 | 
						||
| 
								 | 
							
								        case 0:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<2>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        case 1:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<3>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        case 2:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<4>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								        case 3:
							 | 
						||
| 
								 | 
							
								          FastGPIO::Pin<5>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								          break;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  switch (col) { // Turn column on
							 | 
						||
| 
								 | 
							
								    case 0:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<6>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 1:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<7>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 2:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<8>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 3:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<9>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 4:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<10>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 5:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<16>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 6:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<14>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 7:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<15>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 8:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<18>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 9:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<19>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 10:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<20>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 11:
							 | 
						||
| 
								 | 
							
								      FastGPIO::Pin<21>::setOutputValueHigh();
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |