Show Posts
Pages: 1 [2] 3 4 ... 34
16  International / Hardware / Re: Problema con Ethernet Shield para Arduino W5100 on: July 30, 2014, 04:56:22 pm
Hola.
Tal vez estás empezando la casa por el tejado ¿Estás seguro de que el problema es de la red? Creo que deberías comenzar por ver si el módulo está bien instalado y configurado. Comienza por poner un vínculo a tu modelo de shield para ver las características (por ejemplo, qué pin SS utiliza) y el programa que quieres probar.
Saludos
17  International / Hardware / Re: Codigo medidor de consumo se me cuelga en attiny85 on: July 30, 2014, 04:42:02 pm
¿El código que te funciona bien cuatro veces es el que pones en el primer post de este hilo, o ese es el que te devuelve ceros?
Lo comento, porque si quieres puedo intentar modificarlo para optimizar un poco el uso de ram a ver si conseguimos que se mantenga en funcionamiento.
18  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 29, 2014, 06:00:11 pm
He estado echando un vistazo al código, pero me resulta bastante lioso intentar entenderlo por las bravas, por la cantidad de archivos. Supongo que habrá alguna documentación al respecto de cómo funciona todo. No obstante, intuyo que tienes que registrar un device que represente a tu arduino esclavo.
Lo primero que necesitas es saber cómo registrar tu device, olvidándote de la comunicación; qué comandos va a recibir y qué va a hacer con ellos y con los datos que se reciban del device. Luego, supongo que con incluir en tu device la cabecera i2c.h y utilizando sus comandos para comunicarte con el arduino en el loop y haciendo en el esclavo una programación que se entienda con lo que envías desde el master, lo deberías tener hecho.
¿Tienes en el robot ya algún otro dispositivo i2c funcionando? ¿Qué dispositivos va a llevar el arduino esclavo conectados?
Saludos.
19  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 26, 2014, 06:01:49 pm
Una de las características de C++ que para algunos será virtud y para otros defecto, es que es muy estricto en cuanto a los tipos de variable, lo que incluye las funciones. Si miras la referencia, verás que el parámetro que se pasa a wire.onRequest es una función de tipo void y sin parámetros. Si la función que le asignas no coincide, el compilador te dará error. De la misma forma, para wire.onReceive el parámetro es una función tipo void y que va a recibir un parámetro int, así que tu función debe ser así. Si lees más, verás que a través de ese parámetro vas a recibir la cantidad de bytes que se te envían (yo lo he llamado computer_bytes_received), así que lo mejor es leer ese parámetro para saber cuántos bytes leer (como ves lo he utilizado en el for).
El código del master no debería ser muy complejo, sabiendo qué hay que enviar y recibir.
En el vínculo que te pasé en otro post tienes un ejemplo de transmisión master, recepción master, recepción esclavo y transmisión esclavo (al recibir onrequest).
20  International / Software / Re: ¿Threads en Arduino??¿? on: July 26, 2014, 05:38:03 pm
Hola.
Arduino no soporta nativamente multitarea, así que, aunque existen por ahí algunas librerías de usuarios que la emulan (por ejemplo), no es una forma demasiado eficiente de programar. Ten en cuenta que cada salto de un hilo a otro va a suponer una penalización de tiempo, pues se deben guardar los estados de los registros de la tarea en curso y recuperar los estados de los registros de la siguiente tarea. Esto, en procesadores preparados para multitarea se suele realizar con instrucciones específicas que se realizan en pocos ciclos de reloj.
Además cada hilo va a ocupar memoria RAM (no muy abundante en arduino) adicional para guardar el estado de la tarea.
Para mover cinco servos "simultaneamente", creo que lo mejor podría ser crear una "agenda" en la que se vayan colocando ordenadamente las instrucciones. Como tú dices, "engañar" al arduino, o más bien, engañar al ojo humano.
Discrepo con Naruto128. Para llevar varios procesos mezclados en el tiempo, lo mejor es huir de los delay como del diablo.
Saludos.

21  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 26, 2014, 10:51:07 am
Claro. Te da ese error, precisamente porque la función que asignes a onReceive debe ser void y recibir un parámetro int. Prueba el receiveEvent que te puse cuatro post arriba.
Code:
void receiveEvent(int computer_bytes_received)
{
      for (int i=0; i<computer_bytes_received; i++){
            computerdata[i]=wire.read();
      }
}

