#include "LowPower.h" #define PLAY 11 #define VUP A1 #define VDOWN A0 #define NEXT 13 #define PREV 12 #define PWR 6 #define IN A7 /*ANALOG*/ #define MULTIPLIER 0.0048875855 //Arbitrary value to determine voltage //#define PULSE 500 //How long the soc presses the bluetooth buttons for #define WAIT 500 //How long it waits for single/double/triple click #define SAMPLE A6 //Pin to read connected/disconnected status #define PULSE 10 //Pin that sends pulse to determine conected/disconnected state #define BAT A5 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); pinMode(SAMPLE, INPUT); pinMode(PULSE, INPUT); pinMode(BAT, INPUT); pinMode(PWR, OUTPUT); digitalWrite(PWR, HIGH); //Serial.begin(9600); //-----DEBUG Started = millis(); } void loop() { scanPins(); Ended = millis() - Started; if(Ended > 2000){checkStatus();} //testVoltage(); } void scanPins(){VAL = (MULTIPLIER*(analogRead(IN))); if (VAL < 1.90){ delay(1); VAL = (MULTIPLIER*(analogRead(IN))); if((VAL > 1.75) && (VAL < 1.80)){ volUp(); } if((VAL > 1.65) && (VAL < 1.73)){ volDown(); } if(VAL < 0.6){ Functions(); }}} void volUp(){ analogWrite(VUP, 1023); delay(500); // Serial.println("UP"); //-----DEBUG analogWrite(VUP, 0); } void volDown(){ analogWrite(VDOWN, 1023); delay(500); // Serial.println("DOWN"); //-----DEBUG analogWrite(VDOWN, 0); } void PlPa(){ digitalWrite(PLAY, HIGH); delay(500); // Serial.println("PLAY/PAUSE"); //-----DEBUG digitalWrite(PLAY, LOW); } void Next(){ digitalWrite(NEXT, HIGH); delay(500); // Serial.println("NEXT"); //-----DEBUG digitalWrite(NEXT, LOW); } void Prev(){ digitalWrite(PREV, HIGH); // Serial.println("PREV"); //-----DEBUG delay(500); digitalWrite(PREV, LOW); } void Functions(){ CLOSED = true; CHANGED = 1; startTime = millis(); endTime = millis() - startTime; while(endTime < WAIT){ if(CLOSED == true){ VAL = (MULTIPLIER*(analogRead(IN))); if(VAL > 0.6){ CLOSED = false; CHANGED++; } } if(CLOSED == false){ VAL = (MULTIPLIER*(analogRead(IN))); if(VAL < 0.6){ 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(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){ STATUS = true;} else{ // Serial.println("Can't identify music, sending pulse..."); //-----DEBUG pinMode(PULSE, OUTPUT); digitalWrite(PULSE, HIGH); if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){STATUS = true;} else{STATUS = false;} } digitalWrite(PULSE, LOW); pinMode(PULSE, INPUT); //-----DEBUG //if(STATUS == true){Serial.println("CONNECTED");} //if(STATUS == false){Serial.println("DIS--CONNECTED");} //-----DEBUG if(STATUS == false){delay(50); CheckAgain();} Ended = 0; Started = millis(); } void CheckAgain(){ if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){ STATUS = true;} else{ // Serial.println("Can't identify music, sending pulse..."); //-----DEBUG pinMode(PULSE, OUTPUT); digitalWrite(PULSE, HIGH); if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){STATUS = true;} else{STATUS = false;} } digitalWrite(PULSE, LOW); pinMode(PULSE, INPUT); if(STATUS == false){ToggleLP();} } void ToggleLP(){ // Serial.println("SLEEPING"); //-----DEBUG digitalWrite(PWR, LOW); LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF); digitalWrite(PWR, HIGH); } void testVoltage(){ if(analogRead(BAT) < 530){digitalWrite(PWR, LOW); LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); } else{digitalWrite(PWR, HIGH);} }