Ciao Uwe e grazie per la risposta.
Uso un Nano che ha le 8 porte analogiche (A0,A7).
Sono riuscito a far funzionare il tutto dopo una giornata a far fumare il cervello....
Il problema era che prima di mandare alta la porta selezionata dovevo mandare alta la porta del reset dei relè che sono bistabili. Quindi quando seleziono una antenna devo prima resettare tutti i relè di quelle bande. Il tutto per 2 in quanto sono ovviamente divise le bande HF da quelle VHF.
Ora devo "solo" riuscire a far apparire il nome dell'antenna selezionata sul display... poi dovrò far apparire all'avvio l'ultima antenna selezionata prima di spegnere il cui nome si è salvato sulla EEPROM, in modo da sapere quale antenna è collegata senza dover riselezionare per sicurezza.
Allego lo sketch che per ora resetta e commuta a dovere.
#include "NexButton.h"
#include "NexText.h"
NexButton b0 = NexButton(0, 1, "b0");
NexButton b1 = NexButton(0, 2, "b1");
NexButton b2 = NexButton(0, 3, "b2");
NexButton b3 = NexButton(0, 4, "b3");
NexButton b4 = NexButton(0, 5, "b4");
NexButton b5 = NexButton(0, 6, "b5");
char buffer[10] = {0};
NexTouch *nex_Listen_List[] =
{
&b0,
&b1,
&b2,
&b3,
&b4,
&b5,
NULL
};
void b0PopCallback(void *ptr)
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer,"ON"))
{
digitalWrite(8, HIGH);
delay(200);
digitalWrite(8,LOW);
delay(200);
digitalWrite(2, HIGH);
strcpy(buffer, "ON");
delay(200);
digitalWrite(2, LOW);
strcpy(buffer, "OFF");
}
}
void b1PopCallback(void *ptr)
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer,"ON"))
{
digitalWrite(8, HIGH);
delay(200);
digitalWrite(8,LOW);
delay(200);
digitalWrite(3, HIGH);
strcpy(buffer, "ON");
delay(200);
digitalWrite(3, LOW);
strcpy(buffer, "OFF");
}
}
void b2PopCallback(void *ptr)
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer,"ON"))
{
digitalWrite(8, HIGH);
delay(200);
digitalWrite(8,LOW);
delay(200);
digitalWrite(4, HIGH);
strcpy(buffer, "ON");
delay(200);
digitalWrite(4, LOW);
strcpy(buffer, "OFF");
}
}
void b3PopCallback(void *ptr)
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer,"ON"))
{
digitalWrite(9, HIGH);
delay(200);
digitalWrite(9,LOW);
delay(200);
digitalWrite(5, HIGH);
strcpy(buffer, "ON");
delay(200);
digitalWrite(5, LOW);
strcpy(buffer, "OFF");
}
}
void b4PopCallback(void *ptr)
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer,"ON"))
{
digitalWrite(9, HIGH);
delay(200);
digitalWrite(9,LOW);
delay(200);
digitalWrite(6, HIGH);
strcpy(buffer, "ON");
delay(200);
digitalWrite(6, LOW);
strcpy(buffer, "OFF");
}
}
void b5PopCallback(void *ptr)
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer,"ON"))
{
digitalWrite(9, HIGH);
delay(200);
digitalWrite(9,LOW);
delay(200);
digitalWrite(7, HIGH);
strcpy(buffer, "ON");
delay(200);
digitalWrite(7, LOW);
strcpy(buffer, "OFF");
}
}
void setup(void)
{
nexInit();
b0.attachPop(b0PopCallback, &b0);
b1.attachPop(b1PopCallback, &b1);
b2.attachPop(b2PopCallback, &b2);
b3.attachPop(b3PopCallback, &b3);
b4.attachPop(b4PopCallback, &b4);
b5.attachPop(b5PopCallback, &b5);
//setting port OUTPUT
pinMode(2, OUTPUT);// Deltaloop
pinMode(3, OUTPUT);// Dipolo 40mt
pinMode(4, OUTPUT);// Libero
pinMode(5, OUTPUT);// YagiU/Vhf
pinMode(6, OUTPUT);// Libero
pinMode(7, OUTPUT);// Libero
pinMode(8, OUTPUT);//azzeramento HF
pinMode(9, OUTPUT);//azzeramentoU/Vhf
//initializing port
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void loop(void)
{
nexLoop(nex_Listen_List);
}