sparkfun / SparkFun_Qwiic_OLED_Arduino_Library

Arduino Library for SparkFun's OLED Qwiic (I²C) boards
https://docs.sparkfun.com/SparkFun_Qwiic_OLED_Arduino_Library/introduction/
Other
9 stars 7 forks source link

Missing declaration errors (for `TwoWire` class) when compiling example sketches #9

Closed vug closed 2 years ago

vug commented 2 years ago

Hi! I've an Arduino MKR 1010 board. Working on a simple temperature sensor & display project.

I've ordered "SparkFun Qwiic OLED Display (0.91 in, 128x32) LCD-17153" display from SparkFun. https://www.sparkfun.com/products/17153 Installed "SparkFun Qwiiic OLED Graphics Library" (library from this repo I think).

Opened the first example "Example-01_Hello". When I click on compile I'm getting the error messages below. Basically it says:

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:64:15: error: 'TwoWire' has not been declared... bool init(TwoWire& wirePort);

Can you please tell what I am doing wrong? Thanks!

Arduino: 1.8.19 (Windows 10), Board: "Arduino MKR WiFi 1010"

In file included from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/samd21/include/samd21.h:69:0,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/samd.h:105,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/WVariant.h:22,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\variants\mkrwifi1010/variant.h:24,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\libraries\Wire/Wire.h:24,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:56,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:48:

C:\Users\vug\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/samd21/include/samd21g18a.h:226:0: warning: "LITTLE_ENDIAN" redefined

 #define LITTLE_ENDIAN          1

In file included from c:\users\vug\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\types.h:67:0,

                 from c:\users\vug\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\stdio.h:61,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/api/Print.h:22,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/api/Stream.h:25,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/api/HardwareI2C.h:22,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\libraries\Wire/Wire.h:23,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:56,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:48:

c:\users\vug\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\machine\endian.h:17:0: note: this is the location of the previous definition

 #define LITTLE_ENDIAN _LITTLE_ENDIAN

In file included from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/samd21/include/samd21.h:69:0,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/samd.h:105,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/WVariant.h:22,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\variants\mkrwifi1010/variant.h:24,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\libraries\Wire/Wire.h:24,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:56,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_grssd1306.h:53,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_grssd1306.cpp:51:

C:\Users\vug\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.2.0/CMSIS/Device/ATMEL/samd21/include/samd21g18a.h:226:0: warning: "LITTLE_ENDIAN" redefined

 #define LITTLE_ENDIAN          1

In file included from c:\users\vug\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\types.h:67:0,

                 from c:\users\vug\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\stdio.h:61,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/api/Print.h:22,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/api/Stream.h:25,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\cores\arduino/api/HardwareI2C.h:22,

                 from C:\Users\vug\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.13\libraries\Wire/Wire.h:23,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:56,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_grssd1306.h:53,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_grssd1306.cpp:51:

c:\users\vug\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\machine\endian.h:17:0: note: this is the location of the previous definition

 #define LITTLE_ENDIAN _LITTLE_ENDIAN

In file included from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_grssd1306.h:53:0,

                 from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_grssd1306.cpp:51:

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:64:15: error: 'TwoWire' has not been declared

     bool init(TwoWire& wirePort);

               ^~~~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:75:5: error: 'TwoWire' does not name a type; did you mean 'TwoWire_h'?

     TwoWire* m_i2cPort;

     ^~~~~~~

     TwoWire_h

In file included from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:48:0:

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:64:15: error: 'TwoWire' has not been declared

     bool init(TwoWire& wirePort);

               ^~~~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:75:5: error: 'TwoWire' does not name a type; did you mean 'TwoWire_h'?

     TwoWire* m_i2cPort;

     ^~~~~~~

     TwoWire_h

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp: In constructor 'QwI2C::QwI2C()':

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:76:5: error: 'm_i2cPort' was not declared in this scope

     m_i2cPort = nullptr;

     ^~~~~~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp: At global scope:

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:84:6: error: prototype for 'bool QwI2C::init(arduino::TwoWire&)' does not match any in class 'QwI2C'

 bool QwI2C::init(TwoWire& wirePort)

      ^~~~~

In file included from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:48:0:

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:64:10: error: candidates are: bool QwI2C::init(int&)

     bool init(TwoWire& wirePort);

          ^~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:63:10: error:                 bool QwI2C::init()

     bool init(void);

          ^~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp: In member function 'bool QwI2C::init()':

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:98:10: error: 'm_i2cPort' was not declared in this scope

     if (!m_i2cPort)

          ^~~~~~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:99:25: error: no matching function for call to 'QwI2C::init(arduino::TwoWire&)'

         return init(Wire); // no wire, send in Wire

                         ^

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:95:6: note: candidate: bool QwI2C::init()

 bool QwI2C::init(void)

      ^~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:95:6: note:   candidate expects 0 arguments, 1 provided

In file included from C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:48:0:

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:64:10: note: candidate: bool QwI2C::init(int&)

     bool init(TwoWire& wirePort);

          ^~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.h:64:10: note:   no known conversion for argument 1 from 'arduino::TwoWire' to 'int&'

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp: In member function 'bool QwI2C::ping(uint8_t)':

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:110:5: error: 'm_i2cPort' was not declared in this scope

     m_i2cPort->beginTransmission(i2c_address);

     ^~~~~~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp: In member function 'bool QwI2C::writeRegisterByte(uint8_t, uint8_t, uint8_t)':

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:121:5: error: 'm_i2cPort' was not declared in this scope

     m_i2cPort->beginTransmission(i2c_address);

     ^~~~~~~~~

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp: In member function 'int QwI2C::writeRegisterRegion(uint8_t, uint8_t, uint8_t*, uint16_t)':

C:\Users\vug\Documents\Arduino\libraries\SparkFun_Qwiic_OLED_Graphics_Library\src\qwiic_i2c.cpp:139:9: error: 'm_i2cPort' was not declared in this scope

         m_i2cPort->beginTransmission(i2c_address);

         ^~~~~~~~~

exit status 1

Error compiling for board Arduino MKR WiFi 1010.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
ghost commented 2 years ago

I see this and looks to be an include file ordering issue that only the MRK board toolchain encounters.

Quick tests shows including Arduino.h before the include of qwiic_i2c.h in qwiic_i2c.cpp fixes this. But we need to test on all other platforms before releasing this.

Should have this taken care of in the next 2 weeks. -Kirk

ghost commented 2 years ago

Moved the include statement for Arduino.h in qwic_i2c.cpp, to the header file qwiic_i2c.h. Fixes this issue.