Monday, August 26, 2013

Project one

 Changes the leds that are on of off based on the array 'one'.
Next thing to do is to create the an array of objects. The objects being arrays one, two, three, etc.
UPDATED: to build a primary array.

int data = 2;
int clock = 3;
int latch = 4;
int one[] ={6,4};
int two[] ={2,3};
int three[] ={1,5};
String numbers[]= {"one", "two", "three"};

int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;

void setup() {
pinMode(2, OUTPUT); //data
pinMode(3,OUTPUT); //clock
pinMode(4, OUTPUT); //latch
}

void loop() {
   for(int b=0; b < sizeof(numbers); b++){
     for(int i=0; i < sizeof(numbers[b]); i++){ //loops through each element of the array that was created earlier
      changeLED(numbers[b][i], ON);             //uses the sizeof function to determine the length of the array
      }
      delay(1000);
      for(int i=0; i <  sizeof(numbers[b]); i++){
      changeLED(numbers[b][i], OFF);
      }
      delay(1000);
   }
}
void updateLEDs(int value){
  digitalWrite(latch, LOW);     //Pulls the chips latch low
  shiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to the shift register
  digitalWrite(latch, HIGH);   //Pulls the latch high displaying the data
}

/*
 * updateLEDsLong() - sends the LED states set in ledStates to the 74HC595
 * sequence. Same as updateLEDs except the shifting out is done in software
 * so you can see what is happening.
 */
void updateLEDsLong(int value){
  digitalWrite(latch, LOW);    //Pulls the chips latch low
  for(int i = 0; i < 8; i++){  //Will repeat 8 times (once for each bit)
  int bit = value & B10000000; //We use a "bitmask" to select only the eighth
                               //bit in our number (the one we are addressing this time through
  value = value << 1;          //we move our number up one bit value so next time bit 7 will be
                               //bit 8 and we will do our math on it
  if(bit == 128){digitalWrite(data, HIGH);} //if bit 8 is set then set our data pin high
  else{digitalWrite(data, LOW);}            //if bit 8 is unset then set the data pin low
  digitalWrite(clock, HIGH);                //the next three lines pulse the clock pin
  delay(1);
  digitalWrite(clock, LOW);
  }
  digitalWrite(latch, HIGH);  //pulls the latch high shifting our data into being displayed
}



int bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111};
/*
 * changeLED(int led, int state) - changes an individual LED
 * LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON
 */
 void changeLED(int led, int state){
   ledState = ledState & masks[led];  //clears ledState of the bit we are addressing
   if(state == ON){ledState = ledState | bits[led];} //if the bit is on we will add it to ledState
   updateLEDs(ledState);              //send the new LED state to the shift register
 }

No comments:

Post a Comment