Offline
Newbie
Karma: 0
Posts: 24
|
 |
« Reply #30 on: February 03, 2012, 11:23:28 am » |
Bueno al fin esta funcionando  , gracias Sergegsx, ahora a seguir con el proyecto...vos sabes q he probado seguramente como te lo mande y no andaba jaaa toy casi seguro  ,bueno en breve ire postiando adelantos y espero que sean siempre adelantos y no atrancadas jee, saludos.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1241
Arduino rocks
|
 |
« Reply #31 on: February 03, 2012, 11:35:47 am » |
por favor marca el titulo del post con el texto solucionado. me alegro que te funcione.
|
|
|
|
|
Logged
|
|
|
|
|
Ciudad Real
Offline
God Member
Karma: 1
Posts: 747
Arduino rocks
|
 |
« Reply #32 on: February 04, 2012, 07:43:05 am » |
Después de todo podrías poner el código que rula bien  Por que sirva de ayuda para los que vengan después y busquen sobre el mismo problema. Lo podríais poner también en el playground Un saludo
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1241
Arduino rocks
|
 |
« Reply #33 on: February 05, 2012, 12:49:43 pm » |
Pipper como dice DonGato podrias poner el codigo que tienes que funciona correctamente. Luego ya postearas mas avances pero un simple ejemplo del codigo funcional para cerrar el post como solucionado. Sino los esfuerzos en ayudarte solo te beneficias tu, y no devuelves nada a la comunidad, lo cual en otras ocasiones puede generar que la comunidad no te ayude tanto.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 24
|
 |
« Reply #34 on: February 08, 2012, 12:15:10 pm » |
Aca dejo el codigo funcionando, claro que no tengo drama en poner el codigo  para eso son estas comunidades no?, para compartir: El codigo lo que hace es manejar el encendido y apagado de 3 led via web con php y mysql(donde arduino es el cliente), saludos. #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 1, 88 }; byte server[] = {192, 168, 1,33 }; Client client(server, 80); int g=0; int posicion=0; int prend; int foco;
void setup() { Serial.begin(9600); Ethernet.begin(mac, ip);
} void loop() { delay(2000); recibirdatos(); while (client.available()) { if (g<15){ char dato_recibido = client.read(); if (dato_recibido=='B' && posicion==0){ posicion=1; Serial.println("POSICION 1"); Serial.println(dato_recibido); } if (((dato_recibido=='H')) && posicion==1){ posicion=2; Serial.println("POSICION 2"); Serial.println(dato_recibido); } if (((dato_recibido=='1')||(dato_recibido=='2')||(dato_recibido=='3')||(dato_recibido=='4')||(dato_recibido=='5')) && posicion==2){ posicion=3; if (dato_recibido=='1') foco=13; if (dato_recibido=='2') foco=28; if (dato_recibido=='3') foco=30; Serial.println("POSICION 3"); Serial.println(dato_recibido); } if (((dato_recibido=='A')||(dato_recibido=='Y')) && posicion==3){ posicion=4; if (dato_recibido=='A') prend=1; if (dato_recibido=='Y') prend=0; Serial.println("POSICION 4"); Serial.println(dato_recibido); Serial.println(prend); } if (dato_recibido=='F' && posicion==4){ posicion=0; pinMode(foco, OUTPUT); digitalWrite(foco,prend); Serial.println("POSICION 5"); Serial.println(dato_recibido); Serial.println(prend); Serial.println(foco); } g=g+1; } else{ char d = client.read(); Serial.print("");} } }
void recibirdatos() { g=0; //Serial.println("Dentro de la funcion"); delay(100);
if (client.connect()) { Serial.println("Connected"); client.println("GET /prueba2.php?led=1&led1=2&led2=3"); client.println(); } else { Serial.println(""); } if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); } } Bueno es mas o menos como lo tengo hasta ahora, lo que hago es recibir datos tipo trama por ejemplo: BH1AF (donde B me indica el inicio de la trama, H para conotar habitacion, 1 el numero de la habitacion, A o Y para prendido o apagado, y F final de la trama), bien a la hora de recibir los datos si se fijan he puesto un if(g<15) eso es para q lea los primeros 15 caracteres y todo lo demas q lee lo guardo en otra variable sin hacer nada, es la unica forma q encontre de poder leer los datos, ya que el arduino lee todo lo q esta en html...(si alguien puede mejorarme esto se lo agradesco  ). Bien ahora estoy probando poder meter la temperatura cada 10 min. en mysql, lo logro en un codigo aparte, pero se me esta complicando adaptarlo a ese que ya tengo echo, de apoco ire postiando mas avances, saludos.
|
|
|
|
« Last Edit: February 08, 2012, 12:23:38 pm by Pipper »
|
Logged
|
|
|
|
|
Ciudad Real
Offline
God Member
Karma: 1
Posts: 747
Arduino rocks
|
 |
