29-11-2023, 09:29
Witam,
robie duzy projekt na płytce arduino uno. Mam problem z biblioteką SOftwareSerial wysietla mi takie błedy podczas kompilacji. Porty z ktorych korzystam np.na expanderze jest spowodowane iż w innym kodzie wykorzystuje pozostało porty z arduino. Proszę o pomoc w rozwiązaniu problemu. Wiem ze chodzi tu o jakieś przerwania.
robie duzy projekt na płytce arduino uno. Mam problem z biblioteką SOftwareSerial wysietla mi takie błedy podczas kompilacji. Porty z ktorych korzystam np.na expanderze jest spowodowane iż w innym kodzie wykorzystuje pozostało porty z arduino. Proszę o pomoc w rozwiązaniu problemu. Wiem ze chodzi tu o jakieś przerwania.
Cytat:libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()':
(.text+0x0): multiple definition of `__vector_3'
libraries\PCF8574\PCF8574.cpp.o (symbol from plugin).text+0x0): first defined here
libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()':
(.text+0x0): multiple definition of `__vector_4'
libraries\PCF8574\PCF8574.cpp.o (symbol from plugin).text+0x0): first defined here
libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()':
(.text+0x0): multiple definition of `__vector_5'
libraries\PCF8574\PCF8574.cpp.o (symbol from plugin).text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Błąd kompilacji dla płytki Arduino Uno.
Kod:
#include "Arduino.h"
#include <Servo.h>
#include <Wire.h>
#include "DFRobot_LedDisplayModule.h"
//wspolna biblioteka z zakreckolem
#include "PCF8574.h"
#include "DFRobotDFPlayerMini.h"
PCF8574 expander; //dodatkowe 8 wejsc
Servo Predkosciomierz;
//Servo Opona;
int krok = 180;
int GAZ = 0;
int STOP = 1;
int przyspieszenie = 200;
int zwolnienie = 70;
unsigned long aktualnyCzas = 0;
unsigned long czasprzycisku = 0;
unsigned long czasprzycisku2 = 0;
#if (defined(ARDUINO_AVR_UNO) || defined(ESP8266)) // Using a soft serial port
#include <SoftwareSerial.h>
//#include <AltSoftSerial.h>
SoftwareSerial softSerial(/*rx =*/2, /*tx =*/3);
#define FPSerial softSerial
#else
#define FPSerial Serial1
#endif
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup() {
Serial.begin(9600);
expander.begin(0x20);
expander.pinMode(0, INPUT_PULLUP);
expander.pinMode(1, INPUT_PULLUP);
expander.pinMode(2, INPUT_PULLUP);
expander.pinMode(3, INPUT_PULLUP);
expander.pinMode(4, INPUT_PULLUP);
expander.pinMode(5, INPUT_PULLUP);
expander.pinMode(6, INPUT_PULLUP);
expander.pinMode(7, INPUT_PULLUP); // inicializacja expandera 8 dodatkowych wejsc
Predkosciomierz.attach(5);
Predkosciomierz.write(krok);
// Opona.attach(3);
#if (defined ESP32)
FPSerial.begin(9600, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);
#else
FPSerial.begin(9600);
#endif
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(FPSerial, /*isACK = */true, /*doReset = */true)) { //Use serial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
//----Set volume----
myDFPlayer.volume(20); //Set volume value (0~30).
//myDFPlayer.volumeUp(); //Volume Up
//myDFPlayer.volumeDown(); //Volume Down
//----Set different EQ----
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
}
void loop() {
symulacjaauta();
}
void symulacjaauta()
{
aktualnyCzas = millis();
Serial.println("dzaialam");
Serial.println(" ");
if(expander.digitalRead(GAZ) == LOW && expander.digitalRead(STOP) == HIGH)// wlaczenie gazu
{
Serial.println("Gaz");
myDFPlayer.playMp3Folder(9);
if(krok <= 1) krok = 1;
krok = krok - 1;
Predkosciomierz.write(krok);
delay(przyspieszenie);
zwolnienie = 70;
if(aktualnyCzas - czasprzycisku >= 300UL)
{
przyspieszenie = przyspieszenie - 10;
if(przyspieszenie <= 0) przyspieszenie = 0;
czasprzycisku = aktualnyCzas;
}
}
else
{
Serial.println("zwalniam");
if(krok >= 180) krok = 179;
if(expander.digitalRead(STOP) == HIGH)
{
czasprzycisku = aktualnyCzas;
czasprzycisku2 = aktualnyCzas;
przyspieszenie = 100;
krok = krok + 2;
Predkosciomierz.write(krok);
delay(400);
}
}
if(expander.digitalRead(STOP) == LOW) //wlaczenie stop
{
Serial.println("stop");
czasprzycisku = aktualnyCzas;
if(krok >= 180) krok = 179;
krok = krok + 1;
Predkosciomierz.write(krok);
delay(zwolnienie);
if(aktualnyCzas - czasprzycisku2 >= 100UL)
{
zwolnienie = zwolnienie - 10;
czasprzycisku2 = aktualnyCzas;
}
if(zwolnienie <= 0) zwolnienie = 0;
}
//opona();
}
/*
void opona()
{
int predkosc;
predkosc = map(krok, 180, 40, 93, 20);
Serial.print("predkosckola ");
Serial.println(predkosc);
Opona.write(predkosc);
}*/