BV1AL 之無所不記

2017-01-26

Firmata Serial直送PWM,Servo

除了將各pin做為digital out用可以送出
serial.write(chr(0xf4)+chr(PIN)+chr(1)) 來定義之外,這裡再補充一下
PWM及Servo

PWM:
serial.write(chr(0xf4)+chr(13)+chr(3)) 將13pin定義成PWM
(第13pin在Arduino板子上有內建的LED可以做測試)
(Arduino限定3, 5, 6, 9, 10, 11, 13才俱有PWM功能)
不過328P的13pin不能當PWM用,32U4才可以。

定義某一支pin做為PWM之後,可以送出
serial.write(chr(0xe0+PIN)+chr(N)+chr(0或1))
來控制PWM LED的亮度,例如:
serial.write(chr(0xe0+13)+chr(127)+chr(0))
控制第13pin,亮度127
亮度數值從0到254,當亮度大於127時,第三byte要為1,其於則為0
serial.write(chr(0xe0+13)+chr(150)+chr(1))

Servo:
serial.write(chr(0xf4)+chr(13)+chr(4)) 將13pin定義成Servo
定義某一支pin做為Servo之後,可以送出
serial.write(chr(0xe0+PIN)+chr(A)+chr(0或1))
來控制Servo推動的角度,例如:
serial.write(chr(0xe0+13)+chr(127)+chr(0))
控制第13pin,Servo轉到127度
Servo的角度從0到179,當角度大於127時,第三byte要為1,其於則為0
serial.write(chr(0xe0+13)+chr(150)+chr(1))

當pin小於或等於15時,用上列的控制算法

當pin大於15時,用以下方法

當角度小於或等於127時,用
serial.write( chr(0xf0)+chr(0x6f)+chr(PIN)+chr(A)+chr(0xf7) )
例如:
serial.write( chr(0xf0)+chr(0x6f)+chr(16)+chr(120)+chr(0xf7) )
如果角度大於127時,用
serial.write( chr(0xf0)+chr(0x6f)+chr(16)+chr(150)+chr(0x1)+chr(0xf7) )

不過一般來說,Servo實際推動的角度範圍還不到180度。

標籤: , ,