Salve, come da mia presentazione sono molto a corto di nozioni di programmazione ARDUINO.
Ho un ELEGOO Mega 2560 R3 (compatibile Arduino).
Mi sono cimentato per rappresentazione luci e musica con il software Vixen modificando programma trovato in internet e facendo funzionare dei relè "stato solido", per un totale di 64 canali (qua tutto OK).
Per il prossimo anno volevo aumentare notevolmente i canali utilizzando anche porte digitali per il funzionamento di Led Pixel, di conseguenza volevo inserire degli Expander MCP23017 per il solo funzionamento dei relè.
Ho trovato informazioni per il collegamento dell' Expander ed inserisco anche lo schizzo di come ho fatto per sicurezza ed una foto dei collegamenti.
Per il codice arduino, avrei iniziato con un'integrato per poi (se tutto andasse bene) aumentarne fino a 5 in totale.
Visto la mia inesperienza sicuramente c'è qualcosa che non funziona nel codice che dovrebbe accendermi tutti led (come prova di funzionamento), purtroppo questo non accade, inserisco il codice che ho provato:
#include "Wire.h"
void setup() {
Wire.begin(); // avvio I2C Bus
Wire.beginTransmission(0x20); // MCP23017 indirizzo
Wire.write(0x00); // IODIRA registro
Wire.write(0x00); // imposta tutte le porte A in uscita
Wire.endTransmission();
Wire.beginTransmission(0x20); // MCP23017 indirizzo
Wire.write(0x01); // IODIRB registro
Wire.write(0x00); // imposta tutte le porte B in uscita
Wire.endTransmission();
}
// Funzione per porte A LED ON / OFF
void ledBlinkPortA(byte a)
{
Wire.beginTransmission(0x20); // inizio trasmissione 1°MCP
Wire.write(0x12); // indirizzo porte A
Wire.write(a);
Wire.endTransmission();
delay(100);
}
// Funzione per porte B LED ON / OFF
void ledBlinkPortB(byte a)
{
Wire.beginTransmission(0x20); // inizio trasmissione 1°MCP
Wire.write(0x13); // indirizzo porte B
Wire.write(a);
Wire.endTransmission();
delay(100);
}
void loop() {
ledBlinkPortA((byte)0xfe); // LED1 ON
ledBlinkPortA((byte)0xfd); // LED2 ON
ledBlinkPortA((byte)0xfb); // LED3 ON
ledBlinkPortA((byte)0xf7); // LED4 ON
ledBlinkPortA((byte)0xef); // LED5 ON
ledBlinkPortA((byte)0xdf); // LED6 ON
ledBlinkPortA((byte)0xbf); // LED7 ON
ledBlinkPortA((byte)0x7f); // LED8 ON
ledBlinkPortB((byte)0xfe); // LED9 ON
ledBlinkPortB((byte)0xfd); // LED10 ON
ledBlinkPortB((byte)0xfb); // LED11 ON
ledBlinkPortB((byte)0xf7); // LED12 ON
ledBlinkPortB((byte)0xef); // LED13 ON
ledBlinkPortB((byte)0xdf); // LED14 ON
ledBlinkPortB((byte)0xbf); // LED15 ON
ledBlinkPortB((byte)0x7f); // LED16 ON
}
chiedo lumi di cosa ho sbagliato o di cosa ho omesso per un buon funzionamento.
Grazie mille
buona giornata
Graziano