Ayuda con codigo de Arduino

Tema en 'R/C ELECTRÓNICA' iniciado por juanvivo, 15 Nov 2011.

  1. juanvivo Maestro FPV

    juanvivo
    Registrado:
    13 Ene 2011
    Mensajes:
    2.341
    Me Gusta recibidos:
    0
    Llevo casi dos horas con una tonteria que me esta volviendo loco. Lo postearia en los hilos de arduino, pero son viejisimos y no se si se podran rescatar.

    EL caso es que tengo un cachito de codigo tan simple como esto:

    Insertar CODE, HTML o PHP:
    c= (20*vol)/1023;
    "vol" es numero positivo entre 0 y 1023. La linea de codigo funciona correctamente y me devuelve el numero que me tiene que devolver, en este caso "14".

    Ahora resulta que cambio un numero en esa formula, el 20 por 60 quedando asi:

    Insertar CODE, HTML o PHP:
    c= (60*vol)/1023;
    y no hay manera de que funcione, me devuleve "-21" :blink: .

    Teneis idea de donde meto la pata???? es que no veo nada raro, y en un cacho tan simple, no veo donde puede estar el error...
     
  2. jose3f Miembro

    jose3f
    Registrado:
    6 Feb 2010
    Mensajes:
    999
    Me Gusta recibidos:
    0
    Juanvivo:

    Es un problema de desbordamiento (overflow):

    Tomado de la referencia de Arduino:

    http://arduino.cc/es/Reference/Arithmetic

    Saludos.
     
  3. juanvivo Maestro FPV

    juanvivo
    Registrado:
    13 Ene 2011
    Mensajes:
    2.341
    Me Gusta recibidos:
    0
    Total... Lo he solucionado haciendo las operaciones en partes para que no pase de cierto limite... Gracias jose!
     
  4. Rodrigo_zgz Miembro

    Rodrigo_zgz
    Registrado:
    13 Ene 2011
    Mensajes:
    276
    Me Gusta recibidos:
    0
    Tienes que tener en cuenta como defines las variables,
    "int" pueden tomar numero de -32,768 a 32,767
    "long" puede tomar de -2,147,483,648 a 2,147,483,647
    "unsigned long" puede tomar de 0 a 4,294,967,295
    "byte" puede tomar de 0 to 255

    y muchos mas tipos que hay.
    En reference y Data Tipes, tienes todos.

    por ejemplo si almacenas el tiempo actual en una variable int con la funcion
    int tiempo=0;
    tiempo = millis();
    llegará un momento que el "int" desbordara y no funcionara el programa porque millis() es del tipo "unsigned long" y hay muchos mas numeros que en un "int"

    No se si esto lo tenias en cuenta, pero por si acaso.

    Saludos!
     
  5. juanvivo Maestro FPV

    juanvivo
    Registrado:
    13 Ene 2011
    Mensajes:
    2.341
    Me Gusta recibidos:
    0
    GRacias rodrigo, voy a empollar.
     

Compartir esta página