//nao fundional pendente de alteracao
//
//MUXES
#include <light_CD74HC4067.h>
#define nmux 3 // s0 s1 s2 s3: select pins
CD74HC4067 mux[nmux]={{5,6, 7, 8},{5,6,7,8},{5,6,7,8}}; // create a new CD74HC4067 object with its four select lines - 8,9,10,11
byte muxen[nmux]={2,3,4}; //mux enable(LOW)/disable(HIGH) pins
int signal_pin[nmux] = {14,15,16}; // Pin A0 - Connected to Sig pin of CD74HC4067
//ENCODERS
#define nenc 2 //number of encoders
//#define encA 14 //pin adress of encoders CLK A0
//#define encB 15 //pin adress of encoders DT A1
//byte vencs[nenc][2]={{0,0},{0,0}}; //values of [encoders] [new_value,previous_value]
int val[nenc][5]={{0,0,0,0,0},{0,0,0,0,0}}; //{aState[CLK pin], B[DT pin],SWclick,aLastState, counter}
/*
#define encC 16 //encoder buttons A2 pin- assign the 'click' from SW encoder pin
unsigned long time=0; //tempo decorrido desde o inicio do programa: p/ evitar dupla detecção dos switches
int counter = 0;
int aState;
int aLastState; */
bool mostra=false;
void setup() {
Serial.begin(9600);
for (byte i = 0; i < nmux; i++) { //SETUP dos MUXES
pinMode(signal_pin[i], INPUT); // Set as input for reading through signal pin
pinMode(muxen[i], OUTPUT);
digitalWrite(muxen[i],HIGH);
}
//SETUP dos ENCODERS
/*pinMode (encA,INPUT);
pinMode (encB,INPUT);
pinMode (encC,INPUT);*/
for (byte i = 0; i < nenc; i++) {
val[i][3]=digitalRead(signal_pin[i]);
}
}
void loop() { //otimizado
for (byte i = 0; i < nenc; i++) { // loop through channels 0 - 15 : 2 para testes
for (byte m = 0; m < nmux; m++) { //loop through muxes
digitalWrite(muxen[m], LOW); delay(10);
mux[m].channel(i); delay(10);
val[i][m] = digitalRead(signal_pin[m]); delay(1); // Read analog value
digitalWrite(muxen[m], HIGH); delay( 5);
for(int e :val){ Serial.print(e); }
Serial.println();
} //fim leitura de um canal / 1 encoder
if (val[i][0]!=val[i][3] && val[i][0]==1){
mostra=true;
if(val[i][1]!=val[i][0]){ val[i][4]++; }
else{ val[i][4]--; }
}else {mostra=false; }
val[i][3] = val[i][0];
if (mostra){
Serial.print(" Channel "+String(i+1)+": "+String(val[i][0])); // Print value
Serial.print(", "+String(val[i][1])+", "+String(val[i][2])+", "+String(val[i][4]));
delay(5);
}
} //fim leitura de canais / encoders
/*
for(byte i=0; i<nenc ; i++){ //percorre todos os encoders
byte tmp=encs[i].get_change(); //ve o valor de cada um
if (tmp!=0){ vencs[i][1]=vencs[i][0]; vencs[i][0]+=tmp; //se mudou, atualiza e...
Serial.print(encs[i].get_count()); Serial.print(' ');} //depois imprime
if( (digitalRead(encb[i]))==0 && millis()-time>100){
Serial.print("botao pressionado:"); Serial.println(i); //ve se os botoes dos encoders foram pressionados
time=millis();};
}*/
delay(500); //da um tempinho pro Arduino descansar
}