Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 34
61  International / Proyectos / Re: Buenas! alguien dispuesto a dar una charla en Berazategui? on: June 12, 2014, 04:28:18 pm
Prefiero que te lo explique vffgaston, pero si miras su ubicación a la izquierda de sus post, verás que bromeaba.
Ten en cuenta que la broma la has iniciado tú inadvertidamente smiley-wink.
Me adelanto sólo por si acaso no te habías percatado, evitarte pérdida de tiempo, más dada la premura.
Saludos.
62  International / Software / Re: Como concatenar 2 variables tipo byte. on: June 12, 2014, 03:52:12 pm
Hola.
Pues realizando la operación inversa:

Code:
int num=2600;

byte a,b;

void setup(){
a=2600; //Aca toma los 8 bits menos significativos que seria 00101000
b=num>>8; //Aca desplazo 8 bits a la derecha y los dejo como menos significativos que seria 00001010

int c=(b<<8);
c+=a;
}
63  International / Hardware / Re: extender i2c a través de rs485 on: June 11, 2014, 05:31:23 pm
Con todas las cautelas, pues en electrónica estoy pez, y al principio de la página pone "status: not implemented".
Pero tras una rápida búsqueda creo que esto sería medio circuito.
Puedes mirar más cosas en san google.
Si finalmente te atreves con ello, sería interesante que expusieras por aquí tus resultados. Me parece muy interesante.
Saludos.
64  International / Español / Re: Ayuda para codigo on: June 11, 2014, 05:17:31 pm
Efectivamente, la programación actualmente está encaminada a que cuando se detecta la subida de la lectura analógica realice el movimiento del servo, desatendiendo todo lo demás. Es el eterno problema de la programación: ¿cómo hacer varias cosas simultáneamente? La respuesta es "un trozo de tarea en cada momento". En tu caso, podemos, por ejemplo, establecer una variable int para cada servo que cambiaremos a +1, 0 ó -1 según el servo deba estar subiendo, parado o bajando. En cada recorrido del loop sumaremos ese número a cada servo y lo escribiremos en el servo correspondiente, controlando que si llega arriba o abajo del todo, ponerla a cero para que deje de incrementar o decrementar. Quedaría por ver qué debe ocurrir si durante la subida o bajada la lectura analógica cambia (si debe olvidarse y acabar el ciclo o invertir el sentido del movimiento). Mira a ver si este código te sirve de ayuda (está sin comprobar). Teóricamente, con una sola lectura analógica debería controlar los tres servos según tres niveles establecidos (en lugar de mapear utilizo la lectura directa, que debería estar entre 0 y 1023, pero también puedes mapearla)
Code:
#include <Servo.h>

Servo myservo1;
Servo myservo2;
Servo myservo3;

int potpin = 0; 
int lecturaanterior=0;
int lecturanueva;
int valorservo1=0;
int valorservo2=0;
int valorservo3=0;
int incremento1=0;
int incremento2=0;
int incremento3=0;
void setup()
{
      myservo1.attach(9); 
      myservo1.write(valorservo1);
      myservo2.attach(10); 
      myservo2.write(valorservo2);
      myservo3.attach(11); 
      myservo3.write(valorservo3);
      delay(15);
}

void loop()
{
      lecturanueva = analogRead(potpin);           
      if (lecturaanterior <250 && lecturanueva >= 250){    // si la lectura analógica ha saltado por encima de 250
            if(valorservo1==0 || incremento1<0)            // Si está parado en posición 0 o esta decrementando, cambiamos a incremento.
                  incremento1=1;
            else                                           // Si no, cambiamos a decremento.
                  incremento1=-1;
      }
      if (lecturaanterior <500 && lecturanueva >= 500){     
            incremento2 = valorservo2==0 || incremento2<0 ? 1 : -1; // otra forma de escribir el mismo if anterior
      }
      if (lecturaanterior <750 && lecturanueva >= 750){     // igual que los otros dos
            incremento3 = valorservo3==0 || incremento3<0 ? 1 : -1;
      }
      lecturaanterior=lecturanueva;
     
      // Incrementamos los valores de servo según su estado (subiendo, parado, bajando)
      valorservo1 += incremento1;
      valorservo2 += incremento2;
      valorservo3 += incremento3;
      // Si el servo está en un extremo u otro, detenemos incremento o decremento
      if (valorservo1<=0 || valorservo1>=180) incremento1=0;
      if (valorservo2<=0 || valorservo2>=180) incremento2=0;
      if (valorservo3<=0 || valorservo3>=180) incremento3=0;
      // Escribimos los valores correspondientes en cada servo
      myservo1.write(valorservo1);
      myservo2.write(valorservo2);
      myservo3.write(valorservo3);
}
65  International / Hardware / Re: subrov & wii nunchuck on: June 11, 2014, 04:22:47 pm
Yo ni idea de electrónica, pero quizás pudiera interesarte este post. Si funciona, sería perfecto para tí.
Saludos.
66  International / Hardware / Re: subrov & wii nunchuck on: June 10, 2014, 05:25:57 am
Hola.
En lugar de sustituir el nunchuck, también puedes agregarle un arduino básico que lo lea por i2c y se encargue de la transmisión al otro arduino por serie u otro sistema que te proporcione el alcance necesario.
67  International / Software / Re: Cambio de nº telefono modem GSM on: June 10, 2014, 05:12:42 am
Hola, Katynga.
El problema es que estás utilizando el método print como si fuera printf, y por defecto no es así (creo que se puede modificar la librería Print.h para que lo acepte).
Como método alternativo, puedes construir tu cadena en un buffer de memoria con sprintf:

