Show Posts
Pages: [1] 2 3
1  International / Proyectos / Re: Artrometro de Rodilla on: November 19, 2013, 06:20:22 am
Hola, yo soy bastante nuevo pero no entiendo que quieres hacer, por que en el código metes los potenciometros en el los puertos analógicos 1 y 2 y luego en la variable sensorValue lees el A0, que luego no utilizas para nada, porque por el LCD sacas el valor del pot1 y pot2 "lcd.print (analogRead(potPin1)) y lcd.print (analogRead(potPin2))" , así que toda la transformación que has estado haciendo no la reflejas en ningún sitio, para hacer los que dices de pasar de 0 -1023 a 0 - 4,5 puedes utilizar la opción map.

int sensorValue = analogRead(pot1 ); // pongo el 1 pero puede ser el 2 de donde saques el valor porque en el código pones el 0
sensorvalue = map(sensorvalue, 0, 1023, 0, 4,5);
lcd.print (sensorvalue);

haber si te vale así

Un saludo

2  International / Software / Re: Problema compilando on: August 17, 2013, 02:52:27 am
Hola para que el arduino funcione tienes que poner siempre en el programa las dos instrucciones. setup y loop y tu no las has puesto.


void setup()
{
aqui configuras los pines, si son entradas o salidas y demas cosas
}

void loop()
{
aquí pones el código que quieres que ejecute
}
 
3  International / Software / Re: ayuda programar bombeo [solucionado] on: August 06, 2013, 04:48:18 am
Hola, tienes razón, lo voy a cambiar por millis()-tiempo>=3000 y nada más entrar en el bucle vuelvo a coger el tiempo para que después del tiempo fijado me entre otra bomba, lo probaré esta misma tarde porque ahora no estoy, muchas gracias.

un saludo

Fermg
4  International / Software / Re: Ayuda código contador analógico on: August 05, 2013, 02:32:16 pm
No te suma más que uno porque al final igualas las 2 variables

  lastpasoVuelta1 = pasoVuelta1;                 

