Incompatibilità tra Libreria Ethernet e TinkerKit Sensor Shield

Ciao sono Massimiliano, un entusiasta neofita di Aruduino. Dopo alcune prove iniziali con l'Ethernet Shield ora sto sviluppando un progetto di automazione pilotato dal web con Arduino 2009/ATMega328, Ethernet Shield, TinkerKit Sensor Shield e TinkerKit Relay Module usando Arduino 1.01 e sono bloccato in parte per l’insufficiente documentazione e la presenza di sketch errati e incompilabili relativi alla sezione relay.

Dopo svariati tentativi ho scoperto delle incompatibilità che spero qualcuno mi aiuti a risolvere. :slight_smile: :slight_smile: :slight_smile:

Il mio codice è molto più complesso ma qui riporto un semplice codice d’esempio che abilita e disabilita un relay ogni due secondi per permettere una prova (privo di istruzioni non rilevanti) che fa capire il problema:
Quando viene inizializzata la libreria Ethernet tutti gli output dei relay rimangono bloccati in posizione attiva!

Ecco il codice:

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <TinkerKit.h>

TKRelay relay(O0);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };    

void setup() {
Ethernet.begin(mac); // se attivata questa istruzione tutti gli output dei relay rimangono attivi
}

void loop() {
                delay(2000);
                relay.on();
                delay(2000);
                relay.off(); 
}

Grazie in anticipo per l'aiuto!

Il TinkerKit Sensor Shield usa 12 Pin come Entrate/Uscite. Le entrate analogiche e le uscite PWM

nel file ThinkerKit.h della libreria leggi:

#define I0 A0
#define I1 A1
#define I2 A2
#define I3 A3
#define I4 A4
#define I5 A5

#define O0 11
#define O1 10
#define O2 9
#define O3 6
#define O4 5
#define O5 3

Non puoi usare O0 e O1 perché servono per il SPI per la Ethernetshield.
Ciao Uwe

Ciao,

anche se per fare quel test, hai collegato lo shield ethernet al tuo router tramite cavo ethernet?
perchè così per come hai scritto lo sketch l'arduino inizializza la parte ethernet richiedendo un indirizzo IP tramite DHCP, il metodo:

Ethernet.begin(mac);

di default ha un timeout di 60 secondi. Quindi se non riceve un indirizzo IP prima del timeout, sei costretto ad aspettare per veder partire il tuo sketch.

Aggiungo solo una cosa da quanto detto da Uwe, solo sulla Arduino Duemilanove/Uno non è possibile usare i pin O0 e O1 se si usa la ethernet shield, sulla Mega i pin SPI sono in una posizione differente e sulla Leonardo solo sul connettore SPI dedicato, quindi con queste due schede è possibile usate tutti e sei gli output del tinkerkit sensor shield contemporaneamente con l'ethernet shield.

... grazie Uwe! ... avevo fatto una prova ma solo con l'uscita O1 ... ora con 02 e O3 funziona perfettamente ... e grazie anche a te, Federico, per la precisazione sull'ethernet (e la dritta sulle schede)! ... devo dire che nel mio caso l'ho provata sempre con l'ethernet collegata e nel codice completo ho assegnato anche l'IP con questo metodo:

...
// assegno mac e ip
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192, 168, 0, 234 }; 

void setup()
{
  // avvio la comunicazione seriale a 9600 bps
  Serial.begin(9600); 
  Serial.println("Programma avviato ...");
  // inizializzo ethernet
  Ethernet.begin(mac, ip);
}
...

... spulciando nella libreria ho anche visto che è possibile richiedere lo stato del relay ma non mi è chiaro come scrivere il codice ... ci studierò su! ... grazie ancora a tutti ... :slight_smile: :slight_smile: :slight_smile: