Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int SER_Pin = 0; // blue
- int RCLK_Pin = 1; // green
- int SRCLK_Pin = 2; // yellow
- int PWM_Pin = 11; // black
- int BTN_Pin = 4; // orange
- #define number_of_74hc595s 1
- #define number_of_leds 8
- #define numOfRegisterPins number_of_74hc595s * 8
- boolean registers[numOfRegisterPins];
- int buttonState = 0;
- boolean cocked = false;
- void setup() {
- // put your setup code here, to run once:
- pinMode(SER_Pin, OUTPUT);
- pinMode(RCLK_Pin, OUTPUT);
- pinMode(SRCLK_Pin, OUTPUT);
- pinMode(PWM_Pin, OUTPUT);
- pinMode(BTN_Pin, INPUT);
- effect_testLights();
- clearRegisters();
- writeRegisters();
- }
- void loop() {
- // read the state of the pushbutton value:
- buttonState = digitalRead(BTN_Pin);
- // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
- if (buttonState == HIGH) {
- if (!cocked){
- effect_brightness();
- cocked = true;
- } else {
- effect_fastflash();
- }
- } else {
- if (cocked) {
- effect_launch();
- }
- }
- }
- void effect_fastflash(){
- clearRegisters();
- writeRegisters();
- delay(100);
- setRegisterPin(7, HIGH);
- writeRegisters();
- delay(100);
- }
- void effect_launch() {
- for (int i = 6; i >= 0; i--) {
- clearRegisters();
- setRegisterPin(i+1, HIGH);
- setRegisterPin(i, HIGH);
- writeRegisters();
- delay(100);
- }
- clearRegisters();
- writeRegisters();
- cocked = false;
- }
- void effect_brightness() {
- int len, amt;
- for (len = 0; len < number_of_leds; ++len) {
- setRegisterPin(len, LOW);
- }
- writeRegisters();
- setRegisterPin(7, HIGH);
- writeRegisters();
- for (amt = 255; amt > 1; amt-=1) {
- analogWrite(PWM_Pin, amt);
- delay(10);
- }
- }
- void effect_testLights() {
- int len, i;
- for (len = 0; len < number_of_leds; ++len) {
- clearRegisters();
- setRegisterPin(len, HIGH);
- writeRegisters();
- delay(125);
- }
- for (i = 0; i < 2; i++) {
- clearRegisters();
- for (len = 0; len < number_of_leds; ++len) {
- setRegisterPin(len, HIGH);
- }
- writeRegisters();
- delay(500);
- clearRegisters();
- writeRegisters();
- delay(500);
- }
- }
- ////////////////////////////////
- // SHIFT REGISTER
- ////////////////////////////////
- // Set and display registers
- // Only call AFTER all values are set how you would like (slow otherwise)
- void writeRegisters(){
- digitalWrite(RCLK_Pin, LOW);
- for(int i = numOfRegisterPins - 1; i >= 0; i--){
- digitalWrite(SRCLK_Pin, LOW);
- int val = registers[i];
- digitalWrite(SER_Pin, val);
- digitalWrite(SRCLK_Pin, HIGH);
- }
- digitalWrite(RCLK_Pin, HIGH);
- }
- // set an individual pin HIGH or LOW
- void setRegisterPin(int index, int value){
- registers[index] = value;
- }
- // set all register pins to LOW
- void clearRegisters(){
- for(int i = numOfRegisterPins - 1; i >= 0; i--){
- registers[i] = LOW;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement