Warning: integer overflow in expression ERROR

En este caso solo quiero probar la parte de detección de pulsos para un tacómetro donde al momento de verificar el código da el siguiente error:

C:\Users\IDROID\Desktop\CODIGO\CODIGO.ino: In function 'void loop()':
C:\Users\IDROID\Desktop\CODIGO\CODIGO.ino:32:10: warning: integer overflow in expression [-Woverflow]
RPM = (60*1000/(pulsosvuelta))/(millis()- tiempo)*contador;
^~~

!!! cabe resaltar que solo da el error en el compilador de arduino ya que este mismo código lo probé en tinkercad con un circuito y funciono ya hay un post parecido en ingles pero realmente creo que hay no esta la solución lo adjunto por si alguien cree q me perdí la respuesta en ese post:

Integer overflow error help - Using Arduino / Programming Questions - Arduino Forum

volatile byte contador=0;
unsigned int RPM;
unsigned long tiempo;
int estado=0;
unsigned int pulsosvuelta = 1;
/*#define hold 3
#define detener 4

bool boton1 = false; 
bool boton2 = false;*/ 

void funcioncontador() {

contador++;
}

void setup() {
Serial.begin(9600);
Serial.println("Start");
attachInterrupt(0, funcioncontador, FALLING); // llamar funcion de contador 0=pin2
contador=0;
RPM=0;
tiempo=0;

}

void loop() {
  switch(estado){
    case 0:
delay(1000);
detachInterrupt(0); 
RPM = (60*1000/(pulsosvuelta))/(millis()- tiempo)*contador;
tiempo = millis();
contador=0;
Serial.print("RPM:");
Serial.println(RPM);
attachInterrupt(0, funcioncontador,FALLING);
}
  }
    
/*
    if (digitalRead(3) == LOW && boton1 == false) {
        estado=1;
        boton1 = true;}

    if (digitalRead(3) == HIGH && boton1 == true) {
        boton1 = false; }
        
    if (digitalRead(4) == LOW && boton2 == false) {
        estado=2;
        boton2 = true;}

    if (digitalRead(4) == HIGH && boton2 == true) {
        boton2 = false; }
             
  break;

  case 1:
Serial.println("HOLD:");


    if (digitalRead(3) == LOW && boton1 == false) {
        estado=0;
        boton1 = true;}

    if (digitalRead(3) == HIGH && boton1 == true) {
        boton1 = false; }
        
    if (digitalRead(4) == LOW && boton2 == false) {
        estado=2;
        boton2 = true;}
    
    if (digitalRead(4) == HIGH && boton2 == true) {
        boton2 = false;} 

  break;
  
  case 2:

      if (digitalRead(3) == LOW && boton1 == false) {
        estado=1;
        boton1 = true;}

    if (digitalRead(3) == HIGH && boton1 == true) {
        boton1 = false;}
        
    if (digitalRead(4) == LOW && boton2 == false) {
        estado=0;
        boton2 = true;}
    
    if (digitalRead(4) == HIGH && boton2 == true) {
        boton2 = false; }
  
  break;
}
}
*/

60 * 1000 = 60000. El entero con signo es el tipo predeterminado para la aritmética, y el entero con signo máximo es 32767

Utilice lo siguiente para forzar el uso de enteros sin signo.

60U * 1000 (valor máximo 65535)

1 Like

Muchas gracias ya funciona, una pregunta mas jsjs disculpa sabes como reducir el ruido de un modulo de sensor Infrarrojo, lo que sucede es que antes lo probé y funcionaba bien cada q pasaba un objeto enfrente de el sensor me marcaba justo como si debería que es marcando una entrada pero después de varias pruebas cuando pasa un objeto enfrente en lugar de detectar solo uno me marca que detecta mas en situaciones 3,6,etc. Probé agregando un capacitor de 0.1 microfaradios pero me comentan que si subo las revoluciones de lo que detectara tendré que disminuir el valor del capacitor, además no se si sea correcto ya que como te comento antes si funcionaba de forma correcta.

No estoy familiarizado con los sensores IR. Lo mejor es crear otra publicación, con tu nueva pregunta. Incluya un diagrama esquemático, su código y enlaces a las hojas de datos; alguien lo ayudará, estoy seguro.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.