Code:
char myBuffer[100]; // buffer de 100 bytes para almacenar la cadena construida. Puedes contar los caracteres necesarios y ajustar más el tamaño
setup(){
sprintf(myBuffer, "AT + CMGS = \"%s\"\r", NUMERO);
}
loop(){
SIM900 . println (myBuffer);      // Nº Tfno a enviar el SMS
}

El mensaje, al ser una cadena única lo puedes imprimir directamente:
   SIM900 . println (MENSAJE);                       // Mensaje a enviar

Saludos
68  International / Software / Re: Arduino y LCD 16x2 on: June 10, 2014, 03:30:22 am
Hola.
Tu problema es que loop constantemente borra y dibuja la pantalla de bienvenida. De ahí el parpadeo. Lo que deberías hacer es evitar eso, y sólo repintar la pantalla cuando ésta cambie. Hay muchas formas de hacer esto. Una, por ejemplo, sería definir una función para cada pantalla (incluida la de inicio) y una variable en la que almacenes qué pantalla es la última que dibujaste. Si la pantalla a dibujar es la misma, no hacemos nada, y si es diferente pues la pintamos y ponemos en la variable el número correspondiente a la pantalla dibujada. Más o menos, abreviadamente:

Code:
int pantalladibujada=0;

loop(){
      int pantalla_a_dibujar=1;
      if (pulsado1){
            pantalla_a_dibujar=2;
      }
      else if (pulsado2){
            pantalla_a_dibujar=3;
      }

      if (pantalla_a_dibujar!=pantalladibujada){
            switch pantalla_a_dibujar{
            case 1:
                  pantallabienvenida();
                  break;
            case 2:
                  mpx450();
                  break;
            case 3:
                  temperatura_humedad();
                  break;
            }
            pantalladibujada=pantalla_a_dibujar
      }

}

Espero te sirva de ayuda.
Saludos.

Pd. No te preocupes; no le diré a nadie que has usado un goto  smiley-zippersmiley-mr-green smiley-mr-green smiley-mr-green
En serio, intenta huir de la utilización del goto, pues no aporta nada (siempre es sustituible) y enrevesa el código.
69  International / Software / Re: ayuda con codigo on: June 08, 2014, 04:35:36 am
Entiendo que te refieres al código que puso Eletnico en el primer post, ¿no?  smiley-twist

70  International / Español / Re: Ayuda para codigo on: June 08, 2014, 03:47:01 am
Por ejemplo:
Code:
void loop()
{
      lecturanueva = analogRead(potpin);           
      lecturanueva = map(lecturanueva, 0, 1023, 0, 179);     
      if (lecturaanterior <100 && lecturanueva >= 100){     // Si la lectura anterior estaba por debajo de 100 y la actual por encima
            if(valorservo==0){
                  while (valorservo<180){
                        valorservo++;
                        myservo.write(valorservo);
                        delay(5);
                  }
                       
            } else {
                  while (valorservo>0){
                        valorservo--;
                        myservo.write(valorservo);
                        delay(5);
                  }
            }

      }
      lecturaanterior=lecturanueva;
}
71  International / Software / Re: ayuda con codigo on: June 07, 2014, 04:39:51 pm
Hola.
Ahora es cuando deberías poner tu código actual, para ver qué modificaciones podemos hacer.  smiley-roll
Saludos.
72  International / Español / Re: Ayuda para codigo on: June 06, 2014, 03:36:07 am
Hola.
Está sin comprobar. Mira a ver si hace algo:
Code:
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int lecturaanterior=0;    // variable to read the value from the analog pin
int lecturanueva;
int valorservo=0;
void setup()
{
      myservo.attach(9);  // attaches the servo on pin 9 to the servo object
      myservo.write(valorservo);
      delay(15);
}

void loop()
{
      lecturanueva = analogRead(potpin);            
      lecturanueva = map(lecturanueva, 0, 1023, 0, 179);    
      if (lecturaanterior <100 && lecturanueva >= 100){     // Si la lectura anterior estaba por debajo de 100 y la actual por encima
            if(valorservo==0)
                  valorservo=180;
            else
                  valorservo=0;
            myservo.write(valorservo);                  // sets the servo position according to the scaled value
            delay(15);                           // waits for the servo to get there
      }
      lecturaanterior=lecturanueva;
}

Saludos.
73  International / Software / Re: ayuda con codigo on: June 06, 2014, 03:23:54 am
Hola.
Echa un vistazo al playground de la propia librería. En este ejemplo sólo tendrías que cambiar la función keypadevent, poniendo buzzer a high en el case pressed y buzzer a low en el case released. Con eso tendrías solucionado lo del pitido.
Respecto de la otra parte, echa un vistazo a este hilo, en el cual creo que solucionamos algo parecido, a ver si te sirve de inspiración.
Saludos.
74  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...)
75  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.
Pages: 1 ... 3 4 [5] 6 7 ... 34