Y en cuanto a la función que asignas a requestEvent, prueba por este otro camino (escribiendo los datos previamente en un buffer de memoria), ya que creo que desde el esclavo se debe escribir, si no me equivoco, en un solo comando.
Code:
void requestEvent()
{
      char buffer_envio[20];
      sprintf(buffer_envio,"%s%f", sensordata, temp);
      wire.write(buffer_envio); // El envío desde esclavo i2c se debe hacer de una vez, creo
}
22  International / Software / Re: duda inclusion librerias en skecht on: July 26, 2014, 12:31:02 am
Hola.
#include <libreria>
va a buscar directamente a las carpetas predefinidas de librerías.
#include "libreria"
busca primeramente en el propio directorio de proyecto o la ruta que le indiques.
23  International / Software / Re: Pasar definicion de un fichero a otro. on: July 26, 2014, 12:09:49 am
Uffff  smiley-eek A veces es mucho más difícil entender la pregunta que conocer la respuesta.
Tengo varias respuestas posibles que van desde declarar u8g en la librería como extern, pasarle la pantalla a tu clase como un parámetro más, o heredar tu clase de la pantalla; pero sin ver el código de tu librería ni entender exactamente qué necesitas, pues sólo puedo señalarte la dirección aproximada, no la respuesta concreta.
24  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 25, 2014, 11:44:07 pm
Con lo del buffer, me refiero a un espacio de memoria en el que irás preparando los datos a enviar. Puede ser una cadena, en cuyo caso la "construyes" cuando el master te envía sus mensaje, y será la cadena que permanecerá a la espera de ser enviada cuando el master te diga "habla".
Digamos que antes, cuando te llegaba la pregunta ibas contestando la respuesta; ahora sólo preparas la respuesta para cuando te den permiso para hablar.
Sería interesante saber en qué "dialecto" van a ir esas preguntas y respuestas y podría decirte códigos más concretos.
25  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 24, 2014, 05:36:04 pm
Bien. En el código del esclavo i2c debes, básicamente, construir las funciones callback para onReceive y onRequest

Code:
void receiveEvent(int computer_bytes_received)
{
      for (int i=0; i<computer_bytes_received; i++){
            computerdata[i]=wire.read();
      }
      // analizar los datos recibidos en computerdata, preparar una respuesta en sensordata
}


void requestEvent(void)
{
      wire.write(sensordata); // Si es una cadena, así valdría. si es una estructura sería wire.write(estructura, numbytes)     
}


La principal diferencia es que cuando recibes datos del maestro, no puedes contestar inmediatamente, sino que irás preparando una respuesta en un buffer a la espera de que el master solicite datos. En requestEvent enviaremos esos datos previamente preparados en ese buffer.
26  International / Español / Re: [SOLUCIONADO] Convertir variable long a seis digitos. on: July 23, 2014, 05:57:50 pm
De nada, max_saeta. Si has comprendido el código, verás que con cambiar la comparación del for, puedes obtener más o menos dígitos.
Por supuesto que puedes utilizar 0x30 (también 48, ó B110000). Yo utilizo directamente '0' porque no sabía (ni me hacía falta) el código ascii del cero, y también porque queda más "autoexplicado" lo que  estoy sumando al valor del dígito.
Saludos.
27  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 23, 2014, 05:40:00 pm
Bueno; entiendo que lo que quieres es sustituir la transmisión-recepción serial en codigosensoresesclavo por una i2c y en codigosensoresordenador aún no has implementado nada del master.  Ya puedes poner dispositivos esclavos perfectamente programados, que como no haya un master que les dé la palabra, no van a decir ni pío.
Creo que podíamos empezar concretando más qué información deseas enviar del master al esclavo y viceversa, y centrarnos en un pequeño programa que muestre en el monitor del master lo que se recibe del esclavo. Una de las cuestiones a tener en cuenta es que el máximo de datos que se puede enviar en una trama i2c creo que es 32 bytes (aunque se puede modificar en la librería), así que lo ideal sería enviar los datos mínimos, con lo que además optimizamos tanto el tiempo de transmisión como la posterior extracción y conversión de los datos. No tiene sentido que algo que vamos a enviar para consumo del arduino se le envíe "humanizado" en plan cadenas tipo "temperatura1=27.56,temperatura2=27.30". Lo mismo se podría aplicar a las transmisiones serie entre dispositivos (otra cosa es una transmisión destinada al usuario, como el monitor serial).
De todas formas, si de momento sólo te interesa conseguir una transmisión i2c tal vez esto te ayude para empezar.
Ya irás contando.
Saludos.
28  International / Proyectos / Re: Ayuda Arduino + Variador de Velocidad Trifasico 220v on: July 22, 2014, 05:07:11 pm
Hola.
Perdón por el "off-topic", pero me pica la curiosidad, ya que mi padre es aficionado a la apicultura, pero utiliza un extractor manual, con lo que la aceleración la tiene bastante controlada smiley. Lo que no hace (aunque supongo que podría) es invertir el sentido de giro ¿qué misterio tiene? pues al fin y al cabo los panales van "mirando" hacia el exterior, con lo que el sentido de giro no debería influir mucho, ¿no?
29  International / Proyectos / Re: Proyecto: añadir sensores a un robot submarino on: July 22, 2014, 04:50:57 pm
Hola.
Tal vez deberías poner ese esquema que refieres, porque yo al menos no me termino de aclarar.
Si estos dos códigos se deben comunicar entre sí por i2c, entiendo que codeigosensoresordenador sería el master, ¿no?
Pero el caso es que ni has iniciado Wire en él (de hecho ni incluyes la librería) así que el otro ya puede esforzarse smiley-razz.
La verdad es que yo no he utilizado i2c, pero si miras en la referencia el ejemplo write y el ejemplo read, verás al menos cómo empezar con la parte de master.
Saludos.
30  International / Español / Re: Convertir variable long a seis digitos. on: July 21, 2014, 06:11:01 pm
Prueba a ver así:
Code:
void longtodig(unsigned long valor){
      for (int i=0;i<6;i++){
            digito[i]=valor%10;
            // si en lugar del valor del dígito queremos el carácter, sustituimos por
            // digito[i]=valor%10 + '0';
            valor/=10;
      }
}
Pages: 1 [2] 3 4 ... 34