Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 33
61  International / Proyectos / Re: Proyecto Souliss (Domotica sencilla y barata) con App Android. ESTABLE on: June 04, 2014, 04:54:43 pm
Hola, juanpintom.
Creo que no debería ser muy complicado establecer un sistema, no de cifrado en sí, pero sí de validación de los mensajes enviados y recibidos, con un algorritmo de hash asequible al arduino, como creo que es md5.
El sistema funciona más o menos así:
  • Establecemos una clave privada común en emisor y receptor suficientemente compleja.
  • Enviamos nuestro mensaje, seguido del cálculo md5 de la clave concatenada con el propio mensaje
  • En el receptor hacemos el mismo cálculo y cotejamos el md5 recibido
  • Si no coincide, tomamos medidas
El problema es que a mismo mensaje, mismo md5, con lo que si interceptamos un determinado mensaje, por ejemplo de encendido de luces (recordemos que el mensaje en sí no va cifrado), y lo volvemos a enviar de nuevo otro día, también colará. La solución sería agregar un parámetro irrepetible al mensaje (como la fecha-hora, un número secuencial...)
62  International / Proyectos / Re: Necesito un poco de ayuda con un proyecto... on: June 04, 2014, 08:45:53 am
Pues lanzándome a la piscina a ciegas, por darte una primera idea, yo me plantearía en principio comunicarlos por SPI:
  • Protocolo serie síncrono, se puede implementar con 4 cables.
  • Creo que es el más rápido de los protocolos serie que  puede trabajar Arduino
  • Hardware dedicado (la transmisión o recepción de datos en sí no ocupa al procesador principal)
Seguramente que algún forero más te puede dar otras opciones.
Saludos.
63  International / Software / Re: Convertir a char array int array on: May 31, 2014, 04:48:08 pm
Hola.
El problema es que atoi se utiliza para convertir una cadena de caracteres en entero, no un caracter. Si deseas convertir dígitos (0-9) en entero, sencillamente restales el valor ascii del cero:
Code:
arraynumber[i] = arraychar[i] - '0';

Si quieres seguir utilizando atoi, deberías declarar los dígitos como cadenas:

Code:
int arraynumber[3];
char *arraychar[3]={"3","2","1"};
int i;
void setup () {
  Serial.begin(9600);

}

void loop(){

   for (i=0;i<3;i++){
     arraynumber[i]=atoi(arraychar[i]);
     Serial.println(arraynumber[i]);
   }

}
64  International / Hardware / Re: arduino mega 2560 + Modulo SD LCstudio + enc28j60 (ethernet) on: May 30, 2014, 09:31:48 am
Teóricamente puedes conectar cuantos dispositivos quieras al mismo MOSI, MISO y SCK, pero sólo puedes comunicarte con uno de ellos en cada momento, seleccionándolo a través de su pin SS. Echa un vistazo a la referencia de SPI y conocerás más cosas.
65  International / Proyectos / Re: Necesito ayuda para crear un scanner y un parser para encender un LED. on: May 29, 2014, 03:14:08 pm
Una medalla no, Marcial; te mando una reliquia, porque si aciertas a la primera me corto los (censored) smiley-mr-green smiley-mr-green smiley-mr-green smiley-mr-green
Ahora en serio, porque muy probablemente tú y otros se habrán enterado más que yo sobre la temática de la pregunta (que yo entiendo de algunas cosas, pero no de todo).

Cuando has dicho "mi propio lenguaje", y al hablar de escanner y leds, pensaba que te referías a algún protocolo de comunicación óptica entre dos arduinos. Veo que por lenguaje te refieres a un lenguaje de programación. En principio el asunto parece peliagudo, pero primero habría que tener una idea más específica de qué quieres realizar:
¿Cómo se cargaría y dónde residiría el programa?
¿Cómo sería el lenguaje y qué capacidades tendría?
66  International / Proyectos / Re: Necesito ayuda para crear un scanner y un parser para encender un LED. on: May 29, 2014, 01:27:05 pm
 smiley-confuse smiley-confuse smiley-confuse smiley-confuse ¿Lo cualo?
