ich möchte in einem Programm, in welchem ich die ISRs 0 und 1 benutze auch noch ein Sprachmodul (DFPlayer)einbinden. Die Software für das Sprachmodul benötigt neben einer eigenen Library noch die Library "SoftwareSerial.h" um mit dem Sprachmodul zu kommunizieren.
Mein Programm alleine geht. Das Testprogramm für die Sprachausgabe auch.
Dann habe ich die relevanten Zeilen aus dem Sprachausgabemodul in mein Programm übernommen.
Da schmeißt mir die IDE einen bzw. mehrere Fehler um die Ohren.
Ich habe jetzt den Code auf ein absolutes Minimum zusammengestrichen und bin dabei dann drauf gekommen, dass die SoftwareSerial intern auch die ISRs benutzt. Das geht natürlich nicht.
Aber wie kann ich das nun umgehen?
Mein Programm benötigt unbedingt ISR(PCINT0_vect) und ISR(PCINT1_vect)
Die sind aber schon in der SoftwareSerial.h bzw. .cpp drin.
libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()':
(.text+0x0): multiple definition of `__vector_4'
sketch\Test4_-_.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board Arduino Uno.
Ich hatte in meiner Dummheit anfangs nicht die ganze Fehlermeldung beachtet, weil bei mir immer nur die letzten 3 Zeilen angezeigt wurden. (Ab collect2.exe: error ) Und ich habe ewig nach diesem Begriff gegoogelt.
Das Fehlerfenster habe ich natürlich inzwischen vergrößert und das Schlamassel damit erkannt.
Das verwendet die Timer Interrupts und nicht Pin Change
Danke - das sieht gut aus. Laut Beschreibung müsste das damit gehen. Ich muss noch einen Weg finden wie ich die beiden RX/TX-Pins ändern kann Die sind irgendwo wohl "fest" vergeben. Aber für heute habe ich genug mit Fehlersuche und Versuchen verbracht. Morgen ist dann mein Motorrad dran. Mittwoch oder Donnerstag werde ich das dann mal testen.
paulpaulson:
Hallo
Warum verwendest du nicht die arduinoüblichen Interrupt-Methoden ?
Mein Programm benötigt unbedingt ISR(PCINT0_vect) und ISR(PCINT2_vect) für 8 parallele Dateneingänge. Also 8 verschiedene Interrupts. Bitte dazu aber jetzt keine Diskussion.
Das verwendet die Timer Interrupts und nicht Pin Change
Super Tipp! Das funktioniert. Leider kann man die seriellen Pins wirklich nicht ändern, so dass ich eben 2 meiner Abfrageleitungen woanders hingelegt habe. Jetzt ist aber ausgereizt. 16 Inputs, 8 mit PCINT , 8 ohne Interrupt und die 2 neuen Seriellen.
Vielen Dank!