Buongiorno, ho sviluppato un piccolo sketch che mi permetterà di comandare una scheda Relè che si eccitano a 5V. Il tutto comandabile da smarpthpone
Il giro funziona nel senso che tramite smartphone riesco a far arrivare i comandi ad arduino, ma ho due problemi ci deve essere qualcosa che sbaglio.
I led quando ARDUINO parte sono tutti attivi (i pin da 1 a 9), quindi quando avvio arduino accenderà tutto.
Per chiamare arduin faccio una semplice get così 192.168.110.177/ON-1 aprendo il monitor seriale stampa i messaggi luce accesa 3 volte. Invece dovrebbe accendere la luce una volta e fermarsi.
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <dht11.h>
#include "EmonLib.h" // Include Emon Library
EnergyMonitor emon1; // Create an instance
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 110, 177 }; // indirizzo IP della shield
byte gateway[] = { 192, 168, 110, 1 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80);
int pin1 = 1; // LED pin
int pin2 = 2; // LED pin
int pin3 = 3; // LED pin
int pin4 = 4; // LED pin
int pin5 = 5; // LED pin
int pin6 = 6; // LED pin
int pin7 = 7; // LED pin
int pin8 = 8; // LED pin
int pin9 = 9; // LED pin
int pin10 = 10; // LED pin
int pin11 = 11; // LED pin
int pin12 = 12; // LED pin
int pin13 = 13; // LED pin
String readString;
boolean LEDON = false;
/*-----( Declare objects )-----*/
dht11 DHT11;
/*-----( Declare Constants, Pin Numbers )-----*/
#define DHT11PIN 4
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(pin9, OUTPUT);
Serial.begin(9600);
emon1.current(1, 11.8); // Current: input pin, calibration.
}
void loop(){
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin6, LOW);
digitalWrite(pin7, LOW);
digitalWrite(pin8, LOW);
digitalWrite(pin9, LOW);
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c);
//Serial.print(c);
if (c == '\n' && currentLineIsBlank) {
// Serial.print(readString);
//a questo punto avrò la stringa completa di GET comando da eseguire HTTP
//devo eliminare il get e http e interpretare il comando
readString = getValue(readString, ' ', 1);
//Serial.print(readString);
if(readString.indexOf("ON") > 0) {
//in questo caso devo leggere in pin ed accendere la luce
String prova = readString.substring(4);
int pinOn = prova.toInt();
digitalWrite(pinOn, HIGH);
LEDON = true;
Serial.println("LUCE ACCESA fin");
Serial.println(pinOn);
}else if (readString.indexOf("OFF")>0){
//in questo caso devo leggere in pin e spegnere la luce
//Serial.println("pippo ");
String prova = readString.substring(5);
int pinOn = prova.toInt();
digitalWrite(pinOn, LOW);
Serial.println(pinOn);
LEDON = false;
Serial.println("LUCE SPENTA ");
}else if (readString.indexOf("RELE")>0){
//RECUPERO LA CORRENTE PASSATA DAL PIN
String prova = readString.substring(6);
int pinOn = prova.toInt();
digitalWrite(pinOn, HIGH);
Serial.println("RELE ACCESA ");
LEDON = true;
//ATTENDO DUE SECONDI, POI SPENGO IL PIN
delay(2000);
digitalWrite(pinOn, LOW);
Serial.println("RELE SPENTA ");
Serial.println(pinOn);
}
readString="";
client.stop();
}//FINE IF DI LETTURA
}//FINE IF CLIENT
}//FINE WHILE
}//FINE IF PRINCIPALE
}//FINE LOOP