arduino - `__vector_3' 的多重定义
问题描述
该项目由硬币槽和指纹以及 i2c 液晶显示器组成,我尝试使用附加的 pinintterupt 功能硬币槽位于引脚 9,然后指纹传感器位于引脚 2,3 tx 和 rx
然后它显示错误
完整代码
#include <PinChangeInterrupt.h>
#include <Adafruit_Fingerprint.h> //Libraries needed
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#define coinSlot 9 // coinslot 5v to 0v if coin passes on the sensor
#define I2C_ADDR 0x27 //LCD i2c stuff
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
int relayPin = 4;
String Names[] = { "RAVEN", "Surtr", "Tech",}; //Those are the names affected to the fingertemplates IDs
//The first on which is Names[0] : "" has the ID 1 in the fingerprint sensor
SoftwareSerial mySerial(2, 3); //Fingerprint sensor wiring RX 3, TX 2
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin); //LCD declaring
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); //Fingerprint sensor declaring
volatile int coinCount = 0;
int requiredCoins = 1;
boolean coinInserted = false;
int coinSlotSignal;
void setup()
{
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH);
pinMode(coinSlot, INPUT_PULLUP);
lcd.write(EEPROM.read(5));
Serial.begin(9600);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(9), coinInterrupt, FALLING);
Serial.print(coinSlot);
finger.begin(57600); //Sensor baude rate
lcd.begin (16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(0, 0);
lcd.print("SECURED VAULT");
lcd.home();
finger.getTemplateCount(); //Counts the number of templates stored in the sensor flash memory
delay(2000);
}
void coinInterrupt() {
coinCount++ ;
coinInserted = true;
}
void loop() {
int FingerPrintResult = getFingerprintIDez();
if (FingerPrintResult != -1) { //This function keeps looping and waiting for a fingerprint to be put on the sensor
OpenDoor();
}
else
{
coinSlotSignal = digitalRead(coinSlot);
if (coinInserted) {
coinInserted = false;
coinCount++;
EEPROM.write(0, coinCount);
Serial.println(EEPROM.read(0));
lcd.setCursor(0, 0);
lcd.print("TOTAL:");
lcd.setCursor(0, 1);
lcd.print(coinCount);
}
}
}
//Only the modifications are commented
int getFingerprintIDez() {
uint8_t p = finger.getImage(); //Image scanning
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz(); //Converting
if (p != FINGERPRINT_OK) return -1;
lcd.clear(); //And here we write a message or take an action for the denied template
p = finger.fingerFastSearch(); //Looking for matches in the internal memory
if (p != FINGERPRINT_OK) { //if the searching fails it means that the template isn't registered
lcd.print("Access denied");
delay(2000);
return -1;
}
//If we found a match we proceed in the function
lcd.print("Welcome"); //Printing a message for the recognized template
lcd.setCursor(2, 1);
lcd.print(Names[finger.fingerID - 1]); //Then print the name we gave it and the -1 is to remove the shift as the ID starts from "1" but the array from "0"
return finger.fingerID;
}
void OpenDoor() {
digitalWrite(relayPin, LOW); // turn on solenoidlock
delay(5000);
digitalWrite(relayPin, HIGH); // turn off solenoidlock
}
但随后它显示错误代码
libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()':
(.text+0x0): multiple definition of `__vector_3'
PinChangeInterrupt0.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino Uno.
希望有人可以帮助如何解决此类问题
解决方案
推荐阅读
- c++ - 括号运算符在 C++ 中的作用是什么
- javascript - window.location.href 不提交表单
- generics - 我该如何处理这个“这不是被覆盖的子类型”错误
- javascript - selenium-webdriver 未使用 npm 安装在 ubuntu 中
- javascript - 如何使用 ajax 将带有图像文件的表单数据上传到 django 模型
- java - 为什么我在扩展类时会收到 ClassCastException?
- python - 无法从另一个脚本调用 py 脚本
- karate - 空手道框架中的查询参数处理
- excel - 联合范围选择失败
- reactjs - 大写的 React Live Clock AM PM 不可见