Advertisement
Guest User

Fubarino contest.

a guest
Dec 19th, 2013
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.47 KB | None | 0 0
  1. /*
  2. This code is a Cludge.
  3. */
  4. String jingle ="qEqEhEqEqEhEqEqGtCeDwEqFqFtFeFqFqEqEeEeEqEqDqDqEhDhGqEqEhEqEqEhEqEqGtCeDwEqFqFqFqFqFqEqEeEeEqGqGqFqDwC";
  5.  
  6. const int buttonPin[4] = {11,10,8,9};
  7. const int relay[3] = {4.6,7};
  8. char flag = 0;
  9.  
  10. int p = 0;
  11. int speed = 1;
  12. int pn = 0;
  13. unsigned long wait_time = 0;
  14.  
  15. char history[8] = {9,9,9,9,9,9,9,9}; // fill with non used numbers.
  16.  
  17. int buttonState[4] = {LOW,LOW,LOW,LOW};
  18. int lastButtonState[4] = {LOW,LOW,LOW,LOW};
  19. int reading[4] = {LOW,LOW,LOW,LOW};
  20.  
  21. int note = 1000;
  22. long lastDebounceTime = 0;  // the last time the output pin was toggled
  23. long debounceDelay = 100;
  24.  
  25.  
  26. // the setup routine runs once when you press reset:
  27. void setup() {
  28.   Serial.begin(19200);
  29.   Serial.print('\x11');
  30.   int i;
  31.   for (i = 0 ; i < 4 ; i++)
  32.     {
  33.       pinMode(buttonPin[i], INPUT);
  34.     }
  35.   for (i = 0 ; i < 3 ; i++)
  36.     {
  37.       pinMode(relay[i], OUTPUT);
  38.     }
  39. }
  40.  
  41. // the loop routine runs over and over again forever:
  42. void loop() {
  43.   int i;
  44.   readbut();
  45.   if (check_hist() == 1)
  46.     {
  47.       play(jingle);
  48.       history[7]=0;    
  49.     }
  50.  
  51.     if (flag==1){
  52.     speed++;
  53.     if (speed > 5000)
  54.       speed=5000;
  55.     flag = 0;
  56.     Serial.print('\x0c');
  57.     Serial.println(speed);
  58.   }
  59.   if (flag == 2){
  60.     speed--;
  61.     if (speed <0 )
  62.       speed = 0;
  63.     flag = 0;
  64.     Serial.print('\x0c');
  65.     Serial.println(speed);
  66.   }
  67.   if (flag == 3)
  68.     {
  69.       flag = 0;
  70.       Serial.print('\x0c');
  71.       Serial.println("Pattern change");
  72.       p++;
  73.       p=p%5;
  74.     }
  75.   if (flag ==4)
  76.     {
  77.       flag = 0;
  78.       Serial.print('\x0c');
  79.       Serial.println("Pattern change");
  80.       p--;
  81.       p=p%5;
  82.     }
  83.     do_patt();
  84.   //Serial.print('\x80');
  85.   //Serial.print(String(flag));
  86. }
  87.  
  88.  
  89.  
  90. void do_patt(){
  91.   int i;
  92.   if (millis() - wait_time > (500+speed))
  93.     {
  94.       if (p == 0)
  95.     {
  96.       for (i = 0 ; i < 3; i++){
  97.         if (i==pn){
  98.               digitalWrite(relay[i],HIGH);
  99.         }else{
  100.               digitalWrite(relay[i],LOW);
  101.             }
  102.           }    
  103.       pn++;
  104.     }
  105.       if (p == 1)
  106.     {
  107.       for (i = 0 ; i < 3; i++){
  108.         if (i==pn){
  109.               digitalWrite(relay[i],LOW);
  110.         }else{
  111.               digitalWrite(relay[i],HIGH);
  112.             }
  113.           }
  114.       pn++;
  115.     }
  116.       if (p == 2)
  117.     {
  118.       for (i = 0 ; i < 3; i++){
  119.         if (i==pn){
  120.               digitalWrite(relay[i],HIGH);
  121.         }else{
  122.               digitalWrite(relay[i],LOW);
  123.             }
  124.           }
  125.       pn--;
  126.     }
  127.       if (p == 3)
  128.     {
  129.       for (i = 0 ; i < 3; i++){
  130.         if (i==pn){
  131.               digitalWrite(relay[i],LOW);
  132.         }else{
  133.               digitalWrite(relay[i],HIGH);
  134.             }
  135.           }
  136.       pn--;
  137.     }
  138.       if (p == 4)
  139.     {
  140.           random_order();
  141.         }
  142.       pn=pn%4;
  143.       wait_time=millis();
  144.     }
  145. }
  146.  
  147.  
  148. void readbut() {
  149.  
  150.   int i = 0;
  151.   for (i = 0; i < 4 ; i++){
  152.     reading[i] = digitalRead(buttonPin[i]);
  153.    
  154.   }
  155.  
  156.   if ((millis() - lastDebounceTime) > debounceDelay) {
  157.    
  158.     if ((reading[1] != lastButtonState[1]) | (reading[2] != lastButtonState[2]) | (reading[3] != lastButtonState[3]) | (reading[0] != lastButtonState[0]))
  159.       {
  160.     flag=0;
  161.     for (i = 0; i < 4 ; i++)
  162.         {
  163.       if (reading[i]){
  164.             flag = i+1;
  165.           }
  166.       buttonState[i] = reading[i];
  167.     }
  168.     lastDebounceTime = millis();
  169.     if (flag != 0){
  170.       push_hist(flag);
  171.      }
  172.       }
  173.    
  174.   }
  175.   for (i = 0; i < 4 ; i++){
  176.     lastButtonState[i] = reading[i];
  177.   }
  178.  
  179. }
  180.  
  181.  
  182. void random_order(){
  183.   int k;
  184.   for (k=0;k<3;k++){
  185.       digitalWrite(relay[k],random(0,2));
  186.     }
  187. }
  188.  
  189. void play(String X) {
  190.   int i;
  191.   for (i=0;i<X.length();i++) {
  192.     switch(X.charAt(i)) {
  193.     case 'C':
  194.       Serial.print('\xDF');
  195.       random_order();
  196.       delay(note);
  197.       break;
  198.     case 'D':
  199.       Serial.print('\xE1');
  200.       random_order();
  201.       delay(note);
  202.       break;      
  203.     case 'E':
  204.       Serial.print('\xE3');
  205.       random_order();
  206.       delay(note);
  207.       break;
  208.     case 'F':
  209.       Serial.print('\xE4');
  210.       random_order();
  211.       delay(note);
  212.       break;
  213.     case 'G':
  214.       Serial.print('\xE6');
  215.       random_order();
  216.       delay(note);
  217.       break;
  218.     case 'q':
  219.       Serial.print('\xD3'); //('\xD4');
  220.       note=250;
  221.       break;
  222.     case 'h':
  223.       Serial.print('\xD4');//('\xD5');
  224.       note=500;
  225.       break;
  226.     case 't':
  227.       Serial.print('\xD4');//('\xD5');
  228.       note=500;
  229.       break;
  230.     case 'e':
  231.       Serial.print('\xD2');//('\xD3');
  232.       note=125;
  233.       break;
  234.     case 'w':
  235.       Serial.print('\xD5');//('\xD6');
  236.       note=1000;
  237.       break;
  238.     default :
  239.       break;
  240.     }
  241.   }
  242.   Serial.print('\x11');
  243.   for (i=0;i<3;i++){
  244.       digitalWrite(relay[i],LOW);
  245.   }
  246.   delay(5000);
  247.         Serial.print('\x0c');
  248.         Serial.print("Merry Christmas");
  249.         Serial.print('\x0a');
  250.         Serial.print("hackaday.com");
  251.   delay(5000);
  252.  
  253. }
  254.  
  255.  
  256. void push_hist(char x){
  257.   int i;
  258.   for (i = 0;i<7;i++)
  259.     {
  260.       history[i]=history[i+1];
  261.     }
  262.   history[7]=x;
  263. }
  264.  
  265. int check_hist(){
  266.   if ((history[0] == 1) &&
  267.       (history[1] == 1) &&
  268.       (history[2] == 2) &&      
  269.       (history[3] == 2) &&
  270.       (history[4] == 3) &&
  271.       (history[5] == 4) &&
  272.       (history[6] == 3) &&
  273.       (history[7] == 4)) {
  274.     return(1);
  275.   }
  276.   if ((history[0] == 3) &&
  277.       (history[1] == 3) &&
  278.       (history[2] == 4) &&
  279.       (history[3] == 4) &&
  280.       (history[4] == 3) &&
  281.       (history[5] == 3) &&
  282.       (history[6] == 4) &&
  283.       (history[7] == 4)) {
  284.     return(1);
  285.   }
  286.   return(0);
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement