project_wirelexx/ARDUINO/PRODUCT/PRODUCT.ino
2018-10-05 13:26:38 +01:00

188 lines
4.1 KiB
C++
Executable File

#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);}
}