안녕하세요...
[지문인식 + 모터]소스와 [블루투스 + 모터]소스를 합치려고 하는데
지문인식과 블루투스가 둘 다 SoftwareSerial mySerial을 써서 합치기가 어렵습니다.
지문인식은 mySerial(2,3)로, 블루투스는 btSerial(4,5)로 선언하여 합치려고하는데 아래와 같이 해도 안됩니다ㅠㅠ
시리얼 통신을 2개 하려면 listen();을 넣어주라고 해서 아래와 같이 넣었지만 안됩니다ㅠㅠ
아래 소스에 잘못된것이 있나요? 제가 합쳐본것과 원래 소스 두개 올려봅니다. 도와주세여ㅠㅠ!
원래 각각의 소스입니다.
[블루투스 + 모터]
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
#include "Servo.h" //서보 라이브러리
Servo myservo; //서보객체
SoftwareSerial myerial(4, 5); //시리얼 통신을 위한 객체선언
String myString=""; //받는 문자열
void setup() {
myservo.attach(7); //서보 시그널 핀설정
myservo.write(0); //서보 초기각도 0도 설정
mySerial.begin(9600); //블루투스 시리얼 개방
}
void loop() {
while(mySerial.available()) //mySerial 값이 있으면
{
char myChar = (char)mySerial.read(); //mySerial int형식의 값을 char형식으로 변환
myString+=myChar; //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
delay(5); //수신 문자열 끊김 방지
}
if(!myString.equals("")) //myString 값이 있다면
{
Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
if(myString=="a") //myString 값이 'on' 이라면
{
myservo.write(90); //각도 60도로 움직임
} else {
myservo.write(0); //각도 0도로 움직임
}
myString=""; //myString 변수값 초기화
}
}
[지문인식 + 모터]
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <Servo.h>
int getFingerprintIDez();
Servo myservo;
SoftwareSerial mySerial(2,3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup()
{
myservo.attach(7); //7번핀 서보모터 연결
while(!Serial);
Serial.begin(9600);
Serial.println("Adafruit finger detect test");
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
Serial.println("Waiting for valid finger....");
}
void loop()
{
getFingerprintIDez();
delay(50);
}
// 지문인식에 실패했다면 -1 리턴됨
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// 지문인식 성공
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
myservo.write(90); // 도어 오픈에 필요한 각도 입력
return finger.fingerID;
}
아래가 합친 소스입니다.
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
#include "Servo.h" //서보 라이브러리
Servo myservo; //서보객체
int getFingerprintIDez();
SoftwareSerial mySerial(2,3); // 지문인식
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
SoftwareSerial btSerial(4,5); //시리얼 통신을 위한 객체선언
String myString=""; //받는 문자열
void setup() {
myservo.attach(7); //서보 시그널 핀설정
myservo.write(0); //서보 초기각도 0도 설정
btSerial.begin(9600); //블루투스 시리얼 개방
mySerial.begin(9600);
mySerial.listen();
while(!Serial); //지문
Serial.begin(9600);
Serial.println("Adafruit finger detect test");
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
Serial.println("Waiting for valid finger....");
}
void loop() {
btSerial.listen();
{
while(btSerial.available()) //btSerial 값이 있으면
{
char myChar = (char)btSerial.read(); //mySerial int형식의 값을 char형식으로 변환
myString+=myChar; //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
delay(5); //수신 문자열 끊김 방지
}
if(!myString.equals("")) //myString 값이 있다면
{
Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
if(myString=="a") //myString 값이 'on' 이라면
{
myservo.write(90); //각도 60도로 움직임
} else {
myservo.write(0); //각도 0도로 움직임
}
myString=""; //myString 변수값 초기화
}
}
myservo.write(0); // 서보모터 초기 각도 설정
delay(60); // 서보모터 구동시간 15ms
getFingerprintIDez();
delay(50);
}
// 지문인식함수, 지문인식에 실패했다면 -1 리턴됌
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// 지문인식 성공
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
myservo.write(90); // 도어 오픈에 필요한 각도 입력
delay(5000); // 5초간 기다림
return finger.fingerID;
}
|