정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

지문인식 + 모터 + 블루투스 연동에 대해 질문드립니다.
오렌지 | 2017-06-05

안녕하세요...

[지문인식 + 모터]소스와 [블루투스 + 모터]소스를 합치려고 하는데

지문인식과 블루투스가 둘 다 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;
}

이전글   |    아두이노 1개로 3개의 DHT11센서 연결 코드 2017-06-05
다음글   |    아두이노 컴파일은 되고 업로딩할때 잘못된 라이브러리가 C:\Program Files (x8... 2017-06-05