« Reply #35 on: February 08, 2012, 01:59:04 pm » |
Lo pongo en el playground
Un saludo
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1241
Arduino rocks
|
 |
« Reply #36 on: February 08, 2012, 04:11:47 pm » |
Estupendo Pipper! respecto a que hacer con lo que contiene el Serial que no deseas, siempre puedes leer lo que te interesa y hacer un Serial.flush con el resto. intentalo y me cuentas, seguro que tu programa tendra una pinta mas profesional así.
otra cosa, puedes poner el codigo php tambien para tener una solucion total al problema?
y una pregunta, al final lo has hecho como te dije... 1. en php escribes sobre mysql un 1 o un 0 para el led que quieres encender o apagar 2. arduino llama a php y pregunta como deberia estar el led 3. arduino hace lo que ha leido del php por serial 4. arduino escribe en mysql mediante php el estado actual del led.
creo que esa seria una solución que cerraria el circulo. y dandole tiempo a arduino a leer y hacer sus cosas se podria tener una web con control "indirecto" sobre el arduino pero como ventaja de no depender de abrir puertos, ips fijas etc.
tu como lo has hecho?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 24
|
 |
« Reply #37 on: February 08, 2012, 05:42:02 pm » |
Ya probare el Serial.flush ese que me dices  , bueno aca pongo el codigo php, esta echo asi nomas ya q es un codigo de prueba, en cuanto termine todas mis pruebas lo dejare mas bonito  . igual espero les sirva: <?php $estado=$_GET["pinD13"]; //variables las cual actualizamos desde la pagina el estado $estado1=$_GET["pinD14"]; //variables las cual actualizamos desde la pagina el estado $estado2=$_GET["pinD15"]; //variables las cual actualizamos desde la pagina el estado $val =$_GET["led"]; //variables que pregunta arduino y utilizamos para saber el estado $val1=$_GET["led1"]; //variables que pregunta arduino y utilizamos para saber el estado $val2=$_GET["led2"]; //variables que pregunta arduino y utilizamos para saber el estado //$temperatura=$_GET["temperatura"]; $con = mysql_connect("localhost", "root", "*****"); if(!$con) { die('Could not connect: ' .mysql_error()); } mysql_select_db("arduino", $con);
//comprobamos el estado de los led
$result = mysql_query("SELECT `numero`, `estado` FROM `habitacion` WHERE numero=$val"); while($rs = mysql_fetch_array($result)) { echo "$rs[1]"; } $resulta = mysql_query("SELECT `numero`, `estado` FROM `habitacion` WHERE numero=$val1"); while($rsa = mysql_fetch_array($resulta)) { echo "$rsa[1]"; } $resulta1 = mysql_query("SELECT `numero`, `estado` FROM `habitacion` WHERE numero=$val2"); while($rsa1 = mysql_fetch_array($resulta1)) { echo "$rsa1[1]"; mysql_close($con); }
//Actualizamos el estado de los led desde la pagina
if ($estado=="Y"){ mysql_query("UPDATE habitacion set estado='BH1YF' WHERE numero=1"); mysql_close($con); } if ($estado=="A"){ mysql_query("UPDATE habitacion set estado='BH1AF' WHERE numero=1"); mysql_close($con); } if ($estado1=="Y"){ mysql_query("UPDATE habitacion set estado='BH2YF' WHERE numero=2"); mysql_close($con); } if ($estado1=="A"){ mysql_query("UPDATE habitacion set estado='BH2AF' WHERE numero=2"); mysql_close($con); } if ($estado2=="Y"){ mysql_query("UPDATE habitacion set estado='BH3YF' WHERE numero=3"); mysql_close($con); } if ($estado2=="A"){ mysql_query("UPDATE habitacion set estado='BH3AF' WHERE numero=3"); mysql_close($con); } mysql_query("INSERT INTO `led`(`habitacion`) VALUES ($val1)"); mysql_close($con); ?> <b>Apretar Boton para prender o Apagar led Verde</b> <form action='/prueba2.php' method='GET'><p><input type='hidden' name='pinD13' value='Y'> <input type='submit' value='Off'/></form> <form action='/prueba2.php' method='GET'><p><input type='hidden' name='pinD13' value='A'> <input type='submit' value='On'/></form> <b>Apretar Boton para prender o Apagar led Rojo</b> <form action='/prueba2.php' method='GET'><p><input type='hidden' name='pinD14' value='Y'> <input type='submit' value='Off'/></form> <form action='/prueba2.php' method='GET'><p><input type='hidden' name='pinD14' value='A'> <input type='submit' value='On'/></form> <b>Apretar Boton para prender o Apagar led Amarillo</b> <form action='/prueba2.php' method='GET'><p><input type='hidden' name='pinD15' value='Y'> <input type='submit' value='Off'/></form> <form action='/prueba2.php' method='GET'><p><input type='hidden' name='pinD15' value='A'> <input type='submit' value='On'/></form>
Bueno el codigo lo q hace es tengo los botones correspondientes de encendido y apagado para cada led, lo que hacen es actualizarme la base de datos, la base de datos se llama arduino, tiene una tabla habitacion, dentro de habitacion tengo los campo index, numero, estado... dentro del campo "estado" tengo la trama guardada (un poco rebuscado por ahi como lo hice pero fue como me salio en el momento, en un futuro vere como voy haciendo adaptaciones  ), entonces con los botones actualizo estos estados dentro de la base de datos...el arduino lo que hace es preguntar cada 2 seg. como se encuentran esos estados y realizar la accion correspondiente(si a veces tengo retardos de hasta 4 seg en que se encienda o apague el led, pero no veo que sea inconveniente ya q no necesito velocidad de respuesta)...ja no se si los pasos son como vos me explicaste Sergegsx fijate... Ahora estoy con el tema que quiero meter la temperatura cada 10 min. pero no me doy idea como puedo hacer para que una funcion se ejecute solo cada 10 min. acoplandolo a ese codigo que ya tengo...aca seguimos trabajando un saludos a todos, si alguno aporta alguna mejora que se le pueda ir haciendo bienvenido sea, saludos.
|
|
|
|
« Last Edit: February 08, 2012, 05:46:04 pm by Pipper »
|
Logged
|
|
|
|
|
Ciudad Real
Offline
God Member
Karma: 1
Posts: 747
Arduino rocks
|
 |
