hola, buenas tardes,
editado: estoy usando este núcleo: GitHub - earlephilhower/arduino-pico: Raspberry Pi Pico Arduino core, for all RP2040 boards
estoy compilando para RP2040 y me da este error
c:/users/dnpcw/appdata/local/arduino15/packages/rp2040/tools/pqt-gcc/1.5.0-b-c7bab52/bin/../lib/gcc/arm-none-eabi/10.3.0/../../../../arm-none-eabi/bin/ld.exe: C:\Users\dnpcw\AppData\Local\Temp\arduino\sketches\B9630E93340346D7B4C1B21074C83158\sketch\botones_pullup_pulldown.ino.cpp.o: in function
loop': C:\Users\dnpcw\GDrive\DSD\en proceso\Tarjetas MIFARE\RPIpico\fuentes Arduino IDE\pruebas\botones_pullup_pulldown/botones_pullup_pulldown.ino:115: undefined reference to
_Z27KY040_determinarSentidoGirov'c:/users/dnpcw/appdata/local/arduino15/packages/rp2040/tools/pqt-gcc/1.5.0-b-c7bab52/bin/../lib/gcc/arm-none-eabi/10.3.0/../../../../arm-none-eabi/bin/ld.exe: C:\Users\dnpcw\GDrive\DSD\en proceso\Tarjetas MIFARE\RPIpico\fuentes Arduino IDE\pruebas\botones_pullup_pulldown/botones_pullup_pulldown.ino:117: undefined reference to `_Z25KY040_IntervaloEntrePasosv'
c:/users/dnpcw/appdata/local/arduino15/packages/rp2040/tools/pqt-gcc/1.5.0-b-c7bab52/bin/../lib/gcc/arm-none-eabi/10.3.0/../../../../arm-none-eabi/bin/ld.exe: C:\Users\dnpcw\GDrive\DSD\en proceso\Tarjetas MIFARE\RPIpico\fuentes Arduino IDE\pruebas\botones_pullup_pulldown/botones_pullup_pulldown.ino:121: undefined reference to `_Z25KY040_IntervaloEntrePasosv'
collect2.exe: error: ld returned 1 exit status
exit status 1
Compilation error: exit status 1
este es el codigo
archivo encoder_ky040.h
#include <stdint.h>
#include <stdbool.h>
#include <Arduino.h>
#define ENC_ROT_SW 2
#define ENC_ROT_CLK 0
#define ENC_ROT_DT 1
#define KY040_TIEMPO_MIN_ENTRE_PULSOS 50
//------------------------------------------------------------------------------
uint8_t KY040_IntervaloEntrePasos(void);
bool KY040_determinarSentidoGiro(void);
//------------------------------------------------------------------------------
archivo encoder_ky040.c
#include "encoder_ky040.h"
//------------------------------------------------------------------------------
unsigned long KY040_TiempoEntrePulsos(void)
{
static unsigned long mSegAnt = 0, mSegAct = 0;
mSegAnt = mSegAct;
mSegAct = millis();
return (mSegAct - mSegAnt);
}
//------------------------------------------------------------------------------
bool KY040_determinarSentidoGiro(void)
{
bool ret=false;
if ( digitalRead(ENC_ROT_DT) == 0 ) ret = true;
return ret;
}
//------------------------------------------------------------------------------
uint8_t KY040_IntervaloEntrePasos(void)
{
unsigned long tiempoEntrePulsos = KY040_TiempoEntrePulsos();
if ( tiempoEntrePulsos < KY040_TIEMPO_MIN_ENTRE_PULSOS )
{
return (KY040_TIEMPO_MIN_ENTRE_PULSOS - tiempoEntrePulsos);
}
else
{
return 1;
}
}
//------------------------------------------------------------------------------
archivo botones_pullup_pulldown.ino
#include "encoder_ky040.h"
//------------------------------------------------------------------------------
#define __DEBUG__
//------------------------------------------------------------------------------
#define BTN_CREA_TARJ_ADM 13
#define LED_VERDE 14
//------------------------------------------------------------------------------
volatile bool KY040estSwitch = true;
volatile bool KY040estClock = true;
volatile bool btn_crea_tarj_adm_est=true;
//------------------------------------------------------------------------------
void INT_BTN_CREA_TARJ_ADM(void)
{
btn_crea_tarj_adm_est = false;
}
void INT_KY040_SWITCH(void)
{
KY040estSwitch = false;
}
void INT_KY040_CLOCK(void)
{
KY040estClock = false;
}
//------------------------------------------------------------------------------
void setup()
{
#ifdef __DEBUG__
Serial.begin (115200);
while (!Serial) ;
#endif
pinMode (BTN_CREA_TARJ_ADM, INPUT_PULLUP);
pinMode (LED_VERDE, OUTPUT);
pinMode (ENC_ROT_CLK, INPUT);
pinMode (ENC_ROT_DT, INPUT);
attachInterrupt(digitalPinToInterrupt(BTN_CREA_TARJ_ADM), INT_BTN_CREA_TARJ_ADM, FALLING);
attachInterrupt(digitalPinToInterrupt(ENC_ROT_SW), INT_KY040_SWITCH, FALLING);
attachInterrupt(digitalPinToInterrupt(ENC_ROT_CLK), INT_KY040_CLOCK, FALLING);
}
//------------------------------------------------------------------------------
void loop()
{
static bool est_led_verde=false;
static long posEncoder=0;
/**************** BOTON ****************/
if ( !btn_crea_tarj_adm_est )
{
est_led_verde = !est_led_verde;
digitalWriteFast(LED_VERDE, est_led_verde);
btn_crea_tarj_adm_est = true;
}
/**************** KY-040 ****************/
if ( !KY040estSwitch )
{
delay(20);
#ifdef __DEBUG__
Serial.println("Switch presionado");
#endif
KY040estSwitch = true;
}
//-------------------------------------------------------
if ( !KY040estClock )
{
if ( KY040_determinarSentidoGiro() )
{
posEncoder += KY040_IntervaloEntrePasos();
}
else
{
posEncoder -= KY040_IntervaloEntrePasos();
}
#ifdef __DEBUG__
Serial.println(posEncoder);
#endif
KY040estClock = true;
}
}
//------------------------------------------------------------------------------
en el IDE la referencia la sigue hasta la cabecera y de la cabecera al .c
agradezco cualquier ayuda,
saludos