Skip to content

Instantly share code, notes, and snippets.

@EnsekiTT
Last active December 19, 2015 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EnsekiTT/5967723 to your computer and use it in GitHub Desktop.
Save EnsekiTT/5967723 to your computer and use it in GitHub Desktop.
PWMのデコードというかパルス幅を計測したらどうなるかが知りたくて書いた。実験のためにはArduinoの3,8pinを抵抗(1kΩとか)で繋げばよい。
/// PWM Decoder ///
/// auther: EnsekiTT ///
/// PWMを発生させてpulseInでHIGHの時間を計測する。
/// writeMicroseconds()で0~3000μsを10μsずつ調査する。
/// pulseIn()でHIGH時間を各値について100回ずつ測り、平均を算出する。
/// Serial出力: 入力値, デコード値の平均, 入力値-デコード値の平均
#include <Servo.h>
int servo_pin = 8;
int decode_pin = 3;
int decoded = 0;
int i = 0;
float sum = 0;
Servo servo;
void setup(){
servo.attach(servo_pin);
Serial.begin(9600);
}
void loop(){
i += 10;
sum = 0;
for(int j = 0; j < 100; j++){
servo.writeMicroseconds(i);
decoded = pulseIn(decode_pin, HIGH); //Key Poin
sum += decoded;
}
Serial.print(i);
Serial.print(",");
Serial.print(sum/100);
Serial.print(",");
Serial.println(i - sum/100);
delay(100);
if(i == 3000){
servo.detach();
while(1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment