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.
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();
}
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 ...