#include <TM1638.h>
TM1638 module(8, 9, 10); // data 8, clock 9, strobe 10

const byte tlo = A0, tlu = A1, tro = A2, tru = A3;
const byte ml_Enable = 11, mr_Enable = 3; //jeweils PWM-Ausgang
const byte ml_in1 = 12, ml_in2 = 13, mr_in3 = 4, mr_in4 = 2;
int vl=0;
void setup() {
  pinMode(ml_Enable,OUTPUT); digitalWrite(ml_Enable,LOW);
  pinMode(mr_Enable,OUTPUT); digitalWrite(mr_Enable,LOW);
  pinMode(ml_in1 ,OUTPUT); digitalWrite(ml_in1 ,LOW);
  pinMode(ml_in2,OUTPUT); digitalWrite(ml_in2,LOW);
  pinMode(mr_in3,OUTPUT); digitalWrite(mr_in3,LOW);
  pinMode(mr_in4,OUTPUT); digitalWrite(mr_in4,LOW);
  module.setDisplayToString("START");
}

void motor_links_vor() {
  digitalWrite(ml_in1 ,HIGH);   
  digitalWrite(ml_in2 ,LOW);   
  digitalWrite(ml_Enable,HIGH);
}
void motor_links_halt() {
  digitalWrite(ml_in1 ,HIGH);   
  digitalWrite(ml_in2 ,HIGH); 
  vl=0;  
  analogWrite(ml_Enable,vl);
}
void motor_links_rueck() {
  digitalWrite(ml_in1 ,LOW);   
  digitalWrite(ml_in2 ,HIGH);   
  digitalWrite(ml_Enable,HIGH);
}
void motor_links() {
  if (vl==0) {
      vl=100;
  } else {       
      vl=vl+50;
      if (vl>255) {
        vl=255;
      }
  }
  module.setDisplayToString("Ml"+String(vl));
  digitalWrite(ml_in1 ,HIGH);   
  digitalWrite(ml_in2 ,LOW);   
  analogWrite(ml_Enable,vl);
}

void loop() {
  byte keys = module.getButtons();
  module.setDisplayToDecNumber(keys, 0, false);  
  switch (keys) {
    case 0: 
      //module.setDisplayToString("SELECT");
      break;
    case 1:
      module.setDisplayToString("Ml vor");
      motor_links_vor();
      break;
    case 2: 
      module.setDisplayToString("Ml back");
      motor_links_rueck();
      break;
    case 4: 
      module.setDisplayToString("Ml stop");
      motor_links_halt();
      break;
    case 8: 
      motor_links();
      break;
  }
  delay(200);
}
