本帖最後由 marlin12 於 2018-5-1 20:22 編輯

pulseIR用時間來計算,會計錯cycle。用delayMicroseconds來做間隔,大數值又唔準。不如試吓全部轉用cycle來計算,唔會計錯cycle,亦唔會有phase error。只需要用OSCCAL調準咗pulseIR,就全部野都準喇!

另外,將pulseIR變成inline,可減少被呼叫和返回時的延遲。
  1. void SendNikonCode() {
  2.     digitalWrite( LedPin, HIGH );
  3.     pulseIR(   76, HIGH );
  4.     pulseIR( 1064,  LOW );    // no waveform (delay only)
  5.     pulseIR(   15, HIGH );
  6.     pulseIR(   60,  LOW );    // no waveform (delay only)
  7.     pulseIR(   15, HIGH );
  8.     pulseIR(  136,  LOW );    // no waveform (delay only)
  9.     pulseIR(   15, HIGH );
  10.     digitalWrite( LedPin, LOW );
  11. }

  12. inline void pulseIR( int cycles, int markLevel )
  13. {       
  14.     for( ; cycles > 0; cycles-- ) {
  15.         digitalWrite( IrLedPin, markLevel );
  16.         delayMicroseconds( 9 );
  17.         digitalWrite( IrLedPin, LOW );
  18.         delayMicroseconds( 8 );
  19.     }
  20. }
複製代碼

TOP

回覆 21# marlin12


  統一時間格式是個好方法

TOP

回覆  xiao


試了供電由2.8V~5.3V, 相機都能接收操作無悟.但沒度實際的RC振盪頻率,另2.7V或以下則power u ...
hon829 發表於 2018-4-30 18:54


BOD關掉, arduino IDE 選 disable BOD, 應該就可以試低壓.
看來NIKON的遙控寬容度很高

TOP