"Unit Scales" example in github doesn't work
-
I use m5stack grey with "Unit Scale" link. after using arduino sketch compile and upload code , it shows "scales not connect".
but i use easyloader to burn firmware it works fine.
so what is the difference between them.
and i use i2c to scan it shows 0x26 -
Hello @pop-k
it looks like newer ESP32 Arduino libraries added an overloaded
begin()
function to also allow to setup an I2C slave. Whether thebegin()
for an I2C master or slave is called is determined by the linker by looking at the parameter types.I2C master: parameter types are
int
,int
,uint32_t
bool TwoWire::begin(int sda = -1, int scl = -1, uint32_t frequency = 0U)
I2C slave: parameter types are
uint8_t
,int
,int
,uint32_t
bool TwoWire::begin(uint8_t slaveAddr, int sda = -1, int scl = -1, uint32_t frequency = 0U)
Now some unit libraries (including the one for unit scales) are calling the
begin()
like this:_wire->begin(_sda, _scl, 400000UL);
where
_sda
and_scl
are defined asuint8_t
.So the first parameter
_sda
is anuint8_t
and the first parameter of thebegin()
for an I2C slave also is anuint8_t
(whereas the first parameter for an I2C master is anint
) therefore the linker calls thebegin()
of the I2C slave. But we need it to call thebegin()
of an I2C master.In short, try to modify below line in file
M5Unit-Scales/src/M5_Scales.cpp
from:_wire->begin(_sda, _scl, 400000UL);
to
_wire->begin((int)_sda, (int)_scl, 400000UL);
to force the linker to call the I2C master
begin()
.Thanks
Felix -
Thank you very much . work like a charm!!
-
Hello @pop-k
I am glad to hear that. Thank you for reporting back.
@m5stack : please check this pull-request. Thank you.
Thanks
Felix