<div>도움 부탁드립니다.</div> <div> </div> <div>첫 글이 이런 글이라 정말 죄송합니다 ㅜ ㅜ</div> <div> </div> <div> </div> <div>멀티위FC보드에 초음파센서 거리측정 값을 가지고 버저를 동작하고 싶은데</div> <div> </div> <div>버저소스 중 어디를 건드려야 할지 모르겠어요.</div> <div> </div> <div> </div> <div> </div> <div>==========================================================</div> <div>// Current Buzzer mode<br><font size="2">static uint8_t buzzerMode = BUZZER_STOPPED;</font></div> <div><br>// Buzzer off = 0 Buzzer on = 1<br>static uint8_t buzzerIsOn = 0;</div> <div><br>// Pointer to current sequence<br>static const uint8_t *buzzerPtr = NULL;</div> <div><br>// Place in current sequence<br>static uint16_t buzzerPos = 0;</div> <div><br>// Time when buzzer routine must act next time<br><u>static uint32_t buzzerNextToggleTime = 0;</u></div> <div><br>// Variable for checking if ready beep has been done<br>static uint8_t readyBeepDone = 0;</div> <div> </div> <div> </div> <div>void <strong><font size="4"><span style="font-size:14pt;">buzze</span><span style="font-size:14pt;">r</span></font></strong>(uint8_t mode)<br> {<br> uint8_t i = 0;</div> <div> // Just return if same or higher priority sound is active.<br> if (buzzerMode <= mode)<br> return;</div> <div> switch (mode) {<br> case BUZZER_STOP:<br> buzzerMode = BUZZER_STOPPED;<br> buzzerNextToggleTime = millis();<br> BEEP_OFF;<br> buzzerIsOn = 0;<br> buzzerPtr = NULL;<br> break;<br> case BUZZER_READY_BEEP:<br> if (readyBeepDone)<br> return;<br> buzzerPtr = buzz_readyBeep;<br> buzzerMode = mode;<br> readyBeepDone = 1;<br> break;<br> case BUZZER_ARMING:<br> case BUZZER_DISARMING:<br> buzzerPtr = buzz_mediumBeepFast;<br> buzzerMode = mode;<br> buzzerNextToggleTime = 0;<br> break;<br> case BUZZER_ACC_CALIBRATION:<br> buzzerPtr = buzz_2shortBeeps;<br> buzzerMode = mode;<br> break;<br> case BUZZER_ACC_CALIBRATION_FAIL:<br> buzzerPtr = buzz_3shortBeeps;<br> buzzerMode = mode;<br> break;<br> case BUZZER_TX_LOST_ARMED:<br> buzzerPtr = buzz_sos;<br> buzzerMode = mode;<br> break;<br> case BUZZER_BAT_LOW:<br> buzzerPtr = buzz_longBeep;<br> buzzerMode = mode;<br> break;<br> case BUZZER_BAT_CRIT_LOW:<br> buzzerPtr = buzz_BatteryBeep;<br> buzzerMode = mode;<br> break;<br> case BUZZER_ARMED:<br> case BUZZER_TX_LOST:<br> buzzerPtr = buzz_mediumBeep;<br> buzzerMode = mode;<br> break;<br> case BUZZER_ARMING_GPS_FIX:<br> buzzerPtr = buzz_armed;<br> buzzerMode = mode;<br> buzzerNextToggleTime = 0;<br> break;<br> case BUZZER_TX_SET;<br><span style="font-size:8pt;">#ifdef GPS</span><br><span style="font-size:8pt;"> if (feature(FEATURE_GPS) && f.GPS_FIX && GPS_numSat >= 5) {</span><br><span style="font-size:8pt;"> do {</span><br><span style="font-size:8pt;"> buzz_countSats[i] = 5;</span><br><span style="font-size:8pt;"> buzz_countSats[i + 1] = 15;</span><br><span style="font-size:8pt;"> i += 2;</span><br><span style="font-size:8pt;"> } while (i < 20 && GPS_numSat > i / 2);</span><br><span style="font-size:8pt;"> buzz_countSats[i + 1] = 100;</span><br><span style="font-size:8pt;"> buzz_countSats[i + 2] = 0xFF;</span><br><span style="font-size:8pt;"> buzzerPtr = buzz_countSats;</span><br><span style="font-size:8pt;"> buzzerMode = mode;</span><br><span style="font-size:8pt;"> break;</span><br><span style="font-size:8pt;"> }</span><br><span style="font-size:8pt;">#endif</span><br> buzzerPtr = buzz_shortBeep;<br> buzzerMode = mode;<br> break;</div> <div> default:<br> return;<br> }<br> buzzerPos = 0;<br> }</div> <div><br> </div> <div>/* buzzerUpdate -function is used in loop. It will update buzzer state<br> * when the time is correct.<br> */<br> void<strong><span style="font-size:14pt;">buzzerUpdate</span></strong>(void)<br> {<br> // If beeper option from AUX switch has been selected<br> if (rcOptions[BOXBEEPERON]) {<br> if (buzzerMode > BUZZER_TX_SET)<br> buzzer(BUZZER_TX_SET);<br> }</div> <div> // Buzzer routine doesn't need to update if there aren't any sounds ongoing<br> if (buzzerMode == BUZZER_STOPPED || buzzerPtr == NULL)<br> return;</div> <div> if (!buzzerIsOn && buzzerNextToggleTime <= millis()) {<br> buzzerIsOn = 1;<br> if (buzzerPtr[buzzerPos] != 0)<br> BEEP_ON;<br> buzzerCalculations();<br> } else if (buzzerIsOn && buzzerNextToggleTime <= millis()) {<br> buzzerIsOn = 0;<br> if (buzzerPtr[buzzerPos] != 0)<br> BEEP_OFF;<br> buzzerCalculations();<br> }<br> }</div> <div><br> </div> <div>/* buzzerCalculation -function calculates position when is the next time<br> * to change buzzer state<br> */<br> void <strong><span style="font-size:14pt;">buzzerCalculations</span></strong>(void)<br> {<br> if (buzzerPtr[buzzerPos] == 0xFE) {<br> // If sequence is 0xFE then repeat from start<br> buzzerPos = 0;<br> } else if (buzzerPtr[buzzerPos] == 0xFF) {<br> // If sequence is 0xFF then stop<br> buzzerMode = BUZZER_STOPPED;<br> BEEP_OFF;<br> buzzerIsOn = 0;<br> } else {<br> // Otherwise advance the sequence and calculate next toggle time<br> buzzerNextToggleTime = millis() + 10 * buzzerPtr[buzzerPos];<br> buzzerPos++;<br> }<br> }</div> <div> </div> <div>=====================================================================</div> <div> </div> <div> </div> <div> </div> <div> </div> <div>3개 함수 안의 내용은 어느정도 이해했는데,</div> <div>측정값으로 버저 on/off를 하려면 어디를 건디려야 할지 도무지 모르겠습니다ㅜ ㅜ</div> <div> </div> <div> </div> <div><font size="3">1. 어느함수를 건드려야 하나요?</font></div> <div>2. 정말정말 염치없지만 따로 함수가 필요하다면 어떻게 구성해야할지 대략적으로라도 알려 주실 수 있을까요?</div> <div> </div> <div> </div> <div> </div> <div> </div> <div>읽어주셔서 감사합니다<img style="margin:1px 4px;width:16px;height:16px;vertical-align:middle;" alt="" src="http://www.todayhumor.co.kr/board/cheditor/icons/em/78.gif" border="0"></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.