Hola tengo el siguiente error el cual recibo por el monitor de serie
ya que el compilador de arduino no me da error es propio del esp23
alguien tiene idea de como solventarlo es un código de un tacómetro que estoy diseñando el cual compara la diferencia de tiempo entre dos pulsos el error me daba aunque no mande pulsos por el pin 23 (pin que se medirá para el calculo de RPM), cambie algunos valores iniciales a 1 para que no divida entre 0. Anterior mente me daba este error:
Guru Meditation Error: Core 1 panic'ed (IntegerDivideByZero). Exception was unhandled.
Core 1 register dump:
PC : 0x400d114a PS : 0x00060830 A0 : 0x800d1c60 A1 : 0x3ffb2800
A2 : 0x3ffc1354 A3 : 0x00000000 A4 : 0x00000014 A5 : 0x00000004
A6 : 0x3ffb8874 A7 : 0x80000001 A8 : 0x00000000 A9 : 0x3ffb27e0
A10 : 0x3ffc1354 A11 : 0x00000000 A12 : 0x0000000a A13 : 0x00000003
A14 : 0x00000001 A15 : 0x00000000 SAR : 0x00000009 EXCCAUSE: 0x00000006
EXCVADDR: 0x00000000 LBEG : 0x40085e98 LEND : 0x40085ea3 LCOUNT : 0x00000000
Backtrace:0x400d1147:0x3ffb28000x400d1c5d:0x3ffb2820
ELF file SHA256: 0000000000000000
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1184
load:0x40078000,len:13160
load:0x40080400,len:3036
entry 0x400805e4
Cambiando lo ya dicho me da este Error al mandar pulso por el pin 23 :
assert failed: taskSelectHighestPriorityTaskSMP tasks.c:3446 (xTaskScheduled == pdTRUE)
Backtrace:0x40084340:0x3ffbd3a00x3ffbd45d:0x3ffbd480 |<-CORRUPTED
ELF file SHA256: 0000000000000000
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1184
load:0x40078000,len:13160
load:0x40080400,len:3036
entry 0x400805e4
En fin este es mi código espero me puedan ayudar:
bool auxPulso = 0;
//definen la cantidad de pulsos por vuelta y el tiempo que le corresponde
unsigned int pulsosvuelta = 1;
unsigned long int tiempo = 60000/pulsosvuelta;
unsigned long int anterior = 1;
unsigned long int RPM = 1;
unsigned long int RPMavrg = 1;
unsigned long int contador = 1;
unsigned long int RPMtotal = 1;
void pulsos() {
detachInterrupt(23);
delay(100);
if(auxPulso == 0)
{
anterior = millis();
auxPulso = 1;
}
else
{
RPM = round((millis() - anterior)/tiempo);
RPMtotal = RPM + RPMtotal;
contador ++;
anterior = millis();
}
{
attachInterrupt(23, pulsos,RISING);
}
}
void setup() {
Serial.begin(115200);
pinMode(23, INPUT_PULLUP);
attachInterrupt(23, pulsos, RISING);
Serial.flush();
}
void loop() {
delay(1000);
RPMavrg = round(RPMtotal/contador);
Serial.println(RPMavrg);
}