BASIC4MCU | 질문게시판 | 센서값을 배열에 넣어서 평균을 내려고 하는데 잘 안되네요...
페이지 정보
작성자 BBAM 작성일2022-11-21 01:16 조회1,664회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=21707
본문
안녕하세요. 이제 막 아두이노를 배우고 있는 초보입니다! 다름이 아니라 심박수 센서를 통해 측정된 값을 배열에 넣고 특정 조건이 되면 배열에 있는 값들을 평균으로 내려고 하는데요.
심박수 센서가 당장은 없어서 초음파 센서를 이용해서 코드를 짰는데 이게 잘 안되네요...
일단 코드는 이러합니다.
int trigPin = 12;int echoPin = 13;const int ARR_SIZE = 5;const int Three_SIZE = 3;const int Store_SIZE = 10;int ARR_beatAvg[ARR_SIZE];int Three_beatAvg[Three_SIZE];int Storage[Store_SIZE];int arrSpot = 0;int ThreeSpot = 0;int StoreSpot = 0;long lastBeat = 0;float beatsPerMinute;int beatAvg;int SumbeatAvg;int Thr_minAvg;void setup() {// put your setup code here, to run once:Serial.begin(9600);pinMode(trigPin, OUTPUT);pinMode(echoPin, INPUT);}void loop() {long duration, inches, cm;for (int i = 0; i < 5; i++) {digitalWrite(trigPin, LOW);delayMicroseconds(2);digitalWrite(trigPin, HIGH);delayMicroseconds(10);digitalWrite(trigPin, LOW);duration = pulseIn(echoPin, HIGH);Serial.print("duration : ");Serial.println(duration);delay(1000);}ARR_beatAvg[arrSpot++] = duration;if (arrSpot == 4) {SumbeatAvg += ARR_beatAvg[ARR_SIZE];SumbeatAvg /= ARR_SIZE;}Three_beatAvg[ThreeSpot++] = SumbeatAvg;if (ThreeSpot == 2) {Thr_minAvg += Three_beatAvg[Three_SIZE];Thr_minAvg /= Three_SIZE;}Storage[StoreSpot++] = Thr_minAvg;int min = Storage[0];if (StoreSpot == 9) {for (int i = 0; i < Store_SIZE; i++) {if (Storage[i] < min) {min = Storage[i];}}}for (int i = 0; i < Store_SIZE; i++) {if (Storage[i] < min) {Serial.println("press the button");}}arrSpot = 0;ThreeSpot = 0;}
제가 하려고 하는 건
1. 1초마다 심박수를 잼
2. 그 심박수를 배열에 저장
3. 배열에 60개의 값이 쌓이면 즉, 60초가 되면 (위의 코드에서는 5초)
4. 배열에 잇는 값들을 다 더하고 평균냄
5. 그 평균값을 다른 배열에 넣음
6. 평균이 들어있는 배열에 값들이 3개가 되면 다시 평균을 냄(편의상 평균.3이라 하겠습니다.)
7. 평균.3이 들어있는 배열에 어느정도 데이터가 생기면 그 값들 중 최저값을 찾음
대충 이런 식으로 작동하길 바라서 코드를 짜고 디버깅을 해봤는데 2번부터 안 되는 거 같더라고요...
센서값들을 순차적으로 배열에 저장하는 법이 있을까요...?
위의 코드에서 고쳐야 할 부분은 어디가 있을까요? 알려주시면 정말 감사하겠습니다.
댓글 0
조회수 1,664등록된 댓글이 없습니다.