자파리 :: 자파리
반응형

아래는 저서 '드론 제작과 운용'의 연막탄 코딩입니다.

연습해보기 위한 코드 카피의 목적으로 다운로드 파일이 제공되며 설명은 책의 내용과 같습니다.

연막탄.docx
0.01MB

const int inputPin = 15; 
unsigned long startTime; 
unsigned long delayTime = 30000; 
unsigned long currentTime;
unsigned long pulseWidth;
unsigned long trigger = 0;
int changeCount = 0; 

unsigned long totalPulseWidth = 0; 
int numMeasurements = 10; 

void setup() {
  pinMode(5, OUTPUT); 
  pinMode(6, OUTPUT); 
  pinMode(7, OUTPUT); 
  pinMode(4, OUTPUT); 
  pinMode(inputPin, INPUT);
  digitalWrite(5, HIGH); 
  digitalWrite(6, HIGH); 
  digitalWrite(7, HIGH); 
  digitalWrite(4, HIGH); 
  startTime = millis(); 
  Serial.begin(9600); 
}

void loop() {
  
  totalPulseWidth = 0; // totalPulseWidth 초기화

  for (int i = 0; i < numMeasurements; i++) {
    pulseWidth = pulseIn(inputPin, HIGH); //펄스의 지속시간을 마이크로초로 측정
    totalPulseWidth += pulseWidth;
    delay(50); // 각 측정 사이에 50ms의 딜레이를 줌
  }
  unsigned long averagePulseWidth = totalPulseWidth / numMeasurements; 

  Serial.print("15pin value: ");
  Serial.print(averagePulseWidth);
  Serial.print("  trigger value: ");
  Serial.print(trigger);
  Serial.print("  changecount value: ");
  Serial.println(changeCount);
  
  if (abs(averagePulseWidth - trigger) >= 500) { 

    trigger = averagePulseWidth; // trigger를 새로운 값으로 업데이트
    changeCount++; // 변경된 횟수를 증가
  }
   if(averagePulseWidth < 1800 or averagePulseWidth >2000) {changeCount=0;}

  if (averagePulseWidth >= 1800 && averagePulseWidth <= 2000 && changeCount>=1) {
    digitalWrite(5, LOW); // 5번 핀에 LOW 출력
    currentTime = millis(); //현재시간을 입력
    
    if (currentTime - startTime >= delayTime && changeCount>=1 && averagePulseWidth >= 1800) {  

      digitalWrite(6, LOW); // 6번 핀에 LOW 출력
    }
   }
  if(averagePulseWidth < 1800) {
    startTime = currentTime;
    digitalWrite(5, HIGH); // 5번 핀에 HIGH 출력
    digitalWrite(6, HIGH); // 6번 핀에 HIGH 출력
    digitalWrite(7, HIGH); // 7번 핀에 HIGH 출력
    digitalWrite(4, HIGH); // 8번 핀에 HIGH 출력
  }
}
반응형
Posted by 드워프의 자파리
: