Salve a tutti,
avrei bisogno di dimmerare e accendere e spegnere 2 led bianchi e 2 rgb (+ cambio colore per gli rgb) il tutto da interfaccia web...
A causa dei pin PWM occupati dall'Ethernet shield secondo voi ho bisogno di un digital pot (ad5206) almeno per gli rgb? Questo complica le cosa con il controllo web?
Grazie
Beh intanto ho trovato questo per accendere e spegnere un led...
http://www.ioscripto.it/?p=1
basta convertirlo in analogWrite per dimmerarlo...
EDIT: qualche consiglio?
In teoria il problema è in :
int ledValue = readString.indexOf("L=1");
cosa devo mettere per far leggere il numero e utilizzarlo in analogWrite?
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
/*
Simple Ethernet Test
Arduino server outputs simple text to browser
and controlling LED with simple checkbox
The circuit:
* Arduino Duemilanove
* Arduino Ethernet shield
* Basic FTDI breakout 5V
* LED connected to GND and digital pin 4 via resistor
*/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 0, 23 }; // ip in lan
byte gateway[] = { 192, 168, 0, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80); //server port
int ledPin = 8; // LED pin
String readString; //string
boolean LEDON = false; //LED status flag
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
Client client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c); //store characters to string
//if HTTP request has ended
if (c == '\n' && currentLineIsBlank) {
Serial.print(readString);
int ledValue = readString.indexOf("L=ledValue");
ledValue = constrain(ledValue, 0, 255);
analogWrite(ledPin, ledValue); // set the LED on
// now output HTML data starting with standart header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// inizializzo pagina (da togliere se uso ajax)
client.print("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
//send first heading
client.println("<h1>LED CONTROL by internet connection by Viser</h1>");
client.println("<hr />");
client.println("<h1>LED control</h1>");
//address will look like <a class="linkclass" href="http://192.168.1.110/?L=1">http://192.168.1.110/?L=1</a> when submited
client.println("<form method=get name=LED><input type=text name=L value=1>LED
<input type=submit value=submit></form>");
client.println("
");
//printing LED status
client.print("<span>LED status: </span>");
if (LEDON) {
client.println("<span style='color:green'>ON</span>");
}
else
{
client.println("<span style='color:grey'>OFF</span>");
}
client.print("<h2><a href='/?L=1'>accendi!</a> | <a href='/?L=0'>spegni!</a></h2>");
// chiudo pagina da togliere se uso ajax
client.println("</body></html>");
//clearing string for next read
readString="";
//stopping client
client.stop();
} //if c == /n .... devo capire che significa
} // if client available
} // while client connesso
} // if client
} //loop
Ma l'eth shield occupa TUTTI i pin PWM? Non credo...
Questa istruzione mette in ledValue la posizione di "L=" nella stringa, non il valore del parametro!
int ledValue = readString.indexOf("L=ledValue");
io metterei:
int ValPos= readString.indexOf("L=ledValue")+2;
int ValLen=length(readString)-ValPos;
poi pero' non mi ricordo come si converte una stringa in un intero...
Per la cosa dei pin PWM ho visto che me ne restano abbastanza.
Ti ringrazio per la risposta ma penso di non aver capito cosa intendi...
Che sia forse più semplice prendere spunto da un progetto di rgb e renderlo a un colore?
ValPos e ValLen che cosa sono scusa?
nessuno sa come inviare una variabile che non sia solo 0/1 da una pagina web?
è possibile inviare i dati d una pagina nel seriale e poi rileggerli da lì?
maxidvd:
ValPos e ValLen che cosa sono scusa?
nessuno sa come inviare una variabile che non sia solo 0/1 da una pagina web?
è possibile inviare i dati d una pagina nel seriale e poi rileggerli da lì?
La POSizione e la lunghezza (LENgth) della stringa che contiene il valore.
per cambiare il valore.... basta cambiare il valore nell'url,no ?!?
invece di
http://192.168.1.110/?L=1
metti
o altro.