Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. #include <avr/pgmspace.h>
  2. 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};
  3. const uint32_t PROGMEM led1[3] = {889315530,102000682,1751617618};
  4. const uint32_t PROGMEM led2[3] = {3405651765,4192966613,2543349676};
  5. uint32_t delay_time = 0;
  6. uint32_t led1Frame = 0;
  7. uint32_t led2Frame = 0;
  8. uint32_t seconds_so_far = 0;
  9. uint32_t current_step = 0;
  10. uint32_t current_frame = 0;
  11. uint32_t step_in_frame = 0;
  12. uint32_t led1Disable = 0;
  13. uint32_t led2Disable = 0;
  14.  
  15. const int led1Pin = 8;
  16. const int led2Pin = 9;
  17.  
  18. void delaySeconds(unsigned long duration){
  19. for(;duration > 0;duration--){
  20. delay(1000);
  21. seconds_so_far +=1;
  22. led1Disable--;
  23. led2Disable--;
  24. }
  25. }
  26.  
  27. void fetch_frame(){
  28. led1Frame = pgm_read_dword_near(led1 + current_frame);
  29. led2Frame = pgm_read_dword_near(led2 + current_frame);
  30. }
  31.  
  32. void led1Activates(){
  33. if(bitRead(led1Frame, step_in_frame)){
  34. Serial.println("1 turned on");
  35. digitalWrite(led1Pin, HIGH);
  36. led1Disable = 10;
  37. }
  38. }
  39. void led1Deactivates(){
  40. if(led1Disable == 0){
  41. Serial.println("1 turned off ");
  42. digitalWrite(led1Pin, LOW);
  43. led1Disable = 0;
  44. }
  45. }
  46.  
  47. void led2Activates(){
  48. if(bitRead(led2Frame, step_in_frame)){
  49. Serial.println("2 turned on");
  50. digitalWrite(led2Pin, HIGH);
  51. led2Disable = 10;
  52. }
  53. }
  54. void led2Deactivates(){
  55. if(led2Disable == 0){
  56. Serial.println("2 turned off");
  57. digitalWrite(led2Pin, LOW);
  58. led2Disable = 0;
  59. }
  60. }
  61.  
  62. void setup() {
  63. // put your setup code here, to run once:
  64. Serial.begin(9600);
  65. pinMode(led1Pin, OUTPUT);
  66. pinMode(led2Pin, OUTPUT);
  67. digitalWrite(led1Pin, LOW);
  68. digitalWrite(led2Pin, LOW);
  69. fetch_frame();
  70. delay_time = pgm_read_dword_near(delays + current_step);
  71. }
  72.  
  73. void loop() {
  74. // put your main code here, to run repeatedly:
  75. pgm_read_dword_near(delays + current_step);
  76. if(seconds_so_far == delay_time){
  77. led1Activates();
  78. led2Activates();
  79. if(step_in_frame >= 32){
  80. step_in_frame = 0;
  81. current_frame += 1;
  82. seconds_so_far = 0;
  83. fetch_frame();
  84. }
  85. seconds_so_far = 0;
  86. if(current_step == 93){
  87. step_in_frame = 0;
  88. current_frame = 0;
  89. current_step = 0;
  90. seconds_so_far = 0;
  91. fetch_frame();
  92. }
  93. current_step++;
  94. pgm_read_dword_near(delays + current_step);
  95. }
  96. led1Deactivates();
  97. led2Deactivates();
  98.  
  99. Serial.print("In step #: ");
  100. Serial.print(current_step);
  101. Serial.print(" Time Elapsed(this run): ");
  102. Serial.println(seconds_so_far);
  103. delaySeconds(1);
  104.  
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement