Buongiorno. Ho scritto un piccolo softwarino che mi dovrebbe consentire di leggere in fase di setup quali sono i PIN che voglio siano di INPUT, e i PIN che vogliono fungano da output.
Questo è il codice del setup.
//MAPPING PIN
typedef struct
{
int numPin;
int typePin;
String message;
} record_pin;
record_pin pins[9];
Serial.println("setup pin");
//ABILITO I PIN IN BASE A COME SONO STATI CONFIGURATI
int numCellMessage = (int)eeprom_pin1_message;
for(int i = 0; i < 9; i++){
String message ="";
int numCell = (int)eeprom_pin1;
numCell += i;
//Serial.println(numCell);
pin[0] = getAddressIpMqtt(numCell);
//Serial.println(pin[0]);
int nPin = i+1;
if(pin[0] == 1){
//Serial.println("PIN numero " + String(nPin) + " OUTPUT");
message = read_String(numCellMessage);
pinMode(getPinMapping(nPin), OUTPUT);
}else if(pin[0] == 0){
//Serial.println("PIN numero " + String(nPin) + " INPUT");
pinMode(getPinMapping(nPin), INPUT_PULLUP);
}
digitalWrite(getPinMapping(nPin), LOW);
digitalWrite(getPinMapping(nPin), LOW);
digitalWrite(getPinMapping(nPin), LOW);
delay(50);
//POPOLO L ARRAY DI STRUTTURA DATI PER POTER POI AVERE IL MAPPING COMPLETO DI TUTTI I PIN GIà PRONTO
pins[i] = {getPinMapping(nPin), pin[0], message};
//
numCellMessage += 15;
}
}
Nel codice creo un array in cui inserisco un oggetto in cui inserisco il numero del PIN, il suo tipo 0= input, 1 = output.
Nel loop invece ho scritto questo codice:
int sizePins = (sizeof(pins) / sizeof(pins[0]));
for(int i = 0; i < sizePins; i++){
record_pin p = pins[i];
if(p.typePin == 0){//PIN DI INPUT IO DEVO VERIFICARE SE STA CAMBIANDO QUALCOSA
int sensorValue = digitalRead(p.numPin);
Serial.println(String(p.numPin) + " " + sensorValue);
if (sensorValue == HIGH) {
//Serial.println("mando una notifica push");
//digitalWrite(13, LOW);
}
}
//Serial.println("num pin " + String(p.numPin) + " tipo pin " + String(p.typePin) + " message: " + p.message);
delay(1000);
}
int getPinMapping(int idPin)
{
switch (idPin) {
case 1: return 16;
case 2: return 5;
case 3: return 4;
case 4: return 14;
case 5: return 12;
case 6: return 13;
case 7: return 0;
case 8: return 2;
case 9: return 15;
default : return -1;
// Qui sai che x è > 0 && < 4
break;
}
}
Il risultato aprendo la conesole, è il seguente, non so per quale motivo ma i PIN 4,12 hanno sempre valore HIGH (1) anche se ad arduino non ho collegato assolutamente nulla. Mentre per i pin 15 e 16 il valore è 0 come mi aspetterei.
Mi sapete aiutare?
getAddressIpMqtt(); restituisce i seguenti valori (2, 8, 4, 6)
Utilizzo per il momento una Wemos D1 come board