Aquí hay gente muy buena en diversas materias, pero creo que ninguno con conocimientos de telepatía. ¿Podrías explicar en lenguaje escrito tu pregunta? smiley Yo por lo menos no me he enterado de ná  smiley-eek-blue
67  International / Hardware / Re: arduino mega 2560 + Modulo SD LCstudio + enc28j60 (ethernet) on: May 28, 2014, 05:12:39 pm
Pues yo dejaría uno de los dos dispositivos con CS en el pin 53, pues para que funcione el SPI el pin 53 debe ser declarado como salida aunque no lo utilicemos. El CS del otro dispositivo lo puedes conectar a cualquier otro pin digital, pero se lo tienes que indicar a la librería (en unos casos en la inicialización, y en otros modificando la propia librería). Sería conveniente que pongas tu código y se te podría ayudar un poco más.
Saludos.
68  International / Software / Re: RTC problema reseteo on: May 28, 2014, 03:03:39 am
Has probado a quitar el rtc.adjust del setup?
69  International / Hardware / Re: arduino mega 2560 + Modulo SD LCstudio + enc28j60 (ethernet) on: May 28, 2014, 12:53:28 am
Hola. Los dispositivos SPI comparten los pines MISO,MOSI Y SCK. a mayores cada uno necesita su propio PIN CS para establecer/cortar comunicación con el arduino. Deberás definir, por tanto, pines CS distintos en cada librería.
70  International / Español / Re: Puerto Serie de mi electric mountainboard on: May 26, 2014, 05:31:01 pm
Hola.
Básicamente, lo que deberías es establecer un tiempo de timeout; es decir, el tiempo máximo que vas a esperar para recibir el siguiente mensaje del receptor. Si en ese tiempo no ha llegado un mensaje válido, actuar como mejor consideres que se podría en caso de ausencia de señal. Si, por el contrario, llega un mensaje, actuar conforme dicte el mensaje. Por supuesto, el transmisor deberá estar emitiendo datos en intervalos inferiores a ese timeout. Por ejemplo, podrías utilizar millis para calcular el tiempo desde el último dato recibido, y decidir si se ha superado el timeout y se ha perdido conexión. El código "clave" sería más o menos así:
Code:
if (vw_get_message(RxBuffer, &Buffer_Size)) {
    //tratamos el mensaje
    ultimo_dato_valido=millis();
} else if (millis()-ultimo_dato_valido > timeout) {
    // tratamos la ausencia de mensaje
}
71  International / Software / Re: PROBLEMAS CON " on: May 26, 2014, 10:27:14 am
¿has intentado precediendo del carácter de escape?
Osea \"

EDITO: perdón por repetir contestación. Cuando comencé a responder no había respuesta, pero me pilló con el teléfono móvil y tardé bastante en terminar de escribir la respuesta (mis dedos se llevan muy mal con la pantalla táctil smiley)
72  International / Software / Re: Arduino UNO Rev3 - Comunicación Serial on: May 23, 2014, 05:03:15 pm
Hola.
Pues es esencial que establezcas un protocolo de cómo van a ser esos comandos y actuar en emisor y receptor conforme a ese protocolo. Tienes dos métodos: o bien establecer unos comandos con una longitud conocida, de forma que sepas cuántos bytes debes leer para cada comando/parámetro, o bien utilizar caracteres separadores, de manera que tu "intérprete" vaya traduciendo las "palabras" del mensaje cada vez que encuentre dicho separador. También puedes usar una mezcla de ambos métodos. Luego está el cómo vas a enviar tus datos, si en forma binaria o de texto... Si no te apetece experimentar demasiado, tienes alguna librería como CmdMessenger que te hace bastante parte del trabajo. Si te apetece experimentar, busca un poco por el foro y verás que no eres el "descubridor" de ese problema, que se ha tratado mucho y de muchas formas. Si te animas a intentar algo y tropiezas, pide ayuda, que seguro que la recibes smiley-wink
Saludos.
73  International / Software / Re: Problema con lectura puerto USB y python on: May 19, 2014, 03:45:33 pm
Hola.
La verdad es que apenas he podido entender tus explicaciones. Es difícil pillar qué es lo que intentas hacer con una parte del código así aislada. ¿Entiendo que lo que quieres es copiar el array tmpl en GS? Si es así, tal vez el problema sea que la numeración del array empieza en 0 y acaba en (longitud array-1). Por lo que veo tu for empieza en 1 con lo que el primer dato no se copia.
Por intentar ayudar, ya que como te he dicho no he entendido bien tu problema.
Saludos
74  International / Proyectos / Re: Ayuda con programa para terrario on: May 18, 2014, 04:37:44 pm
Hola.
Podrías probar algo así. Básicamente sería utilizar una variable activadoRiego que nos diga si se ha iniciado el riego por falta de humedad. Si lo está, comprobamos si ha terminado el timer para apagarlo y desactivar la variable. Si no lo está, comprobamos la humedad para ver si hay que activar el timer y la variable. No está probado, pero espero que me pilles la idea:

