8 Relè comandati via i2c ... come comandarli uno alla volta separatamente


mi scuso in anticipo per la domanda che molti di voi risulterà banale.

ho un pcb con vari integrati mcp23008 che cascata controllano 8 relè e poi degli ingressi.
per quanto concerne relè ho provato con la libreria adafruit è modificando la stessa addr in 0x22(mio indirizzo e non 0x20 standard) riesco controllare singolarmente di accendere o spegnere vari relè in modo separato cioè accendo esempio il 4 il 5 e il 6 e poi spengo solo il 5.
il problema è che non vorrei usare la libreria adafruit perché ho dovuto forzatamente modificarla come già detto.
in internet ho trovato un esempio dove utilizza solo la libreria wire.h e accende e spegne in sequenza gli 8 relè il problema che non riesco capire come posso accendere e spegnere relè singolarmente come ho riportato sopra..
qualcuno mi indica come fare
grazie mille

di seguito riporto il codice esempio

code: [select]
// distributed free-will license.
// use way want, profit or free, provided fits in licenses of associated works.
// mcp23008
// code designed work mcp23008_i2cr8g5le_10a i2c relay controller available controleverything.com.
// https://www.controleverything.com/content/relay-controller?sku=mcp23008_i2cr8g5le_10a#tabs-0-product_tabset-2

#include <wire.h>

// mcp23008_i2cr8g5le i2c address 0x20(32)
#define addr 0x20

int data;
void setup()
{
  // initialise i2c communication master
  wire.begin();
  // initialise serial communication, set baud rate = 9600
  serial.begin(9600);

  // start i2c transmission
  wire.begintransmission(addr);
  // select iodir register
  wire.write(0x00);
  // pins configured output
  wire.write(0x00);
  // stop i2c transmission
  wire.endtransmission();
  delay(500);
}

void loop()
{
  // turning relays on, 1 one
  data = 0x01;
  (int = 0; < 8; i++)
  {
    // start i2c transmission
    wire.begintransmission(addr);
    // select gpio register
    wire.write(0x09);
    // pins set logic high
    wire.write(data);
    // stop i2c transmission
    wire.endtransmission();

    // output data serial monitor
    serial.print("turning relay ");
    serial.print(i);
    serial.println(" on");
    data = data << 1;
    data = data + 1;
    delay(500);
  }

  // turning relays off, 1 one
  data = 0xfe;
  (int = 0; < 8; i++)
  {
    // start i2c transmission
    wire.begintransmission(addr);
    // select gpio register
    wire.write(0x09);
    // pins set logic low
    wire.write(data);
    // stop i2c transmission
    wire.endtransmission();

    // output data serial monitor
    serial.print("turning relay ");
    serial.print(i);
    serial.println(" off");
    data = data << 1;
    delay(500);
  }
}/code]

devi settare o resettare singoli bit del registro dello stato dei pin del mcp.
ciao uwe


Arduino Forum > International > Italiano > Software (Moderator: leo72) > 8 Relè comandati via i2c ... come comandarli uno alla volta separatamente


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts