Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define clock_pin 3
- #define mclr_pin 5
- #define data_pin 4
- //storage variables
- boolean clock_toggle=false;
- boolean clock_enable=false;
- int data_pointer=0;
- boolean data_send[22]= {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- boolean enable=true;
- void setup(){
- //set pins as outputs
- for (int i=0; i <= 13; i++){
- pinMode(i, OUTPUT);
- digitalWrite(i, LOW);
- }
- cli();//stop interrupts
- //set timer1 interrupt
- TCCR1A = 0;// set entire TCCR1A register to 0
- TCCR1B = 0;// same for TCCR1B
- TCNT1 = 0;//initialize counter value to 0
- // set compare match register for 1hz increments
- OCR1A = 1600;// set Timerclock
- // turn on CTC mode
- TCCR1B |= (1 << WGM12);
- // Set Prescaler
- TCCR1B |= (1 << CS10);
- // enable timer compare interrupt
- TIMSK1 |= (1 << OCIE1A);
- sei();//allow interrupts
- }//end setup
- ISR(TIMER1_COMPA_vect){
- if (enable) {
- if (clock_enable) {
- if (clock_toggle) {
- clock_toggle=false;
- digitalWrite(clock_pin, LOW);
- data_pointer=data_pointer+1;
- if (data_pointer>21) {
- enable=false;
- digitalWrite(clock_pin, LOW);
- digitalWrite(data_pin, LOW);
- digitalWrite(mclr_pin, LOW);
- } else if (data_pointer>=6) {
- pinMode(data_pin, INPUT);
- }
- } else {
- clock_toggle=true;
- if (data_pointer<21) {
- digitalWrite(clock_pin, HIGH);
- }
- if (data_send[data_pointer]) {
- digitalWrite(data_pin, HIGH);
- } else {
- digitalWrite(data_pin, LOW);
- }
- }
- } else {
- pinMode(data_pin, OUTPUT);
- digitalWrite(clock_pin, LOW);
- digitalWrite(data_pin, LOW);
- digitalWrite(mclr_pin, LOW);
- data_pointer=0;
- clock_enable=true;
- clock_toggle=false;
- }
- }
- }
- void loop(){
- //do other things here
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement