#define PLAY 1 #define VUP 2 #define VDOWN 3 #define NEXT 4 #define PREV 5 #define PWR 6 #define IN A0 /*ANALOG*/ #define MULTIPLIER 0.0048875855 #define PULSE 500 #define WAIT 500 #define SAMPLE A1 #define PULSE 13 boolean STATUS = false; float VAL; unsigned long startTime = 0; unsigned long endTime = 0; unsigned long Started = 0; unsigned long Ended = 0; boolean CLOSED = false; int CHANGED = 0; void setup() { pinMode(PLAY, OUTPUT); pinMode(VUP, OUTPUT); pinMode(VDOWN, OUTPUT); pinMode(NEXT, OUTPUT); pinMode(PREV, OUTPUT); pinMode(PWR, OUTPUT); pinMode(IN, INPUT); Started = millis(); pinMode(SAMPLE, INPUT); pinMode(PULSE, INPUT); } void loop() { Ended = millis() - Started; if(Ended > 2000){checkStatus();} VAL = (MULTIPLIER*(analogRead(IN))); if (VAL < 1.90){ delay(1); VAL = (MULTIPLIER*(analogRead(IN))); if((VAL > 1.60) && (VAL < 1.65)){ volUp(); } if((VAL > 1.45) && (VAL < 1.58)){ volDown(); } if(VAL < 0.1){ otherStuff(); }}} void volUp(){ digitalWrite(VUP, HIGH); delay(PULSE); digitalWrite(VUP, LOW); } void volDown(){ digitalWrite(VDOWN, HIGH); delay(PULSE); digitalWrite(VDOWN, LOW); } void PlPa(){ digitalWrite(PLAY, HIGH); delay(PULSE); digitalWrite(PLAY, LOW); } void Next(){ digitalWrite(NEXT, HIGH); delay(PULSE); digitalWrite(NEXT, LOW); } void Prev(){ digitalWrite(PREV, HIGH); // Serial.println("PREV"); delay(PULSE); digitalWrite(PREV, LOW); } void otherStuff(){ CLOSED = true; CHANGED = 1; startTime = millis(); endTime = millis() - startTime; while(endTime < WAIT){ if(CLOSED == true){ VAL = (MULTIPLIER*(analogRead(IN))); if(VAL > 0.02){ CLOSED = false; CHANGED++; } } if(CLOSED == false){ VAL = (MULTIPLIER*(analogRead(IN))); if(VAL < 0.02){ CLOSED = true; CHANGED++; }} endTime = millis() - startTime; delay(1); } if(CHANGED == 2){PlPa();} if(CHANGED == 4){Next();} if(CHANGED == 6){Prev();} releaseVal(); } void releaseVal(){ CHANGED = 0; startTime = 0; endTime = 0; CLOSED = false; } void checkStatus(){ if(analogRead(SAMPLE) > 0.01){ STATUS = true;} else{ // Serial.println("Can't identify music, sending pulse..."); pinMode(PULSE, OUTPUT); digitalWrite(PULSE, HIGH); if(analogRead(SAMPLE) > 0.01){STATUS = true;} else{STATUS = false;} } digitalWrite(PULSE, LOW); pinMode(PULSE, INPUT); Started = millis(); Ended = 0; }