Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- This code is a Cludge.
- */
- String jingle ="qEqEhEqEqEhEqEqGtCeDwEqFqFtFeFqFqEqEeEeEqEqDqDqEhDhGqEqEhEqEqEhEqEqGtCeDwEqFqFqFqFqFqEqEeEeEqGqGqFqDwC";
- const int buttonPin[4] = {11,10,8,9};
- const int relay[3] = {4.6,7};
- char flag = 0;
- int p = 0;
- int speed = 1;
- int pn = 0;
- unsigned long wait_time = 0;
- char history[8] = {9,9,9,9,9,9,9,9}; // fill with non used numbers.
- int buttonState[4] = {LOW,LOW,LOW,LOW};
- int lastButtonState[4] = {LOW,LOW,LOW,LOW};
- int reading[4] = {LOW,LOW,LOW,LOW};
- int note = 1000;
- long lastDebounceTime = 0; // the last time the output pin was toggled
- long debounceDelay = 100;
- // the setup routine runs once when you press reset:
- void setup() {
- Serial.begin(19200);
- Serial.print('\x11');
- int i;
- for (i = 0 ; i < 4 ; i++)
- {
- pinMode(buttonPin[i], INPUT);
- }
- for (i = 0 ; i < 3 ; i++)
- {
- pinMode(relay[i], OUTPUT);
- }
- }
- // the loop routine runs over and over again forever:
- void loop() {
- int i;
- readbut();
- if (check_hist() == 1)
- {
- play(jingle);
- history[7]=0;
- }
- if (flag==1){
- speed++;
- if (speed > 5000)
- speed=5000;
- flag = 0;
- Serial.print('\x0c');
- Serial.println(speed);
- }
- if (flag == 2){
- speed--;
- if (speed <0 )
- speed = 0;
- flag = 0;
- Serial.print('\x0c');
- Serial.println(speed);
- }
- if (flag == 3)
- {
- flag = 0;
- Serial.print('\x0c');
- Serial.println("Pattern change");
- p++;
- p=p%5;
- }
- if (flag ==4)
- {
- flag = 0;
- Serial.print('\x0c');
- Serial.println("Pattern change");
- p--;
- p=p%5;
- }
- do_patt();
- //Serial.print('\x80');
- //Serial.print(String(flag));
- }
- void do_patt(){
- int i;
- if (millis() - wait_time > (500+speed))
- {
- if (p == 0)
- {
- for (i = 0 ; i < 3; i++){
- if (i==pn){
- digitalWrite(relay[i],HIGH);
- }else{
- digitalWrite(relay[i],LOW);
- }
- }
- pn++;
- }
- if (p == 1)
- {
- for (i = 0 ; i < 3; i++){
- if (i==pn){
- digitalWrite(relay[i],LOW);
- }else{
- digitalWrite(relay[i],HIGH);
- }
- }
- pn++;
- }
- if (p == 2)
- {
- for (i = 0 ; i < 3; i++){
- if (i==pn){
- digitalWrite(relay[i],HIGH);
- }else{
- digitalWrite(relay[i],LOW);
- }
- }
- pn--;
- }
- if (p == 3)
- {
- for (i = 0 ; i < 3; i++){
- if (i==pn){
- digitalWrite(relay[i],LOW);
- }else{
- digitalWrite(relay[i],HIGH);
- }
- }
- pn--;
- }
- if (p == 4)
- {
- random_order();
- }
- pn=pn%4;
- wait_time=millis();
- }
- }
- void readbut() {
- int i = 0;
- for (i = 0; i < 4 ; i++){
- reading[i] = digitalRead(buttonPin[i]);
- }
- if ((millis() - lastDebounceTime) > debounceDelay) {
- if ((reading[1] != lastButtonState[1]) | (reading[2] != lastButtonState[2]) | (reading[3] != lastButtonState[3]) | (reading[0] != lastButtonState[0]))
- {
- flag=0;
- for (i = 0; i < 4 ; i++)
- {
- if (reading[i]){
- flag = i+1;
- }
- buttonState[i] = reading[i];
- }
- lastDebounceTime = millis();
- if (flag != 0){
- push_hist(flag);
- }
- }
- }
- for (i = 0; i < 4 ; i++){
- lastButtonState[i] = reading[i];
- }
- }
- void random_order(){
- int k;
- for (k=0;k<3;k++){
- digitalWrite(relay[k],random(0,2));
- }
- }
- void play(String X) {
- int i;
- for (i=0;i<X.length();i++) {
- switch(X.charAt(i)) {
- case 'C':
- Serial.print('\xDF');
- random_order();
- delay(note);
- break;
- case 'D':
- Serial.print('\xE1');
- random_order();
- delay(note);
- break;
- case 'E':
- Serial.print('\xE3');
- random_order();
- delay(note);
- break;
- case 'F':
- Serial.print('\xE4');
- random_order();
- delay(note);
- break;
- case 'G':
- Serial.print('\xE6');
- random_order();
- delay(note);
- break;
- case 'q':
- Serial.print('\xD3'); //('\xD4');
- note=250;
- break;
- case 'h':
- Serial.print('\xD4');//('\xD5');
- note=500;
- break;
- case 't':
- Serial.print('\xD4');//('\xD5');
- note=500;
- break;
- case 'e':
- Serial.print('\xD2');//('\xD3');
- note=125;
- break;
- case 'w':
- Serial.print('\xD5');//('\xD6');
- note=1000;
- break;
- default :
- break;
- }
- }
- Serial.print('\x11');
- for (i=0;i<3;i++){
- digitalWrite(relay[i],LOW);
- }
- delay(5000);
- Serial.print('\x0c');
- Serial.print("Merry Christmas");
- Serial.print('\x0a');
- Serial.print("hackaday.com");
- delay(5000);
- }
- void push_hist(char x){
- int i;
- for (i = 0;i<7;i++)
- {
- history[i]=history[i+1];
- }
- history[7]=x;
- }
- int check_hist(){
- if ((history[0] == 1) &&
- (history[1] == 1) &&
- (history[2] == 2) &&
- (history[3] == 2) &&
- (history[4] == 3) &&
- (history[5] == 4) &&
- (history[6] == 3) &&
- (history[7] == 4)) {
- return(1);
- }
- if ((history[0] == 3) &&
- (history[1] == 3) &&
- (history[2] == 4) &&
- (history[3] == 4) &&
- (history[4] == 3) &&
- (history[5] == 3) &&
- (history[6] == 4) &&
- (history[7] == 4)) {
- return(1);
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement