First attempt at looping through (not full) matrix led strip...

using the 'bit walk' approach.. can you turn on leds consecutively?..leaving the previous one on?..

or can you just "SHIFT" the next led to be on.. and the previous one off?

(I cant get the bit walking/shifting approach to work.. either way using | or &..etc..)

however.. I have another question..

one of these codes works.. the other does not..

can you tell me why?

WORKS:

#include <SPI.h>  

//-----[this is SPI hardware wiring pinout only]-----//
/* 
 Arduino pin D13 is connected to the DataIn (MAX7221 pin:13)
 Arduino pin D11 is connected to the CLK (MAX7221 pin:1)
 Arduino pin D10 is connected to LOAD (MAX7221 pin:12)
 */

// define MAX72xx default register addresses
#define DECODE_MODE 0x09 // Code B Decode Digits 0-7: 0xFF / No-Decode Mode: 0x00
#define INTENSITY_ADDRESS 0x0A // 0x07 to start, half intensity. valid from 0x00 (min) to 0x0F (max)
#define SCANLIMIT_ADDRESS 0x0B // All 8 digits on = 0xFF?? FF? Datasheet says 0x07?
#define SHUTDOWN_ADDRESS 0x0C  // Normal operation = 0x01 / Shutdown = 0x00 (powers up in shutdown mode)
#define DISPLAYTEST_ADDRESS 0x0F // 0x01 = all lights on full, 0x00 = normal ops

//---[define register addresses ['register/digit x' represent 1 section/grouping of 8 leds]---//
#define register1 0x01 // digit 0
#define register2 0x02 // digit 1
#define register3 0x03 // digit 2
#define register4 0x04 // digit 3
#define register5 0x05 // digit 4
#define register6 0x06 // digit 5
#define register7 0x07 // digit 6
#define register8 0x08 // digit 7

//--[define the SS pin]--//
#define SS 10 //hardware slave select pin on Arduino Due.
//--[deifne custom val]--//
#define totalGroups 8
//--[deifne custom val]--//
#define totalLeds 60


//create var to hold delay tim
int pause = 35;
//create var to hold current led count
int ledCounter = 0;

// create array to hold the register addresses
//byte registerAddress[] = {0,1,2,3,4,5,6,7};
byte registerAddress[] = {
  register1, register2, register3, register4, register5, register6, register7, register8};

// initialize array with some data/pattern
//1 on at a time
//byte registerData[] = {B10000000,B01000000,B00100000,B00010000,B00001000,B00000100,B00000010,B00000001}; 
//incrmentally on, 1, then 2, then 3...all staying light after
byte registerData[] = {
  B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111}; 

//stay on pattern/array
byte ledIn[] = {B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111}; 
byte ledOut[] = {B00000000,B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110}; 
//byte ledOut[] = {B11111110, B11111100, B11111000, B11110000, B11100000, B11000000, B10000000, B00000000}; 
//byte ledOut[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000}; 


void setup() {
  Serial.begin(9600);
  Serial.println("--SET UP CHIP--");
  //define 'SS' pin as output (needed for SPI....even if other devices use other pins as their SS/CS pins...correct?
  pinMode (SS, OUTPUT);
  // start the SPI library
  SPI.begin(); 

  //set MAX7221 defaults
  digitalWrite (SS, LOW);
  SPI.transfer (DECODE_MODE);  
  SPI.transfer (0x00);  // 0x00 - no-decode mode
  digitalWrite (SS, HIGH);

  digitalWrite (SS, LOW);
  SPI.transfer (INTENSITY_ADDRESS);  
  SPI.transfer (0x0F);  // 0x0F - max on/brightness
  digitalWrite (SS, HIGH);

  digitalWrite (SS, LOW);
  SPI.transfer (SCANLIMIT_ADDRESS);  
  SPI.transfer (0x07);  // 0xFF or 0x07? 0x07 - all display digits on
  digitalWrite (SS, HIGH);

  digitalWrite (SS, LOW);
  SPI.transfer (SHUTDOWN_ADDRESS);  
  SPI.transfer (0x01);  // 0x01 - normal operation mode
  digitalWrite (SS, HIGH);

  digitalWrite (SS, LOW);
  SPI.transfer(DISPLAYTEST_ADDRESS);
  SPI.transfer(0x00);  // 0x00 - normal operation mode
  digitalWrite (SS, HIGH);

  //clear display
  for(int group=0; group<totalGroups; group++){    
    digitalWrite (SS,LOW);
    SPI.transfer (registerAddress[group]);  // register to write to
    SPI.transfer (B00000000);  // and value       
    digitalWrite (SS,HIGH);      
  }

}

void loop() {   
  //clear display
  //for(int group=0; group<totalGroups; group++){    
  //digitalWrite (SS,LOW);
  //SPI.transfer (registerAddress[group]);  // register to write to
  //SPI.transfer (B00000000);  // and value       
  //digitalWrite (SS,HIGH);
  //}

  //going up:
  for (int group = 0; group <7; group = group+1){   // first 7 rows
    for (int led=0; led<8; led++){
      digitalWrite (SS,LOW);
      SPI.transfer (registerAddress[group]);  // register to write to
      SPI.transfer (ledIn[led]);  // and value       
      digitalWrite (SS,HIGH);

      delay(pause);
      //Serial.println(led);
    }
  }
  //last group of 4
  int group = 7;  // 8th row
  for (int led=0; led<3; led++){
    digitalWrite (SS,LOW);
    SPI.transfer (registerAddress[group]);  // register to write to
    SPI.transfer (ledIn[led]);  // and value       
    digitalWrite (SS,HIGH);

    delay(pause);
    //Serial.println(led);
  }



  //going down:
  //last group of 4
  group = 7;  // 8th row
  for (int led=3; led>=0; led--){
    digitalWrite (SS,LOW);
    SPI.transfer (registerAddress[group]);  // register to write to
    SPI.transfer (ledOut[led]);  // and value       
    digitalWrite (SS,HIGH);

    delay(pause);
    //Serial.println(led);
  }


  for (int group = 6; group>=0; group--){   // first 7 rows
    for (int led=7; led>=0; led--){
      digitalWrite (SS,LOW);
      SPI.transfer (registerAddress[group]);  // register to write to
      SPI.transfer (ledOut[led]);  // and value       
      digitalWrite (SS,HIGH);

      delay(pause);
      //Serial.println(led);
    }
  }



  /*
  // now backwards, starting with 8th row
   for (byte led = B11110000; led = 0; led=led>>1){ // walk the other way until clear
   digitalWrite (SS,LOW);
   SPI.transfer (registerAddress[group]);  // register to write to
   SPI.transfer (ledIn[led]);  // and value       
   digitalWrite (SS,HIGH);
   delay(pause);
   }
   for (int group = 6; group = 0; group = group -1){
   for (byte led = B11111111; led = 0; led=led>>1){ // walk the other way until clear
   digitalWrite (SS,LOW);
   SPI.transfer (registerAddress[group]);  // register to write to
   SPI.transfer (ledIn[led]);  // and value       
   digitalWrite (SS,HIGH);
   delay(pause);
   }
   }
   */
}