Bueno, anoche pensaba como resolver esto de modo elegante y creo haberlo resuelto.
Como no vi hasta ahora algo respecto el manejo MANUAL AUTOMATICO, esta funcionando en modo AUTOMATICO.
Me queda claro que es un selector de Antes de HF de 160metros a 6 metros, pero bueno, en lo personal me gusta saber para que es, pero eso ocurre por mi nivel de curiosidad.
Aca mi solución, presta atención a la selección de piens utilizados.
En lo personal yo usaria uno o dos 74595s para ahorrar pines, y si quieres agregar un LCD por ejemplo, y un teclado para uso manual.
Por ahora chequea esto.
// BCDA BCDB BCDC BCDD WARC BAND
const byte Entradas[6] = { 8, 9, 10, 11, 12, 13};
//-----------------------------
// 160m 80m 40m 30m 20m 17m 15m 12m 10m 6m
const byte Salidas[10] = { A5, A4, A3, A2, 2, 3, 4, 5, 6, 7};
const byte matrix[10][10] = {
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, // 1
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, // 2
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, // 3
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, // 4
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, // 5
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, // 6
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, // 7
{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, // 8
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}; // 9
//-------------------------------
int valorBCD, valorBCDAnt=0;
//----------------------------
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
for (int i=0; i<6; i++) {
pinMode(Entradas[i], INPUT);
}
//-------------------------------
for (int i=0; i<10; i++) {
pinMode(Salidas[i], OUTPUT);
}
}
void loop(){
valorBCD = LeerBCDDecimal();
if (valorBCD != valorBCDAnt)
Serial.println(valorBCD);
valorBCDAnt = valorBCD;
for (int i=0; i<=10; i++) {
if (i== valorBCD)
digitalWrite(Salidas[i], HIGH);
else
digitalWrite(Salidas[i], LOW);
}
}
int LeerBCDDecimal(){
int ValorDecimal;
byte datA = digitalRead(Entradas[0]);
byte datB = digitalRead(Entradas[1]);
byte datC = digitalRead(Entradas[2]);
byte datD = digitalRead(Entradas[3]);
ValorDecimal = (datD << 3) + (datC <<2) + (datB << 1) + datA;
byte WARC = digitalRead(Entradas[4]);
byte BAND = digitalRead(Entradas[5]);
if (WARC && BAND) {
switch (ValorDecimal) {
case 4:
case 6:
case 8:
ValorDecimal = 7; // revisar
break;
case 5:
case 7:
case 9:
ValorDecimal = 8;
break;
default:
break;
}
}
return ValorDecimal;
}