Code:
     if(activadoRiego){
            myTimer::setHora(now.hour,now.min,now.sec);
            if(!timerHumedad.getActivado()){
                  digitalWrite(pinHumedad, LOW);
                  activadoRiego=false;
            }
      } else {
            if (lecturaHumedad<humedadMinima){
                  digitalWrite(pinHumedad, HIGH);
                  activadoRiego=true;
                  timerHumedad.setInicio(now.hour,now.min,now.sec);
                  timerHumedad.setDuracion(0,10); // Activamos riego por diez minutos
            }
      }
75  International / Hardware / Re: Reloj de tiempo real DS 1302 on: May 16, 2014, 05:25:22 am
Hola.
Con este código realizado al vuelo y pila instalada en mi rtc, la hora se  introduce enviando una s por serial.
Después se mantiene independientemente de si se apaga.
Prueba a ver.
Saludos.
Code:

#include <DS1302.h>
 
/* Set the appropriate digital I/O pin connections */
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;
 
/* Create buffers */
char buf[50];
char day[10];
 
/* Create a DS1302 object */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
 
 
void print_time()
{
  /* Get the current time and date from the chip */
  Time t = rtc.time();
 
  /* Name the day of the week */
  memset(day, 0, sizeof(day));  /* clear day buffer */
  switch (t.day) {
  case 1:
    strcpy(day, "Sunday");
    break;
  case 2:
    strcpy(day, "Monday");
    break;
  case 3:
    strcpy(day, "Tuesday");
    break;
  case 4:
    strcpy(day, "Wednesday");
    break;
  case 5:
    strcpy(day, "Thursday");
    break;
  case 6:
    strcpy(day, "Friday");
    break;
  case 7:
    strcpy(day, "Saturday");
    break;
  }
 
  /* Format the time and date and insert into the temporary buffer */
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
  day,
  t.yr, t.mon, t.date,
  t.hr, t.min, t.sec);
 
  /* Print the formatted string to serial so we can see the time */
  Serial.println(buf);
}
 
 
void setup()
{
  Serial.begin(9600);
}
 
 
/* Loop and print the time every second */
void loop()
{
  if(Serial.available())
    gestionaComandos();
  print_time();
  delay(1000);
}
 
void gestionaComandos()
{
  Time t;
  if(Serial.read()=='s'){
    Serial.print("Year?: ");
    while(!Serial.available());
    t.yr=Serial.parseInt();
    Serial.println(t.yr);
    Serial.print("Month?: ");
    while(!Serial.available());
    t.mon=Serial.parseInt();
    Serial.println(t.mon);
    Serial.print("Day?: ");
    while(!Serial.available());
    t.date=Serial.parseInt();
    Serial.println(t.date);
    Serial.print("Day of week? (1=Sunday-7=Saturday");
    while(!Serial.available());
    t.day=Serial.parseInt();
    Serial.println(t.day);
    Serial.print("Hour?: ");
    while(!Serial.available());
    t.hr=Serial.parseInt();
    Serial.println(t.hr);
    Serial.print("Minute?: ");
    while(!Serial.available());
    t.min=Serial.parseInt();
    Serial.println(t.min);
    t.sec=0;
  }
  rtc.write_protect(false);
  rtc.halt(false);
  rtc.time(t);
}
Pages: 1 ... 3 4 [5] 6 7 ... 33