코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
아두이노 블루투스 연결방법을 모르겠습니다 ㅠ
아두이노 | 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 |