// ======================================
// ========== TM1637 [INI] ==============
// ======================================

#define S1 8
#define S2 9

//PALAVRAS UTILIZADAS NESSE CÓDIGO
//	maTrix
//	inicia
//	brilho
//	pos_icao
//	val_or
//	pon_to
//	printVar
//	printBuffer
//	printSegs
//	bufferDigito
//	separaDigito


#include <TM1637Display.h>
#define CLK A5
#define DIO A4
#define maTrix display 
TM1637Display maTrix(CLK, DIO);
byte dATa[]={0,0,0,0};

//===================================
void inicia(){
    maTrix.setBrightness(0x0f); 
  }//fecha inicia
//===================================

//==========================================================
  void printVar(byte posi_cao,int val_or,byte pon_to){
     if(pon_to==1){pon_to=64;}
     maTrix.showNumberDecEx(val_or, pon_to, true, 4, posi_cao); // numero , ponto decimal , zeros à esquerda , quantidade de digitos no display , posição do cursor
  }//fecha printVar
//==========================================================

//==========================================================
void printSegs(byte posi_cao,byte val_or){
     dATa[posi_cao]=val_or;
     maTrix.setSegments(dATa);
  }//fecha printSegs()
//==========================================================

//==========================================================
void brilho(byte val_or){
    maTrix.setBrightness(val_or); 
}//fecha brilho()
//==========================================================

//==========================================================
void bufferByte(byte posi_cao, byte val_or){
    dATa[posi_cao]=val_or;
    maTrix.setSegments(dATa);
}//fecha printByte()
//==========================================================

//===========================================
void separaDigito(byte on_off){
  if(on_off==1){dATa[1]=dATa[1]+128;}
}//fecha separaDigito()
//===========================================

//===========================================
void printbuffer(){
   printSegs(0,dATa[0]);
   printSegs(1,dATa[1]);
   printSegs(2,dATa[2]);
   printSegs(3,dATa[3]);
}//fecha printbuffer()
//===========================================

//===========================================
void bufferDigito(byte posi_cao, byte val_or, byte pon_to){
    byte num=val_or;
    if(num==0){val_or=63;}
      if(num==1){val_or=6;}
        if(num==2){val_or=91;}
          if(num==3){val_or=79;}
            if(num==4){val_or=102;}
              if(num==5){val_or=109;}
                if(num==6){val_or=125;}
                  if(num==7){val_or=7;}
                    if(num==8){val_or=127;}
                      if(num==9){val_or=111;}
  if(pon_to==1 && val_or<128){val_or=val_or+128;}
  if(pon_to==0 && val_or>128){val_or=val_or-128;}
    dATa[posi_cao]=val_or;
}//fecha bufferDigito()
//===========================================

// ======================================
// ========== TM1637 [END] ==============
// ======================================









/*

//===============================================
//============== ADAFRUIT  [INI] ================
//===============================================


// PALAVRAS UTILIZADAS NESSE CÓDIGO
//	maTrix
//	inicia
//	pos_icao
//	val_or
//	pon_to
//	printBuffer
//	bufferDigito
//	separaDigito


#include "Adafruit_LEDBackpack.h"
Adafruit_7segment maTrix = Adafruit_7segment();

//=================================================
void inicia(){
    maTrix.begin(0X70); //Troque o endereço 0x70 se for diferente
}//fecha inicia
//=================================================

//===========================================================
void bufferDigito(byte posi_cao , byte val_or, byte pon_to){
    if(posi_cao>1){posi_cao++;}
    maTrix.writeDigitNum(posi_cao,val_or,pon_to); 
}//fecha printDigito()
//===========================================================

//=============================
void separaDigito(byte onoff){
    maTrix.drawColon(onoff);
}//fecha separaDigito
//=============================

//=====================================
void printbuffer(){  
    maTrix.writeDisplay();//Imprime Buffer
}//fecha printbuffer()
//======================================

//======================================
void brilho(byte val_or){
    maTrix.setBrightness(val_or);
}//fecha brilho()
//======================================


//======================================
void bufferByte( byte pos , byte valor){
  maTrix.writeDigitRaw(pos,valor);
}//fecha printByte()
//======================================

//===============================================
//============== ADAFRUIT  [END] ================
//===============================================

*/

//===================================================
//===================================================
//===================================================


byte u,d,c,m;
int contador;

void setup() {

pinMode(S1, INPUT);
pinMode(S2, INPUT);
 inicia();//Inicia Módulo
 brilho(15); 
  
  //------------- CONDIÇÕES INICIAIS ------------
  
  contador=0;
  
}//fecha setup()


void loop(){
  
int POT=analogRead(A1);
  
if(digitalRead(S1)==1 && contador<9999){
  contador++;
}

if(digitalRead(S2)==1 && contador>0){
  contador--;
}

m=contador/1000;

c=(contador-(m*1000))/100;

d=(contador-(m*1000)-(c*100))/10;

u=contador-(m*1000)-(c*100)-(d*10);

bufferDigito(0,m,0);
bufferDigito(1,c,0);
bufferDigito(2,d,0);
bufferDigito(3,u,0);

printbuffer();

delay(300);

}//fecha loop()
4-Digit Display