Closed TalkingMonkeyWithComputer closed 7 years ago
It has been many moonssince I looked at this, so I'm rusty! I remember testing it with softwareserial, but I don't know if that was before or after I made it a proper library.
Arduino is a bit of a hack - it doesn't have the usual C toolchain or process, so sometimes things behave funny.
What version is your Arduino IDE?
Can you try adding a #define PS_INCLUDE_SOFTWARESERIAL 1
in PinSerial.h
before the #ifdef check you spotted? That gets things to compile for me (though only if I include PingSerial before SoftwareSerial (otherwise we lose the definition of UINT16_MAX, suggesting SoftwareSerial.h is breaking it some how).
Thx stoduk
Thinking more, the Arduino behaviour is probably as expected. A #define in an .ino file (which eventually becomes a .cpp file, with some munging) probably isn't going to affect the .cpp file in a library. We'd need magic in Makefiles or similar to pass the right flags to the library when it is compiled.
So I think the hack I told you is actually the best option - luckily it worked :)
I think I added the selective inclusion of SoftwareSerial because of a real Arduino oddity - to use a library that depends on SoftwareSerial.h would require every .ino including that library to include that header file. Which seems odd if you don't want to use a SoftwareSerial port, and might be a memory concern. So I went heavy handed and excluded it, which requires the hackery to re-include it as we've found.
I'll add a comment somewhere that this is how you enable things - unless some internet stranger comes up with a better idea sometime.
HI stoduk,
thx for excellent library - works perfect when using a hardware serial port, as in your examples
include
include
PingSerial us100(Serial, 50, 1200);
Pls advise how to use a SoftwareSerial port to initialise PingSerial 2.1 Seems you have a already thought of this - as I understand you have made initialization available in PingSerial.h
ifdef PS_INCLUDE_SOFTWARESERIAL
PingSerial(SoftwareSerial& serialport, uint16_t min_mm_distance = 0, uint16_t max_mm_distance = 500); PingSerial(byte rx_pin, byte tx_pin, uint16_t min_mm_distance = 0, uint16_t max_mm_distance = 500);
endif
2.2 OK so I naively used the following code snippet -
define PS_INCLUDE_SOFTWARESERIAL
include
include
SoftwareSerial mySerial(2, 3);
PingSerial us100(mySerial, 50, 400);
2.3 I get a lnking error undefined reference to `PingSerial::PingSerial(SoftwareSerial&, unsigned int, unsigned int)' collect2: error: ld returned 1 exit status
2.4 Sure I've made some stupid error - due to my ignorance in programming - pls help!! thx V (PS using an arduino uno)