BASIC4MCU | 질문게시판 | 아두이노 초음파센서 관련하여 질문드립니다
페이지 정보
작성자 ohh12 작성일2020-06-21 18:03 조회15,115회 댓글4건본문
스위치의 입력을 받아 초음파 거리센서를 30 회 실행하여 평균값을 내어 그에 따라 진동 모터를 제어하는 프로그램을 만들고 있습니다. 어느정도 코딩을 해봤는데 실행을 하니 진동모터가 제어가 되지않고 그냥 움직입니다...어러번 다시 시도해봤지만 어느 부분이 부족한지 알 수 없어 제자리 걸음 중입니다,,,,도와주세요 ㅠㅠ
#include <NewPing.h>
#define TRIGGER_CH1_PIN 10
#define ECHO_CH1_PIN 11#define MAX_DISTANCE 200
const int motor1 = 2;
const int motor2 = 3;
const int led = 4;
const int button = 5;int state = LOW;
int previous =LOW;
int reading;long time= 0;
long debounce = 100;NewPing sonar_ch1(TRIGGER_CH1_PIN,ECHO_CH1_PIN,MAX_DISTA NCE);
void setup() {
Serial.begin(9600);
pinMode(button,INPUT_PULLUP);
pinMode(motor1,OUTPUT);
}void loop() {
int sum=0;
int ave=0;
int dist1=0;
dist1=sonar_ch1.ping_cm();
reading=digitalRead(button);const long interval = 40000;
int cds = analogRead(A1);
Serial.println(cds);if(cds<600){
digitalWrite(led1,HIGH);
}
else{
digitalWrite(led1,LOW);
}
if (reading == HIGH && previous == LOW && millis()-time > debounce){
if(state == HIGH){
for(int i=0; i<30; i++){
sum=sum+dist1;
Serial.print("ch1:");
Serial.print(dist1);
Serial.println("cm");
delay(100);
}
ave=sum/30;
Serial.print("ave:");
Srrial.println(ave);
if( dist1 >= ave){
digitalWrite(motor1,HIGH);
delay(100);
}
else{
digitalWrite(motor1,LOW);
}
}
else
state=HIGH;
time=millis();
}
previous = reading
}
댓글 4
조회수 15,115master님의 댓글
master 작성일
for(int i=0; i<30; i++){
dist1=sonar_ch1.ping_cm(); // <-- 루프 안에서 초음파센서를 읽으세요
sum=sum+dist1;
ohh12님의 댓글
ohh12
정말!!감사합니다ㅠㅠㅜ 오늘 하루동안 진짜 이것만..고민했습니다 해결해 주셔서 감사합니다!!!!!!! 그런데 평균을 내고 계속 초음파 값을 읽고 싶은데 한번밖에 측정이 안되는데 이 부분은
for문을 사용해야 할까요 while문을 사용해야 할까요? ㅜㅜ!!!
master님의 댓글
master
reading=digitalRead(button);
버튼을 클릭했을 때 실행되는 것 같은데요
계속 실행 하고 싶다면 버튼 체크 부분을 제거하면 됩니다.
if (reading == HIGH && previous == LOW && millis()-time > debounce){ // 현소스
if (millis()-time > debounce){ // 이렇게 수정 해보세요
ohh12님의 댓글
ohh12
아하 그렇군요!!! 정말 정말감사합니다!!!!