Show Posts
Pages: 1 2 [3] 4 5 ... 34
31  International / Software / Re: Duda con los tiempo de los codigos on: July 20, 2014, 05:36:29 pm
¿Cómo vas a modificar los parámetros? Básicamente se tratará de escuchar un determinado evento en uno o varios puntos del loop y cuando se produzca ese evento llamar a una función que se encargue de leer el valor a modificar.
Por ejemplo, si utilizáramos el puerto serie para modificar parámetros, podemos incluir uno o varios
if (Serial.available) leeparametro();
y desde dicha funcion leer el valor y modificar el parámetro correspondiente.
32  International / Software / Re: Descargar unos 60 kb desde servidor web a SD de arduino on: July 20, 2014, 05:24:36 pm
Intuyo que lo que podría estar pasando es que dejas de leer tras finalizar un paquete de datos. Deberías combinar cliente.available() con algún control de timeout. Vamos, que no salga del bucle de recepción simplemente porque no haya caracteres disponibles, sino porque pase x tiempo sin haber caracteres disponibles.
33  International / Software / Re: Extracción datos IDE arduino on: July 17, 2014, 05:44:01 pm
Pues mira. Una opción muy básica sería usar el hyperterminal, configurarlo para recibir del puerto serie, y con la opción capturar texto ya estás enviando todo lo que se recibe del arduino a un archivo de texto.
Si el programa arduino estructura bien lo que se envía, separado por comas y saltos de línea convenientemente, ya tienes un archivo importable a una tabla excel.
34  International / Software / Re: Extracción datos IDE arduino on: July 17, 2014, 06:22:28 am
Bien. Necesitas básicamente un programa que sustituirá al monitor serial, lo único que hace es presentarte los datos que le llegan.
Pregunta:
¿Conoces algún lenguaje de programación para el ordenador que te permita recibir por serie y guardar en un archivo?
Ese es el meollo. Lo del arduino ya lo tienes.
35  International / Software / Re: Extracción datos IDE arduino on: July 15, 2014, 04:48:09 pm
Tú mismo lo has explicado. La "complicación" viene de que aparte del arduino, deberás programar la otra parte. Una opción es a través del propio puerto serie, pero en vez de ser recibidos los datos por el monitor serie, recibirlos desde un programa que los procese. También los puedes enviar a una página web que los recoja y los vaya guardando en una base de datos. En cualquier caso, aparte del arduino, deberás programar el otro canal.
Una tercera opción sería ir guardando los datos en el propio arduino, en una tarjeta SD que podrías leer posteriormente en el PC; pero si lo que quieres es tiempo real, no te servirá.
36  International / Software / Re: activar salida por tiempo de entrada on: July 15, 2014, 03:40:32 am
¿Tal que así?
Code:
const int ENTT=2;

const int LEDR1=5;

unsigned long inicioHigh;

void setup() {
inicioHigh=millis();
pinMode (ENTT, INPUT);
pinMode (LEDR1, OUTPUT);
}

void loop() {
     if (digitalRead(ENTT)==HIGH){
          unsigned long tiempoTranscurrido = millis()-inicioHigh;
          if (tiempoTranscurrido>=40000) {
               bool parpadeo = (tiempoTranscurrido % 1000) > 500; // Deber�amos obtener un parpadeo por segundo
               digitalWrite(LEDR1, parpadeo);
          }
          else if (tiempoTranscurrido>=20000) {
               digitalWrite (LEDR1, HIGH);
          }
     } else {
          inicioHigh=millis();
          digitalWrite (LEDR1, LOW);
     }
}
37  International / Software / Re: activar salida por tiempo de entrada on: July 14, 2014, 06:08:04 pm
Perdona. Es al "verrés".
cambia
unsigned long tiempoTranscurrido=inicioHigh-millis();
por
unsigned long tiempoTranscurrido=millis()-inicioHigh;

En cuanto a lo de conectar más de una salida a un led, supongo que se pueda mediante una puerta lógica, pero teniendo en cuenta que dentro del arduino podemos aplicar la lógica que queramos, me parece innecesario.
38  International / Software / Re: activar salida por tiempo de entrada on: July 14, 2014, 05:01:26 pm
Prueba algo así, a ver si es lo que buscas:

Code:
unsigned long inicioHigh;
void setup() {
inicioHigh=millis();
}

void loop() {
      if  (digitalRead(2)==HIGH){
           unsigned long tiempoTranscurrido=inicioHigh-millis();
           if(tiempoTranscurrido>=20000){
                 digitalWrite(5,HIGH);
           }
      } else {
            inicioHigh=millis();
            digitalWrite(5,LOW);
      }
}
39  International / Español / Re: Ayuda, sacar int de un arreglo de chars on: July 11, 2014, 05:30:44 pm
Hola.
Está sin probar, así que igual tiene algún fallo, pero creo que te puede dar una idea:

Code:
void setup()
{
  Serial.begin(9600);
}
 
