X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=hardware%2Fshift_register%2Fshift_register_custom_pattern_4%2Fshift_register_custom_pattern_4.ino;fp=hardware%2Fshift_register%2Fshift_register_custom_pattern_4%2Fshift_register_custom_pattern_4.ino;h=c5e1da7815840aedea2446a96c9bdd83522bf7c5;hb=2e29cbe13965809a5d3866ccdc12b1d665b54115;hp=0000000000000000000000000000000000000000;hpb=11eb80579bf2e63a8244897614542c917f641a47;p=sketchbook_andrea diff --git a/hardware/shift_register/shift_register_custom_pattern_4/shift_register_custom_pattern_4.ino b/hardware/shift_register/shift_register_custom_pattern_4/shift_register_custom_pattern_4.ino new file mode 100644 index 0000000..c5e1da7 --- /dev/null +++ b/hardware/shift_register/shift_register_custom_pattern_4/shift_register_custom_pattern_4.ino @@ -0,0 +1,136 @@ + +/* + Shift Register Example + Turning on the outputs of a 74HC595 using an array + + Hardware: + * 74HC595 shift register + * LEDs attached to each of the outputs of the shift register + + */ +//Pin connected to ST_CP of 74HC595 +int latchPin = 8; +//Pin connected to SH_CP of 74HC595 +int clockPin = 12; +////Pin connected to DS of 74HC595 +int dataPin = 11; + +//holders for infromation you're going to pass to shifting function +byte data; +byte dataArray[10]; + +void setup() { + //set pins to output because they are addressed in the main loop + pinMode(latchPin, OUTPUT); + Serial.begin(9600); + + //Arduino doesn't seem to have a way to write binary straight into the code + //so these values are in HEX. Decimal would have been fine, too. + dataArray[0] = 0xFF; //11111111 + dataArray[1] = 0xFE; //11111110 + dataArray[2] = 0xFC; //11111100 + dataArray[3] = 0xF8; //11111000 + dataArray[4] = 0xF0; //11110000 + dataArray[5] = 0xE0; //11100000 + dataArray[6] = 0xC0; //11000000 + dataArray[7] = 0x80; //10000000 + dataArray[8] = 0x00; //00000000 + dataArray[9] = 0x38; //11100000 + + //function that blinks all the LEDs + //gets passed the number of blinks and the pause time + blinkAll_2Bytes(2,500); +} + +void loop() { + + for (int j = 0; j < 10; j++) { + //load the light sequence you want from array + data = dataArray[j]; + //ground latchPin and hold low for as long as you are transmitting + digitalWrite(latchPin, 0); + //move 'em out + shiftOut(dataPin, clockPin, data); + //return the latch pin high to signal chip that it + //no longer needs to listen for information + digitalWrite(latchPin, 1); + delay(300); + } +} + + + +// the heart of the program +void shiftOut(int myDataPin, int myClockPin, byte myDataOut) { + // This shifts 8 bits out MSB first, + //on the rising edge of the clock, + //clock idles low + + //internal function setup + int i=0; + int pinState; + pinMode(myClockPin, OUTPUT); + pinMode(myDataPin, OUTPUT); + + //clear everything out just in case to + //prepare shift register for bit shifting + digitalWrite(myDataPin, 0); + digitalWrite(myClockPin, 0); + + //for each bit in the byte myDataOut� + //NOTICE THAT WE ARE COUNTING DOWN in our for loop + //This means that %00000001 or "1" will go through such + //that it will be pin Q0 that lights. + for (i=7; i>=0; i--) { + digitalWrite(myClockPin, 0); + + //if the value passed to myDataOut and a bitmask result + // true then... so if we are at i=6 and our value is + // %11010100 it would the code compares it to %01000000 + // and proceeds to set pinState to 1. + if ( myDataOut & (1<