« Reply #38 on: February 09, 2012, 04:54:43 am » |
para hacer la funcion cada cierto tiempo
estableces un tiempo inicial tiempo_inicial=millis();
luego la funcion que quieres la metes dentro de un IF tal que este
if ((millis()-tiempoinicial)>(10*60*1000)); // 10 minutos * 60 segungos * 1000 milisegundos { //aqui pones lo que quieres que haga la función
tiempo_inicial=millis(); // antes de salir del IF tienes que resetear esta variable apra que empiece a contar de nuevo }
Un saludo
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 24
|
 |
« Reply #39 on: February 09, 2012, 10:52:53 am » |
Bueno a ver eh estado probando con lo que me dijiste dongato: long retardo = 1000; long tiempoEspera = 6000; long tiempofuncion1 = 0; long tiempofuncion2 = retardo; //determino tiempo entre funciones
void setup() { Serial.begin(9600); }
void loop() { if (millis() >= tiempofuncion1) { funcion1(); tiempofuncion1 = millis() + tiempoEspera; } if (millis() >= tiempofuncion2) { funcion2(); tiempofuncion2 = millis() + tiempoEspera; } } void funcion1() { Serial.println("Dentro de la funcion 1"); } void funcion2() { Serial.println("Dentro de la funcion 2"); } Ahora lo que yo quiero es q mi funcion 1 pregunte los datos a mi servidor web cierto? y mi funcion 2 que inserte datos en mysql, no me sucede ninguna de las dos cuando lo adapto a mi codigo: (no me da errores pero no hace lo que tiene q hacer  ). 1.sera que le tengo q dar mas tiempo entre ambas funciones? 2.sera q no lo puedo hacer de esta forma? Editado: al darle mas tiempo se ejecuta mi funcion 1 q es la de preguntar por el estado de los led bien, pero mi funcion 2 no :S, este es el codigo: data = analogRead(tempPin); //Serial.println(data);
if (client.connect()) { Serial.println("Connected"); client.print("GET /prueba1.php?"); client.print("data"); Serial.print("data"); client.print("="); Serial.print("="); client.print(data); Serial.print(data); client.println(" HTTP/1.1"); client.println("Host: localhost"); client.println(); Serial.println(); } else { Serial.println("Connection unsuccesfull"); } Ese serial el codigo dentro de funcion 2, pero me pone Connection unsuccesfull...alguna idea de por que? (el codigo este en un programa aparte me anda bien).
|
|
|
|
« Last Edit: February 09, 2012, 11:14:58 am by Pipper »
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1241
Arduino rocks
|
 |
