Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/pgmspace.h>
- const uint32_t PROGMEM delays[93]= {120, 70, 610, 790, 2290, 2350, 130, 2530, 370, 2350, 1270, 910, 850, 370, 310, 130, 370, 250, 310, 70, 250, 130, 370, 130, 370, 1030, 7030, 730, 12490, 70, 1450, 790, 130, 310, 250, 1270, 190, 1570, 1630, 610, 5590, 3190, 610, 70, 70, 550, 730, 70, 70, 130, 310, 1090, 5830, 70, 310, 70, 70, 250, 70, 70, 70, 10030, 250, 2350, 1330, 5590, 970, 4210, 490, 5050, 2230, 2350, 130, 310, 9070, 610, 70, 4930, 310, 70, 16330, 16510, 3550, 20590, 70, 71830, 15790, 16390, 12010, 2590, 190, 70, 70};
- const uint32_t PROGMEM led1[3] = {889315530,102000682,1751617618};
- const uint32_t PROGMEM led2[3] = {3405651765,4192966613,2543349676};
- uint32_t delay_time = 0;
- uint32_t led1Frame = 0;
- uint32_t led2Frame = 0;
- uint32_t seconds_so_far = 0;
- uint32_t current_step = 0;
- uint32_t current_frame = 0;
- uint32_t step_in_frame = 0;
- uint32_t led1Disable = 0;
- uint32_t led2Disable = 0;
- const int led1Pin = 8;
- const int led2Pin = 9;
- void delaySeconds(unsigned long duration){
- for(;duration > 0;duration--){
- delay(1000);
- seconds_so_far +=1;
- led1Disable--;
- led2Disable--;
- }
- }
- void fetch_frame(){
- led1Frame = pgm_read_dword_near(led1 + current_frame);
- led2Frame = pgm_read_dword_near(led2 + current_frame);
- }
- void led1Activates(){
- if(bitRead(led1Frame, step_in_frame)){
- Serial.println("1 turned on");
- digitalWrite(led1Pin, HIGH);
- led1Disable = 10;
- }
- }
- void led1Deactivates(){
- if(led1Disable == 0){
- Serial.println("1 turned off ");
- digitalWrite(led1Pin, LOW);
- led1Disable = 0;
- }
- }
- void led2Activates(){
- if(bitRead(led2Frame, step_in_frame)){
- Serial.println("2 turned on");
- digitalWrite(led2Pin, HIGH);
- led2Disable = 10;
- }
- }
- void led2Deactivates(){
- if(led2Disable == 0){
- Serial.println("2 turned off");
- digitalWrite(led2Pin, LOW);
- led2Disable = 0;
- }
- }
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- pinMode(led1Pin, OUTPUT);
- pinMode(led2Pin, OUTPUT);
- digitalWrite(led1Pin, LOW);
- digitalWrite(led2Pin, LOW);
- fetch_frame();
- delay_time = pgm_read_dword_near(delays + current_step);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- pgm_read_dword_near(delays + current_step);
- if(seconds_so_far == delay_time){
- led1Activates();
- led2Activates();
- if(step_in_frame >= 32){
- step_in_frame = 0;
- current_frame += 1;
- seconds_so_far = 0;
- fetch_frame();
- }
- seconds_so_far = 0;
- if(current_step == 93){
- step_in_frame = 0;
- current_frame = 0;
- current_step = 0;
- seconds_so_far = 0;
- fetch_frame();
- }
- current_step++;
- pgm_read_dword_near(delays + current_step);
- }
- led1Deactivates();
- led2Deactivates();
- Serial.print("In step #: ");
- Serial.print(current_step);
- Serial.print(" Time Elapsed(this run): ");
- Serial.println(seconds_so_far);
- delaySeconds(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement