×
뎁스노트
로그인
홈
언어
프레임워크
개발도구
네크워크와 서버
데이터베이스
프로젝트 관리
데이터 사이언스
이야기
사진
모집 · 홍보
로그인
회원가입
글쓰기
글 올리기
개발 노트, 이야기를 작성해보세요.
질문하기
부담없이 무엇이든 질문하세요.
사진 올리기
사진을 올려보세요.
홈
모든 글
모든 질문
팔로잉
언어
프레임워크
개발도구
네크워크와 서버
데이터베이스
프로젝트 관리
데이터 사이언스
이야기
사진
모집 · 홍보
이벤트
C/C++
아두이노와 stm32사이의 통신 방법에대해 도움을 청합니다ㅠㅠ
뎁스_3233
11일 전
팔로우
팔로잉
``` #include
//LCD I2C 통신 사용 #include
//LCD I2C 통신 사용 #include "sound_effect.h" // 사운드 이펙트 사용(음원효과) LiquidCrystal_I2C lcd(0x27, 16, 2); //LCD 주소 할당 int blue_pin = 2; //블루 LED int green_pin = 3; //그린 LED int red_pin = 4; //레드 LED int pin = 8; //먼지센서 int buzzer_pin = 13; //부저 unsigned long duration; //지속 시간 unsigned long starttime; //시작 시간 unsigned long sampletime_ms = 5000; //샘플시간 5초 마다 업데이트 unsigned long lowpulseoccupancy = 0; //Low 신호가 지속된 시간을 초기화 float ratio = 0; //비율 float concentration = 0; //입자 농도 0으로 초기화 float pcsPerCF = 0; //한 입자당 CF를 0으로 초기화 float ugm3 = 0; //최종 값으로 세제곱미터 당 마이크로 그램(㎍/㎥) uint8_t clock[8] = { 0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0 }; // 시계 이모티콘 void setup() { Serial.begin(9600); //시리얼 통신 시작 pinMode(8, INPUT); //미세먼지 센서 입력 pinMode(2, OUTPUT); //블루 LED 출력 pinMode(3, OUTPUT); //그린 LED 출력 pinMode(4, OUTPUT); //레드 LED 출력 pinMode(13, OUTPUT); //부저 출력 digitalWrite(blue_pin, HIGH); //애노드 RGB LED 이므로 HIGH이면 꺼진다.(이하 2개 동일) digitalWrite(green_pin, HIGH); digitalWrite(red_pin, HIGH); starttime = millis(); //현재 시간 대입 lcd.begin(); //LCD 시작 lcd.backlight(); //백라이트 ON lcd.clear(); //LCD 초기화 lcd.print("Hello! SIMP!"); //다음 문자를 LDC에 출력 lcd.setCursor(0, 1); //두 번째 줄로 커서 이동 lcd.print("I will find DUST"); lcd.createChar(1, clock); //시계 이모티콘 출력 seSqueak(13); //초기시작 음원효과 delay(5000); // 5초 대기 if (ugm3 == 0) { //만약 결과값이 0보다 작으면 아래를 LCD에 출력한다. lcd.clear(); lcd.print("Analysing Data"); lcd.write(1); lcd.setCursor(0, 1); lcd.print("................"); lowpulseoccupancy = 0; starttime = millis(); } } void loop() { duration = pulseIn(pin, LOW); lowpulseoccupancy = lowpulseoccupancy + duration; if ((millis() - starttime) >= sampletime_ms) { //만약 샘플 시간이 5초라면(위에서 정한 샘플 시간) ratio = lowpulseoccupancy / (sampletime_ms10 .0); // 정수 백분율 concentration = 1.1 pow(ratio, 3) - 3.8 pow(ratio, 2) + 520 ratio + 0.62; // 미세먼지 센서 사양 시트 곡선 사용 pcsPerCF = concentration * 100; // 입자 농도에 100을 곱하면 입자당 CF값 ugm3 = pcsPerCF / 13000; //입자당 CF를 13000으로 나누면 미터세제곱당 마이크로그람의 미세먼지 측정값 if (ugm3 > 0.01) { // 만약에 결과값이 0.01보다 크면 미세먼지 값을 출력하라 lcd.clear(); lcd.print("Dust:"); lcd.print(ugm3); lcd.print("ug/m3"); Serial.print("ugm3: "); Serial.println(ugm3); delay(1000); lowpulseoccupancy = 0; starttime = millis(); } if (ugm3 > 0.01 && ugm3 <= 30) { //만약 미세먼지 값이 0.01 보다 크고 30이랑 같거나 작으면 아래를 출력 lcd.setCursor(0, 1); lcd.print("Good! ^v^"); setColor(0, 0, 225); //블루 noTone(13); //소리 끔 } else if (ugm3 > 30 && ugm3 <= 80) { //만약 미세먼지 값이 30보다 크고 80이랑 같거나 작으면 아래를 출력 lcd.setCursor(0, 1); lcd.print("SoSo! ^ ^;"); setColor(0, 255, 225); //블루그린 noTone(13); //소리 끔 } else if (ugm3 > 80 && ugm3 <= 150) { //만약 미세먼지 값이 80보다 크고 150이랑 같거나 작으면 아래를 출력 lcd.setCursor(0, 1); lcd.print("Bad! T.T"); setColor(255, 120, 0); //오렌지 noTone(13); //소리 끔 } else if (ugm3 > 150) { //만약 미세먼지 값이 150 보다 크면 아래를 출력 lcd.setCursor(0, 1); lcd.print("Be Careful @.@"); setColor(255, 0, 0); //레드 tone(13, 500); //500Hz로 소리 재생 } } } void setColor(int red, int green, int blue) { //RGB LED 출력을 위한 아날로그 출력 세팅 analogWrite(red_pin, 255 - red); analogWrite(green_pin, 255 - green); analogWrite(blue_pin, 255 - blue); } ``` 위에 코드는 아두이노의 코드 입니다 아래의 코드는 아두이노에서 stm32로 송신하는 코드입니다 아두이노 TX랑 STM32 RX랑 연결하였습니다 혹시 송신 방법이 이게 맞을까요? Serial.print("ugm3: "); Serial.println(ugm3); delay(1000);
아두이노
stm32f103
0
0
1
22
신고하기
사용자 차단하기
뎁스_3233
11일 전
팔로우
팔로잉
댓글
1
올리기
답변 작성
답변 모드로 쓰기
올리기
윈비
아두이노와 STM32의 TX와 RX 핀을 연결했다면, 아래 사항들을 확인해보세요.
아두이노와 STM32의 GND 핀을 반드시 연결해야 합니다.
아두이노와 STM32 모두 9600bps로 설정되어야 합니다.
아두이노가 5V 논리 레벨을 사용하고 STM32가 3.3V 레벨을 사용한다면, 레벨 변환기를 사용하는 것이 안전합니다.
11일 전
∙
0
∙
답글 달기
∙
공유
∙
신고
∙
차단
1
0
0
1
신고하기
사용자 차단하기
아두이노와 STM32의 TX와 RX 핀을 연결했다면, 아래 사항들을 확인해보세요.