char cadena[10]; //Sólo vamos a almacenar un valor numérico, así que con diez caracteres debería sobrar.
char motor; // El caracter que identificará al motor cuyo valor leemos
char leido;
int posicion=0;  //Variable para cambiar la posición de los caracteres del array
int valor;  //Variable del valor entero
 
void loop()
{
    while(Serial.available()>0) //Mientras haya datos en el buffer ejecuta la función
    {
      leido=Serial.read();
      if ( (leido>'0'&&leido<='9') || leido=='-' ){  // Si es un carácter numérico
            cadena[posicion++]=leido;
            // aquí podríamos controlar posición por si acaso se sobrepasa la longitud prevista de cadena
      } else { // si no es numérico
            if ( motor >='A' && motor <='C' ) { // cotejamos que el motor actual es válido
                  cadena[posicion]=0; //Ponemos un final de cadena para cortar
                  Serial.print("Motor=");
                  Serial.print(motor);
                  Serial.print(", Valor=");
                  valor=atoi(cadena);
                  Serial.println(valor);
            }
            posicion=0;
            motor=leido; // Si no es numérico lo establecemos como caracter indicador de motor
      }
    }
 }
40  International / Español / Re: COMO GUARDAR 100 DATOS QUE SE TOMAN POR MEDIO DE UNSENSOR EN ARDUINO on: July 11, 2014, 04:36:41 pm
Hola.
A ver; una variable float ocupa 32 bits, que son 4 bytes; es decir que ocuparían 4 X 100 =400 bytes, y no 3200, siempre que los guardes en formato nativo (no como cadenas de texto, por ejemplo). Si son double ocuparían 800 bytes.
Lógicamente, en una tarjeta SD podrías almacenarlos directamente como un archivo de texto y tendrías muchísima más capacidad, pero para 100 datos la EEPROM puede ser suficiente.
Saludos.
41  International / Español / Re: COMO GUARDAR 100 DATOS QUE SE TOMAN POR MEDIO DE UNSENSOR EN ARDUINO on: July 11, 2014, 01:51:27 pm
Para 100 datos creo que sería suficiente con el espacio disponible en la propia EEPROM del arduino.
Para mayor capacidad necesitarías un módulo y una tarjeta SD.
42  International / Proyectos / Re: Ayuda! Cadena de caracteres Arduino on: July 08, 2014, 05:37:23 pm
Hola.
Si funciona, eso es en principio lo importante, así que tu enfoque es válido.
Uno un poco más "estándar" sería recibir toda la cadena agregándola en un String cadenarecibida (hasta recibir el \r) y después analizar el string, buscando el patrón "H2S=":
Code:
int encontrado=cadenarecibida.indexOf("H2S="); // si encuentra en la cadena, indexOf nos dice en qué posición
if (encontrado>=0) // indexOf devuelve -1 si no se encontró coincidencia
    subcadena1=cadenarecibida.subString(encontrado+4,encontrado+9); // extraemos la subcadena entre 4 y 9 caracteres a partir de donde comienza "H2S="
Echa un vistazo a las funciones indexOf y subString en la referencia.
Saludos.
43  International / Proyectos / Re: Ayuda! Cadena de caracteres Arduino on: July 08, 2014, 09:08:21 am
Hola.
¿La cadena es un char *, un objeto string, o tan solo quieres extraer ese dato y desechar el resto mientras la recibes por serial?
44  International / Proyectos / Re: Ayuda! Cadena de caracteres Arduino on: July 07, 2014, 05:00:59 pm
Hola.
Contrapregunta:
¿Cómo distingues tú el dato que te interesa en medio de la cadena?
Lo que se suele utilizar en los logs son, bien longitudes de datos fijas, con lo que sabes en qué posición están los caracteres a extraer, o bien utilizar un separador de datos y, además, si no sabes en qué posición correlativa está, un patrón que preceda al dato.
Por ejemplo, puedes utilizar comas para separar los datos y una letra que te indique qué dato viene. Por ejemplo:
t12.56,h1232,v11.75\n

El proceso sería:
1. leo caracter.
2. dependiendo del caracter leído, sé qué parámetro viene a continuación, y me dispongo a leerlo.
3. Con parseint (o parsefloat si es flotante) leo el dato numérico. El comando va a leer hasta que se encuentre un carácter no numérico (coma o salto de línea).
4. vuelta a comenzar.

Es una idea básica, pero creo que te puede dar alguna idea de cómo comenzar a planificarlo.
Saludos.
45  International / Hardware / Re: conectar lcd a arduino a unos 12 metros on: July 04, 2014, 05:39:26 pm
¿El caos que se te forma con i2c extendido con RS485 sabes si es por problema de hardware o de software? ¿No tengo ni idea de cómo son exactamente esos lcd, pero ¿no compartirán la misma dirección, por ejemplo?
Pages: 1 2 [3] 4 5 ... 34