y en la anterior variable le dices que para que te cuente tiene que ser diferentes los estados

 if (pasoVuelta1 != lastpasoVuelta1) {          // the button state has changed!
    if (pasoVuelta1==HIGH) {                // check if the button is pressed
      vueltas1++;

      }

   no le cambias en ningún momento la variable primera, tienes las dos en HIGH, o por lo menos es lo que yo veo pero puedo estar confundido, echale un vistazo por si acaso

saludo
5  International / Software / Re: ayuda programar bombeo [Solucionado] on: August 05, 2013, 02:24:01 pm
Hola gente, ya está solucionado el problema era que no había configurado bien los pins porque había puesto >3 y tenía que ser <4 para que funcionase correctamente, con el tema del tiempo si lo pongo >= 3000 me pasa lo que yo creía que se encienden todas las bombas y eso no quiero y lo he dejado como estaba.

muchas gracias a todos
6  International / Software / Re: ayuda programar bombeo on: August 05, 2013, 01:22:21 am
Ahora no puedo, pero a la noche lo probaré, solo una duda, ¿si pongo mayor o igual, no estará todo el rato entrando al bucle? esta es mi teoría;
 millis()-tiempo >= 3000 por ejemplo, cada vez que pase entrara sumara uno al contador y me encenderá una bomba no? es una pregunta puede que sea absurda si lo es lo sieno.

muchas gracias por responder.
7  International / Software / ayuda programar bombeo [solucionado] on: August 04, 2013, 01:44:17 pm
hola gente quiero simular un bombeo, que vallan arrancando las bombas correlativas y que si una bomba lleva encendida X tiempo y si la boya de alto sigue en HIGH arranque otra, no se que estoy haciendo mal porque no hace nada bien.

muchas gracia a todos.

Quote
int bomba[] = { 6, 9, 10, 11 };  // pines digitales de las bombas
const int Boya_alto=7;              // sensor alto
const int Boya_bajo=4;             // sensor bajo
unsigned long tiempo;
int contador_bomba=0;            // contador de la bomba q tiene q arrancar

void setup(){
  for (int i=0; i>3; i++)
  {
    pinMode(bomba,OUTPUT);
  }
  pinMode(Boya_bajo,INPUT);
  pinMode(Boya_alto,INPUT);
}

void loop()
{
  if(digitalRead(Boya_alto)==HIGH)           // si la boya esta en alto entro en el bucle
  {
    tiempo = millis();                              // cojo el tiempo para saber cuando ha empezado
    while(digitalRead(Boya_bajo) != LOW)  // mientras sea diferente a bajo dentro del bucle
    {
      digitalWrite(bomba[contador_bomba],HIGH); //enciendo la bomba que corresponda
      if (digitalRead(Boya_alto == HIGH) && (millis() - tiempo == 3000))  // si el tiempo es superior al marcado.
      {
        contador_bomba++;  // le sumo uno para arrancar la siguiente  bomba
        digitalWrite(bomba[contador_bomba],HIGH);  // arranca la bomba de ayuda.
      }
      delay(100)              
    }
    contador_bomba++;      // aquí una vez se ha bajado el nivel de agua le sumo 1 a la bomba para la siguiente arrancada
  }
  for (int i=0; i>3;i++)                      
  {
    digitalWrite(bomba,LOW);   // apago todas las bombas, no tengo q saber cual esta encendida
    delay(10);
  }
  if(contador_bomba > 3)
  {
    contador_bomba=0;               // si el contador es mayo de 3 se pone a cero
  }
}

muchas gracias a todos, puede ser que este fatal el código.

un saludo;

Fermg
8  International / Software / Re: Delay or interrupción on: July 19, 2013, 01:35:56 am
Hola Maxid tiene razón, tienes que hacer un antirebote, sigo pensando que lo mejor es que vayas sumando para hacer un contador, que este lo que trendras en el swicht.

El problema que he visto en el código que has puesto es que lo has pegado tal y como yo te lo puse y solo era un ejemplo. En el caso 2, tienes el break; antes de decirle al arduino que haga las cosas y así no vas a poder hacer nada, porque sale del caso 2 antes de que le mandes hacer algo,el "break" pon lo debajo del digitalWrite(led,LOW); para comprobar que te funcionan los dos casos el 1 y el 2 pon algo de código también  en el 1 para que veas si va bien o mal, para hacer las pruebas baja el tiempo de espera no esperes todo ese tiempo, con que esperes cada 25000 milisegundos creo que es más que suficiente para las pruebas ya lo cambiaras al tiempo que creas conveniente, con respecto a sumarle, llegara un momento que tengas que hacer X cosas por ejemplo 10 y lo tienes que limitar ahí, porque si no seguirá contándote hasta el infinito y no queremos eso tampoco,

ejemplo;

if (estado > 10)   // si estado es mayor de 10 puedes poner el que tu quieras.
{
estado =1;          // aquí volverá al primero de los estado.
}

switch (estado) {
    case 1:                       // comprobamos si entra en el estado con el 1 te hara un for 10 veces
       for (int i=1; i=10;i++)
      {
      digitalWrite(ledPin, HIGH);
      delay(100);
      digitalWrite(ledPin, LOW);
     }
      break;
     
    case 2:   
      digitalWrite(ledPin, HIGH);
      delay(1000);
      digitalWrite(ledPin, LOW);
      break;
}

espero haberte ayudado, sigo diciendo que habra mil formas de hacerlo mejor, pero bueno yo también soy principiante.

saludos
9  International / Software / Re: Delay or interrupción on: July 18, 2013, 09:27:08 am
Hola te voy a intentar ayudar pero yo no soy muy bueno en esto la verdad llevo poco tiempo haber si te vale algo de lo que te comento y así avances un poco, yo creo que te valdría la función millis(), que toma el valor de la placa desde que lleva encendida este valor desborda a los 50 dias aprox.
entonces justo antes de acabar el setup yo cogería el tiempo en una variable unsigned long tiempo_anterior.
y luego miraría cuando han pasado las 6 horas restando el tiempo actual con el anterior tomado;

ejemplo:
Quote
int estado = 1;
unsigned long tiempo_anterior;
int boton=??;    // esto es un ejemplo

void setup()
{
.........
.........

{

void loop()
{
...........
...........

if (millis()- tiempo_anterior >21600000) // comprobamos si han pasado las 6 horas.
{
tiempo_anterior = millis();  // volvemos a guardar el tiempo para contar las proximas seis horas.
estado = estado +1;        // aqui le sumamos 1 al estado para que cambie de valor.
}

if (digitalRead(boton) == HIGH) // si pulsamos el botón....
{
tiempo_anterior = millis() // volvemos a coger el tiempo para que se reseteen las 6 horas.
estado = estado-1;         // le quitamos 1 al estado volvemos al anterior
}

switch (estado) {
    case 1:
      //hacer algo cuando sea igual a 1
      break;
    case 2:
      //hacer algo cuando sea igual a 2
      break;


    default:
      // si nada coincide, ejecuta el "default"
      // el "default" es opcional
  }

}

espero que te sirva para algo y que te haga avanzar en el proyecto, seguro que se puede hacer mucho mejor pero bueno este es mi granito de arena.

un saludo a todos;

Fermg
10  International / Español / Re: Pasar de String a int,float,long... on: July 17, 2013, 04:09:29 am
Has probado con serial.parseint(), copio y pego lo que pone en la referencia de la pagina oficial de arduino;

Serial.parseInt() returns the first valid (long) integer number from the serial buffer. Characters that are not integers (or the minus sign) are skipped. Serial.parseInt() is terminated by the first character that is not a digit.
Serial.parseInt() inherits from the Stream utility class.

esta opción esta disponible a partir de IDE 1.0.

un saludo
11  International / Español / Re: Ayuda con millis on: July 13, 2013, 02:27:08 pm
Hola yo no soy muy bueno en esto y no llevo mucho tiempo programando, la función millis la tienes que llamar, cuando un evento se halla realizado como por ejemplo lo que decías tú que al hacer tal cosa a los 10 sg se desactive.
lo que tienes que hacer es crearte una variable de tiempo:

ejemplo:

unsigned long tiempo=0;
cuando hallas presionado un boton y has encendido una led y lo quieres apagar debería de ser tan facil como:

if (digitalRead(6) == HIGH) // miramos si se a presionado el botón.
{
digitalWrite(13,HIGH);      // encendemos el led que queramos.
tiempo=millis;                  // aqui lo que hacemos es guardar en la variable el tiempo que lleva la placa encendida.
}

luego miramos cuando se cumple lo que queremos hacer, llamando a la función millis para saber el tiempo transcurrido ejemplo:

if (millis-tiempo >10000)  // aqui lo q miramos es si han pasado los 10sg que queriamos
{
digitalWrite(13,LOW);      // apagamos el led encendido anteriormente.
}

espero haberte sido de ayuda, si alguien cree que está mal que lo corrija sin ningún tipo de problema.

Un saludo a todos que haceis esto posible
muchas gracias a todos
12  International / Software / Re: Comunicación Serial on: March 05, 2013, 03:25:35 pm
el sketch que me has mandado funciona a la perfección cuando le mandas por el serial de ide te lo hace perfecto, voy a ver si soy capaz de hacerlo funcionar mandandole las ordenes por vb. muchas gracias por la ayuda ya comentare si me funciona algún día de estos.
13  International / Software / Re: Comunicación Serial on: March 05, 2013, 07:13:52 am
espero que no te hallas enfadado por lo que te he comentado luego a la tarde cuando llegue a casa voy a probra tu código para ver que es lo que tengo mal.

muchas gracias.
14  International / Software / Re: Comunicación Serial on: March 05, 2013, 07:03:26 am
Muchas gracias por el código, es practicamente igual que el que tengo yo, cada botón  manda un número o letra que reconoce el arduino, pero el problema es lo que te comentaba antes que tengo que usar parseint() para poder manejar un puente H para eso era el mandar una letra y un número que es la velocidad ejemplo a123 o b255 para que vaya en un sentido o en otro.
15  International / Software / Re: Comunicación Serial on: March 05, 2013, 06:33:16 am
No entiendo muy bien lo que quieres decir, yo me coloco en la línea de la comunicación serial y pongo a123456767788 lo que sea y le doy a Enter y se me enciende el led, luego lo mismo 123g123455 y Enter y el led no se apaga y lo mismo con 't'  y no  entra en el bucle. Lo que voy a comprobrar al llegar a casa si poniendo en el array en la posición cero otra letra se me apaga el led solo por probar porque es lo único que no he probado.
Pages: [1] 2 3