#define pots_5v       12
#define duration_pin  A1
#define pulses_pin    A0

#define pedal_pin     A2
#define pedal_pin_gnd A3
#define pedal_pressed 0

#define SSR 2

#define n_measures 50

#define min_pulse 10
#define max_pulse 200
#define between_pulses  10

#define min_n_pulses 1
#define max_n_pulses 10

#define SSR_ON  1
#define SSR_OFF 0

int duration = min_pulse;
int pulses = min_n_pulses;

void setup() {
  Serial.begin(9600);
  
  pinMode(duration_pin, INPUT);
  pinMode(pulses_pin, INPUT);
  pinMode(pedal_pin, INPUT_PULLUP);

  pinMode(pedal_pin_gnd, OUTPUT);
  pinMode(SSR, OUTPUT);
  pinMode(pots_5v, OUTPUT);

  digitalWrite(pedal_pin_gnd, 0);
  digitalWrite(SSR, SSR_OFF);
  digitalWrite(pots_5v, 1);
}

void loop() {
  if(check_pedal()){
    Serial.println("Pedal pressed");
    Serial.print("Duration: ");
    Serial.println(duration);
    Serial.print("Pulses: ");
    Serial.println(pulses);
    for(int i = 0; i < pulses; i++){
      Serial.println("Fire!");
      digitalWrite(SSR, SSR_ON);
      delay(duration);
      digitalWrite(SSR, SSR_OFF);
      delay(between_pulses);
    }
  }

  duration = max_pulse + min_pulse - map(measure(duration_pin), 0, 1023, min_pulse, max_pulse);
  pulses = max_n_pulses - map(measure(pulses_pin), 0, 1023, min_n_pulses, max_n_pulses);
  
}

boolean pressed = false;

boolean check_pedal(){
  if(digitalRead(pedal_pin) == pedal_pressed){
    if(pressed)
      return false;
    delay(5);
    if(digitalRead(pedal_pin) == pedal_pressed){
      pressed = true;
      return true; 
    } 
  }  

  pressed = false;
  return false;
}

int measure(int pin){
  unsigned long sum = 0;
  
  for(int i = 0; i < n_measures; i++)
    sum += analogRead(pin);

  return sum/n_measures;
}
