정보나눔

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

아두이노 블루투스 연결방법을 모르겠습니다 ㅠ
아두이노 | 2018-12-07
#include <SoftwareSerial.h>
SoftwareSerial mySerial(A0, A1);
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
byte response[9];
String ppmString = " ";
void setup() {
 
  Serial.begin(9600);
  mySerial.begin(9600);
  //pinMode(0, OUTPUT);
  //pinMode(1, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, INPUT);
  //pinMode(4, OUTPUT);
  //pinMode(5, INPUT);
  pinMode(6, OUTPUT);
  pinMode(7, INPUT);
  pinMode(8, OUTPUT);
  pinMode(9, INPUT);
  pinMode(10, OUTPUT);
  pinMode(11, INPUT);
}
void loop() {
  digitalWrite(2, LOW);
  delayMicroseconds(2);
  digitalWrite(2, HIGH); 
  delayMicroseconds(10);
  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
 
  unsigned long duration1 = pulseIn(3, HIGH);
  float distance1 = duration1 / 29.0 / 2.0; // 2~3
 
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  delay(500);
 
  digitalWrite(6, LOW);
  delayMicroseconds(2);
  digitalWrite(6, HIGH); 
  delayMicroseconds(10);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  unsigned long duration2 = pulseIn(7, HIGH);
  float distance2 = duration2 / 29.0 / 2.0; // 6~7

  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  delay(500);
 
  digitalWrite(8, LOW);
  delayMicroseconds(2);
  digitalWrite(8, HIGH); 
  delayMicroseconds(10);
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  unsigned long duration3 = pulseIn(9, HIGH);
  float distance3 = duration3 / 29.0 / 2.0; // 8~9

  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  delay(500);
 
  digitalWrite(10, LOW);
  delayMicroseconds(2);
  digitalWrite(10, HIGH); 
  delayMicroseconds(10);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  unsigned long duration4 = pulseIn(11, HIGH);
  float distance4 = duration4 / 29.0 / 2.0; // 10~11
 
 
 
  if(distance1 < 10.0) {
    digitalWrite(2, HIGH);
    Serial.print(distance1);
    Serial.println("cm이므로 1번 자리가 찼습니다.");
  }
  else {
    Serial.print(distance1);
    Serial.println("cm이므로 1번 자리가 비었습니다.");
  }
  if(distance2 < 10.0) {
    digitalWrite(6, HIGH);
    Serial.print(distance2);
    Serial.println("cm이므로 2번 자리가 찼습니다.");
  }
  else {
    Serial.print(distance2);
    Serial.println("cm이므로 2번 자리가 비었습니다.");
  }
 
  if(distance3 < 10.0) {
    digitalWrite(8, HIGH);
    Serial.print(distance3);
    Serial.println("cm이므로 3번 자리가 찼습니다.");
  }
  else {
    Serial.print(distance3);
    Serial.println("cm이므로 3번 자리가 비었습니다.");
  }
 
  if(distance4 < 10.0) {
    digitalWrite(10, HIGH);
    Serial.print(distance4);
    Serial.println("cm이므로 4번 자리가 찼습니다.\n");
  }
  else {
    Serial.print(distance4);
    Serial.println("cm이므로 4번 자리가 비었습니다.\n");
  }
 
  delay(500);
  if( (distance1<10.0) && (distance2<10.0) && (distance3<10.0) && (distance4<10.0))
  {
      mySerial.write(cmd,9);
      mySerial.readBytes(response, 9);
      byte chck = 0;
 
      if(response[8] == (0xff&(~(response[1]+response[2]+response[3]+response[4]+response[5]+response[6]+response[7]) + 1))){
      Serial.println("OK"); // 작동이 오류없이 되면 OK
      }
      else {
        Serial.print("chksum : ");
        Serial.println(response[8],HEX);
        Serial.print("read : ");
        Serial.println(0xff&(~(response[1]+response[2]+response[3]+response[4]+response[5]+response[6]+response[7]) + 1),HEX);
        while(mySerial.available() > 0){
        mySerial.read();
        }
      }
     
      int ppm = (response[2] << 8)|response[3];
      ppmString = String(ppm); //int to string
      if(ppm < 1000)
      {
        Serial.print(ppm);
        Serial.println("PPM 원활상태\n");
      }
     
      else if(ppm >= 1000 && ppm < 2000)
      {
        Serial.print(ppm);
        Serial.println("PPM 혼잡상태\n");
      }
      else
      {
        Serial.print(ppm);
        Serial.println("PPM 만원상태\n");
      }
      delay(2000);
  }
}
 
 
 
현재 저희가 짠 코드는 이렇습니다.

현재 저 코드의 결과물은
 
~~cm이므로 1번 자리가 찼습니다or비었습니다.
~~cm이므로 2번 자리가 찼습니다or비었습니다.
~~cm이므로 3번 자리가 찼습니다or비었습니다.
~~cm이므로 4번 자리가 찼습니다or비었습니다.
 
그리고 만약 1~4번 자리가 모두 찼을 경우
4번 자리 출력 이후, 이산화탄소 수치(ppm)까지 결과물이 출력됩니다.
 

저희는 여기서 시리얼모니터에 출력이 되는 저 출력물들을
블루투스에 연결해서 핸드폰에 저 출력들이 뜨도록 하고 싶은데,
어떻게 코드를 짜야 될 지를 모르겠습니다.
할 줄 아시는 분이 계시다면 꼭 좀 부탁드리겠습니다 ㅠ
아두이노 초보라 아직 잘 모르는 부분이 많습니다 ,,
이전글   |    아두이노 관련 질문입니다ㅠ 도움바랍니다... 2018-12-06
다음글   |    라즈베리파이 조도센서 시리얼 통신 2018-12-07