« Reply #40 on: February 09, 2012, 03:53:28 pm » |
buen trabajo Pipper. este fin de semana quiero desarrollar un ejemplo base de todo esto, asi que mirare tu código para coger ideas pero si lo has dicho como dices, entonces es lo que yo pense para sistemas donde no requieres un tiempo de respuesta muy corto.
respecto a guardar temperaturas, sencillisimo. quieres hacerlo en otra tabla,no? simplemente llama al mismo php o a otro diferente y pasale la temperatura leida por el arduino con un parametro y que lo guarde junto con el unixtimestamp o con mysql time y listo. luego ya te pondras a graficar los valores leidos, para esto te recomiendo "flot graphs"
|
|
|
|
|
Logged
|
|
|
|
|
Ciudad Real
Offline
God Member
Karma: 1
Posts: 747
Arduino rocks
|
 |
« Reply #41 on: February 09, 2012, 04:16:51 pm » |
Qué envidia me dais joer ¡¡ a ver si aprendo de una vez html php y le saco partido al shield aqui te dejo la solucion que buscabas a los retardos, tienes que hacer un temporizador por evento, si quieres que una dependa de la otra hay que modificar alguna cosa un saludo long retardo = 1000; // no te hace falta long tiempoEspera = 6000; // no te hace falta long tiempofuncion1 = 1000; // cada segundo long tiempofuncion2 = 3000; // cada 3 segundos long TiempoInicial1; long TiempoInicial2;
void setup() { Serial.begin(9600); TiempoInicial1=millis(); // inicia la variable al momento actual para temporizador 1 TiempoInicial2=millis(); // inicia la variable al momento actual para temporizador 2 }
void loop() { if (millis() >= (TiempoInicial1+tiempofuncion1)) { funcion1(); TiempoInicial1=millis(); // reset de inicio } if (millis() >= (TiempoInicial2+tiempofuncion2)) { funcion2(); TiempoInicial2=millis(); // reset de inicio } } void funcion1() { Serial.println("Dentro de la funcion 1"); } void funcion2() { Serial.println("Dentro de la funcion 2"); }
|
|
|
|
« Last Edit: February 09, 2012, 06:30:54 pm by SrDonGato »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 24
|
 |
« Reply #42 on: February 09, 2012, 06:14:12 pm » |
Exelente codigo Srdongato gracias es justo como queria q anduviera...
Ahora bien sigo sin poder meter la temperatura a la base de datos cuando llamo a la funcion senddata(), no me conecta el cliente :S (osea no entra en el if(client.connect)) no logro entender por que, ya q si cargo esa funcion sola en un sketch aparte si funciona, alguna idea de que puede ser??
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1241
Arduino rocks
|
 |
« Reply #43 on: February 10, 2012, 11:53:54 am » |
pon el código que no te funciona.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 24
|
 |
« Reply #44 on: February 10, 2012, 03:21:50 pm » |
Lo habia puesto mas arriba lo vuelvo a poner : if (client.connect()) { Serial.println("Connected"); client.print("GET /prueba1.php?"); client.print("data"); Serial.print("data"); client.print("="); Serial.print("="); client.print(data); Serial.print(data); client.println(" HTTP/1.1"); client.println("Host: localhost"); client.println(); Serial.println(); } else { Serial.println("Connection unsuccesfull"); } Ese codigo asi solo en un sketch anda (obio agragando lo q falta no  ), pero cuando lo pongo dentro de una funcion, y lo combino con todo lo que ya tengo echo no anda (no entra nunca al if(client.connect))...(siempre pasa al else y me muestra Connection unsuccefull). 1) no se si se deba a que con la otra funcion tambien hago un client.connect() y entonces despues esta no pueda conectar...sinceramente no se bien que esta pasando, hoy me he puesto con la interfaz del proyecto, ya en cuanto vuelva esta noche o mañana con el codigo ese voy a ver si lo puedo depurar para ver q esta pasando q no conecta el cliente cuando lo llamo desde mas de una funcion....
|
|
|
|
|
Logged
|
|
|
|
|
|