pigpio 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +43 -6
- data/example/simple/board.svg +2762 -0
- data/example/simple/callback.rb +23 -0
- data/example/simple/pwm.rb +21 -0
- data/example/simple/readme.md +27 -0
- data/ext/pigpio/pigpio.c +133 -32
- data/lib/pigpio/bank.rb +21 -19
- data/lib/pigpio/gpio.rb +30 -29
- data/lib/pigpio/pwm.rb +36 -32
- data/lib/pigpio/user_gpio.rb +31 -23
- data/lib/pigpio/version.rb +1 -1
- metadata +6 -2
@@ -0,0 +1,23 @@
|
|
1
|
+
require "pigpio"
|
2
|
+
include Pigpio::Constant
|
3
|
+
pi=Pigpio.new()
|
4
|
+
unless pi.connect
|
5
|
+
exit -1
|
6
|
+
end
|
7
|
+
counter=0
|
8
|
+
led=pi.gpio(4)
|
9
|
+
led.mode=PI_OUTPUT
|
10
|
+
led.pud=PI_PUD_OFF
|
11
|
+
|
12
|
+
button=pi.gpio(17)
|
13
|
+
button.mode=PI_INPUT
|
14
|
+
button.pud=PI_PUD_UP
|
15
|
+
button.glitch_filter(30)
|
16
|
+
button.callback(EITHER_EDGE){|tick,level|
|
17
|
+
led.write level
|
18
|
+
counter+=1
|
19
|
+
}
|
20
|
+
|
21
|
+
while(counter<10)do
|
22
|
+
end
|
23
|
+
led.write 0
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "pigpio"
|
2
|
+
include Pigpio::Constant
|
3
|
+
pi=Pigpio.new()
|
4
|
+
unless pi.connect
|
5
|
+
exit -1
|
6
|
+
end
|
7
|
+
pin=pi.gpio(4)
|
8
|
+
pin.mode=PI_OUTPUT
|
9
|
+
pin.pud=PI_PUD_OFF
|
10
|
+
pwm=pin.pwm
|
11
|
+
|
12
|
+
button=pi.gpio(17)
|
13
|
+
button.mode=PI_INPUT
|
14
|
+
button.pud=PI_PUD_UP
|
15
|
+
|
16
|
+
i=128
|
17
|
+
while true do
|
18
|
+
i=(i+1)%256 if button.read == 0
|
19
|
+
pwm.dutycycle= i
|
20
|
+
sleep 0.01
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Simple IO sample
|
2
|
+
|
3
|
+
## Board
|
4
|
+
|
5
|
+

|
6
|
+
|
7
|
+
## PWM sample
|
8
|
+
|
9
|
+
[Script is here.](./pwm.rb)
|
10
|
+
|
11
|
+
LED brightness will increase while you press the button.
|
12
|
+
|
13
|
+
```sh
|
14
|
+
$ ruby pwm.rb
|
15
|
+
```
|
16
|
+
|
17
|
+
## Callback sample
|
18
|
+
|
19
|
+
[Script is here.](./callback.rb)
|
20
|
+
|
21
|
+
not work, now.
|
22
|
+
|
23
|
+
LED will light, while you press the button.
|
24
|
+
|
25
|
+
```sh
|
26
|
+
$ ruby callback.rb
|
27
|
+
```
|
data/ext/pigpio/pigpio.c
CHANGED
@@ -6,20 +6,103 @@
|
|
6
6
|
static VALUE cCallbackID;
|
7
7
|
static VALUE cCallbackError;
|
8
8
|
|
9
|
+
typedef struct{
|
10
|
+
unsigned level;
|
11
|
+
uint32_t tick;
|
12
|
+
} callback_item_t;
|
13
|
+
|
14
|
+
#define PG_EXT_CALLBACK_BUF_SIZE (128)
|
15
|
+
typedef struct{
|
16
|
+
volatile callback_item_t buf[ PG_EXT_CALLBACK_BUF_SIZE ];
|
17
|
+
volatile callback_item_t* volatile read;
|
18
|
+
volatile callback_item_t* volatile write;
|
19
|
+
volatile int flag_overflow;
|
20
|
+
} callback_queue_t;
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
typedef struct{
|
25
|
+
callback_queue_t*queue;
|
26
|
+
} callback_pqueue_t;
|
27
|
+
void pigpio_rbst_callback_que_dfree(void* _self){
|
28
|
+
callback_pqueue_t *self=(callback_pqueue_t *)_self;
|
29
|
+
if(self->queue!=NULL)free(self->queue);
|
30
|
+
xfree(self);
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
size_t pigpio_rbst_callback_que_dsize(const void *_self){
|
34
|
+
return sizeof(callback_pqueue_t)+sizeof(callback_queue_t);
|
35
|
+
}
|
36
|
+
const rb_data_type_t callback_pqueue_type = { //https://gist.github.com/yugui/87ef6964d8a76794be6f
|
37
|
+
"struct@callback_pqueue",{NULL,pigpio_rbst_callback_que_dfree,pigpio_rbst_callback_que_dsize,{0,0}},0,NULL,0
|
38
|
+
};
|
39
|
+
/*
|
40
|
+
Constructor of Pigpio::NativeQueue class
|
41
|
+
*/
|
42
|
+
VALUE pigpio_rbst_callback_pqueue_make(VALUE self){
|
43
|
+
VALUE obj;
|
44
|
+
callback_pqueue_t *st;
|
45
|
+
callback_queue_t *queue;
|
46
|
+
obj = TypedData_Make_Struct(self, callback_pqueue_t, &callback_pqueue_type, st);
|
47
|
+
st->queue=queue=malloc(sizeof(callback_queue_t));
|
48
|
+
queue->read=queue->buf;
|
49
|
+
queue->write=queue->buf;
|
50
|
+
queue->flag_overflow=0;
|
51
|
+
return obj;
|
52
|
+
}
|
53
|
+
/*
|
54
|
+
Get a data from FIFO Queue.
|
55
|
+
*/
|
56
|
+
VALUE pigpio_rbst_callback_pqueue_pop(VALUE self){
|
57
|
+
callback_pqueue_t *st=TypedData_Get_Struct2(self,callback_pqueue_t,&callback_pqueue_type);
|
58
|
+
callback_queue_t *queue=st->queue;
|
59
|
+
volatile callback_item_t *cur=queue->read;
|
60
|
+
VALUE ret;
|
61
|
+
struct timeval t;
|
62
|
+
t.tv_usec=100000;
|
63
|
+
if(queue->flag_overflow!=0){
|
64
|
+
rb_raise(cCallbackError,"Overflow NativeQueue.\n");
|
65
|
+
}
|
66
|
+
while(cur==queue->write){
|
67
|
+
rb_thread_wait_for(t);
|
68
|
+
}
|
69
|
+
ret=rb_ary_new_from_args(2,ULONG2NUM(cur->tick),UINT2NUM(cur->level));
|
70
|
+
queue->read=(cur==queue->buf+(PG_EXT_CALLBACK_BUF_SIZE-1)) ? queue->buf : (cur+1) ;
|
71
|
+
return(ret);
|
72
|
+
}
|
73
|
+
/*
|
74
|
+
Set a data to FIFO Queue.
|
75
|
+
*/
|
76
|
+
void pigpio_rbstn_callback_pqueue_push(callback_queue_t *queue,unsigned level, uint32_t tick){
|
77
|
+
volatile callback_item_t *cur=queue->write;
|
78
|
+
cur->tick=tick;
|
79
|
+
cur->level=level;
|
80
|
+
cur=(cur==queue->buf+(PG_EXT_CALLBACK_BUF_SIZE-1)) ? queue->buf : (cur+1) ;
|
81
|
+
if(cur==queue->read){
|
82
|
+
queue->flag_overflow=1;
|
83
|
+
}else{
|
84
|
+
queue->write=cur;
|
85
|
+
}
|
86
|
+
return;
|
87
|
+
}
|
9
88
|
|
10
89
|
typedef int (*cancel_t)(unsigned);
|
11
90
|
typedef struct{
|
12
91
|
int id;
|
13
|
-
VALUE
|
92
|
+
VALUE queue;
|
93
|
+
VALUE thread;
|
14
94
|
cancel_t cancel;
|
15
95
|
} callback_id_t;
|
96
|
+
|
16
97
|
void pigpio_rbst_callback_id_dmark(void* _self){
|
17
98
|
callback_id_t *self=(callback_id_t *)_self;
|
18
|
-
rb_gc_mark(self->
|
99
|
+
rb_gc_mark(self->queue);
|
100
|
+
rb_gc_mark(self->thread);
|
19
101
|
}
|
20
102
|
void pigpio_rbst_callback_id_dfree(void* _self){
|
21
103
|
callback_id_t *self=(callback_id_t *)_self;
|
22
104
|
xfree(self);
|
105
|
+
return;
|
23
106
|
}
|
24
107
|
size_t pigpio_rbst_callback_id_dsize(const void *_self){
|
25
108
|
return sizeof(callback_id_t);
|
@@ -32,17 +115,19 @@ const rb_data_type_t callback_id_data_type = { //https://gist.github.com/yugui/8
|
|
32
115
|
{0,0}
|
33
116
|
},0,NULL,0
|
34
117
|
};
|
35
|
-
VALUE pigpio_rbst_callback_id_make_inner(int id,VALUE
|
118
|
+
VALUE pigpio_rbst_callback_id_make_inner(int id,cancel_t cancel,VALUE queue,VALUE thread){
|
36
119
|
VALUE obj;
|
37
120
|
callback_id_t *st;
|
38
121
|
obj = TypedData_Make_Struct(cCallbackID, callback_id_t, &callback_id_data_type, st);
|
39
122
|
st->id=id;
|
40
|
-
st->
|
123
|
+
st->queue=queue;
|
124
|
+
st->thread=thread;
|
41
125
|
st->cancel=cancel;
|
126
|
+
|
42
127
|
return obj;
|
43
128
|
}
|
44
129
|
/*
|
45
|
-
|
130
|
+
Get callback id.R eturn Integer.
|
46
131
|
*/
|
47
132
|
VALUE pigpio_rbst_callback_id_r_id(VALUE self){
|
48
133
|
callback_id_t *st=TypedData_Get_Struct2(self,callback_id_t,&callback_id_data_type);
|
@@ -60,9 +145,25 @@ See also: {pigpio site event_callback_cancel}[http://abyz.me.uk/rpi/pigpio/pdif2
|
|
60
145
|
See also: {pigpio site callback_cancel}[http://abyz.me.uk/rpi/pigpio/pdif2.html#callback_cancel]
|
61
146
|
*/
|
62
147
|
VALUE pigpio_rbst_callback_id_cancel(VALUE self){
|
148
|
+
int id;
|
63
149
|
callback_id_t *st=TypedData_Get_Struct2(self,callback_id_t,&callback_id_data_type);
|
64
|
-
|
65
|
-
return INT2NUM(
|
150
|
+
id=st->id;
|
151
|
+
if(id<0){return INT2NUM(pigif_callback_not_found);}
|
152
|
+
if(st->thread!=Qnil){
|
153
|
+
rb_funcall((VALUE)st->thread, rb_intern("kill"), 0);
|
154
|
+
}
|
155
|
+
st->id=-1;
|
156
|
+
st->thread=Qnil;
|
157
|
+
st->queue=Qnil;
|
158
|
+
return INT2NUM((*(st->cancel))(id));
|
159
|
+
}
|
160
|
+
void pigpio_rbbk_CBFuncEx(int pi, unsigned user_gpio, unsigned level, uint32_t tick, void *queue){
|
161
|
+
pigpio_rbstn_callback_pqueue_push((callback_queue_t *)queue,level,tick);
|
162
|
+
return;
|
163
|
+
}
|
164
|
+
void pigpio_rbbk_evtCBFuncEx(int pi, unsigned event, uint32_t tick, void *callee_proc){
|
165
|
+
(rb_funcall((VALUE)callee_proc, rb_intern("call"), 2,ULONG2NUM(tick),UINT2NUM(event)));
|
166
|
+
return;
|
66
167
|
}
|
67
168
|
|
68
169
|
const rb_data_type_t bsc_xfer_data_type = { //https://gist.github.com/yugui/87ef6964d8a76794be6f
|
@@ -144,14 +245,6 @@ VALUE pigpio_rbst_gpioPulse_make(VALUE self,VALUE gpioOn,VALUE gpioOff,VALUE usD
|
|
144
245
|
st->usDelay=NUM2ULONG(usDelay);
|
145
246
|
return obj;
|
146
247
|
}
|
147
|
-
void pigpio_rbbk_CBFuncEx(int pi, unsigned user_gpio, unsigned level, uint32_t tick, void *userdata){
|
148
|
-
(rb_funcall((VALUE)userdata, rb_intern("call"), 3,ULONG2NUM(tick),UINT2NUM(level),UINT2NUM(user_gpio)));
|
149
|
-
return;
|
150
|
-
}
|
151
|
-
void pigpio_rbbk_evtCBFuncEx(int pi, unsigned event, uint32_t tick, void *userdata){
|
152
|
-
(rb_funcall((VALUE)userdata, rb_intern("call"), 2,ULONG2NUM(tick),UINT2NUM(event)));
|
153
|
-
return;
|
154
|
-
}
|
155
248
|
|
156
249
|
/*
|
157
250
|
Connect to the pigpio daemon. Reserving command and
|
@@ -1899,13 +1992,13 @@ If you call this method without a block, this method raises an Pigpio::CallbackE
|
|
1899
1992
|
|
1900
1993
|
See also: {pigpio site}[http://abyz.me.uk/rpi/pigpio/pdif2.html#callback_ex]
|
1901
1994
|
*/
|
1902
|
-
VALUE pigpio_rbfn_callback(
|
1995
|
+
VALUE pigpio_rbfn_callback(VALUE self,VALUE pi, VALUE user_gpio, VALUE edge, VALUE queue, VALUE thread){
|
1903
1996
|
int id;
|
1904
|
-
|
1905
|
-
|
1906
|
-
if(NIL_P(
|
1907
|
-
id=
|
1908
|
-
return pigpio_rbst_callback_id_make_inner(id,
|
1997
|
+
callback_pqueue_t *st=TypedData_Get_Struct2(queue,callback_pqueue_t,&callback_pqueue_type);
|
1998
|
+
|
1999
|
+
//if(NIL_P(callee_proc)){rb_raise(cCallbackError,"No callback block.\n");}
|
2000
|
+
id=callback_ex(NUM2INT(pi), NUM2UINT(user_gpio), NUM2UINT(edge), pigpio_rbbk_CBFuncEx, (void*)st->queue);
|
2001
|
+
return pigpio_rbst_callback_id_make_inner(id,callback_cancel,queue,thread);
|
1909
2002
|
}
|
1910
2003
|
/*
|
1911
2004
|
This function cancels a callback identified by its id.
|
@@ -1921,8 +2014,8 @@ The function returns 0 if OK, otherwise pigif_callback_not_found.
|
|
1921
2014
|
|
1922
2015
|
See also: {pigpio site}[http://abyz.me.uk/rpi/pigpio/pdif2.html#callback_cancel]
|
1923
2016
|
*/
|
1924
|
-
VALUE pigpio_rbfn_callback_cancel(VALUE self,VALUE
|
1925
|
-
return INT2NUM( callback_cancel(NUM2UINT(
|
2017
|
+
VALUE pigpio_rbfn_callback_cancel(VALUE self,VALUE callback){
|
2018
|
+
return INT2NUM( callback_cancel(NUM2UINT(callback)));
|
1926
2019
|
}
|
1927
2020
|
/*
|
1928
2021
|
This function waits for an edge on the GPIO for up to timeout
|
@@ -1976,11 +2069,10 @@ See also: {pigpio site}[http://abyz.me.uk/rpi/pigpio/pdif2.html#event_callback_e
|
|
1976
2069
|
*/
|
1977
2070
|
VALUE pigpio_rbfn_event_callback(int argc, VALUE *argv, VALUE self){
|
1978
2071
|
int id;
|
1979
|
-
VALUE pi; VALUE event; VALUE
|
1980
|
-
rb_scan_args(argc,argv,"
|
1981
|
-
|
1982
|
-
|
1983
|
-
return pigpio_rbst_callback_id_make_inner(id,userdata,event_callback_cancel);
|
2072
|
+
VALUE pi; VALUE event; VALUE queue; VALUE thread;
|
2073
|
+
rb_scan_args(argc,argv,"4",&pi,&event,&queue,&thread);
|
2074
|
+
id=event_callback_ex(NUM2INT(pi), NUM2UINT(event), pigpio_rbbk_evtCBFuncEx, (void *)queue);
|
2075
|
+
return pigpio_rbst_callback_id_make_inner(id,event_callback_cancel,queue,thread);
|
1984
2076
|
}
|
1985
2077
|
/*
|
1986
2078
|
This function cancels an event callback identified by its id.
|
@@ -3514,7 +3606,7 @@ VALUE pigpio_rbfn_bsc_i2c(VALUE self, VALUE pi, VALUE i2c_addr, VALUE bscxfer){
|
|
3514
3606
|
This class has some constances for pigpio library.
|
3515
3607
|
*/
|
3516
3608
|
void Init_pigpio(void){
|
3517
|
-
VALUE cPulse,cBscXfer;
|
3609
|
+
VALUE cPulse,cBscXfer,cNativeQueue;
|
3518
3610
|
/*
|
3519
3611
|
This class has some constances for pigpio library.
|
3520
3612
|
*/
|
@@ -3583,7 +3675,7 @@ This class has some constances for pigpio library.
|
|
3583
3675
|
rb_define_singleton_method(cAPI, "wave_add_generic", pigpio_rbfn_wave_add_generic, 2);
|
3584
3676
|
rb_define_singleton_method(cAPI, "wave_add_serial", pigpio_rbfn_wave_add_serial, 7);
|
3585
3677
|
rb_define_singleton_method(cAPI, "wave_chain", pigpio_rbfn_wave_chain, 2);
|
3586
|
-
rb_define_singleton_method(cAPI, "callback", pigpio_rbfn_callback,
|
3678
|
+
rb_define_singleton_method(cAPI, "callback", pigpio_rbfn_callback, 5);
|
3587
3679
|
rb_define_singleton_method(cAPI, "callback_cancel", pigpio_rbfn_callback_cancel, 1);
|
3588
3680
|
rb_define_singleton_method(cAPI, "wait_for_edge", pigpio_rbfn_wait_for_edge, 4);
|
3589
3681
|
rb_define_singleton_method(cAPI, "event_callback", pigpio_rbfn_event_callback, -1);
|
@@ -3654,15 +3746,24 @@ This class has some constances for pigpio library.
|
|
3654
3746
|
rb_define_method(cBscXfer, "control=", pigpio_rbst_bsc_xfer_w_control, 1);
|
3655
3747
|
rb_define_method(cBscXfer, "txBuf=", pigpio_rbst_bsc_xfer_w_txBuf, 1);
|
3656
3748
|
rb_define_method(cBscXfer, "rxBuf", pigpio_rbst_bsc_xfer_r_rxBuf, 0);
|
3749
|
+
|
3657
3750
|
/*
|
3658
|
-
The class
|
3751
|
+
The class of native queue.
|
3752
|
+
*/
|
3753
|
+
cNativeQueue = rb_define_class_under(cPigpio,"NativeQueue", rb_cData);
|
3754
|
+
rb_define_singleton_method(cNativeQueue, "make", pigpio_rbst_callback_pqueue_make, 0);
|
3755
|
+
rb_define_method(cNativeQueue, "pop", pigpio_rbst_callback_pqueue_pop, 0);
|
3756
|
+
|
3757
|
+
/*
|
3758
|
+
The class of callback.
|
3659
3759
|
*/
|
3660
3760
|
cCallbackID = rb_define_class_under(cPigpio,"Callback", rb_cData);
|
3661
3761
|
rb_define_method(cCallbackID, "id", pigpio_rbst_callback_id_r_id, 0);
|
3662
3762
|
rb_define_method(cCallbackID, "cancel", pigpio_rbst_callback_id_cancel, 0);
|
3663
3763
|
rb_gc_register_address(&cCallbackID);
|
3764
|
+
|
3664
3765
|
/*
|
3665
|
-
The class
|
3766
|
+
The class of callback error.
|
3666
3767
|
*/
|
3667
3768
|
cCallbackError = rb_define_class_under(cPigpio,"CallbackError", rb_eException);
|
3668
3769
|
rb_gc_register_address(&cCallbackError);
|
data/lib/pigpio/bank.rb
CHANGED
@@ -1,20 +1,22 @@
|
|
1
|
-
class Pigpio
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
class Pigpio
|
2
|
+
class Bank
|
3
|
+
Set={
|
4
|
+
read: [:read_bank_1 ,:read_bank_2],
|
5
|
+
clear: [:clear_bank_1,:clear_bank_2],
|
6
|
+
set: [:set_bank_1 ,:set_bank_2],
|
7
|
+
}
|
8
|
+
def initialize(pi,num)
|
9
|
+
@pi=pi
|
10
|
+
@num=num
|
11
|
+
end
|
12
|
+
def read
|
13
|
+
IF.send(Set[:read][@num],@pi)
|
14
|
+
end
|
15
|
+
def clear(bits)
|
16
|
+
IF.send(Set[:clear][@num],@pi,bits)
|
17
|
+
end
|
18
|
+
def set(bits)
|
19
|
+
IF.send(Set[:set][@num],@pi,bits)
|
20
|
+
end
|
10
21
|
end
|
11
|
-
|
12
|
-
IF.send(Set[:read][@num],@pi)
|
13
|
-
end
|
14
|
-
def clear(bits)
|
15
|
-
IF.send(Set[:clear][@num],@pi,bits)
|
16
|
-
end
|
17
|
-
def set(bits)
|
18
|
-
IF.send(Set[:set][@num],@pi,bits)
|
19
|
-
end
|
20
|
-
end
|
22
|
+
end
|
data/lib/pigpio/gpio.rb
CHANGED
@@ -1,31 +1,32 @@
|
|
1
|
-
class Pigpio
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
1
|
+
class Pigpio
|
2
|
+
class GPIO
|
3
|
+
def initialize(pi,gpio)
|
4
|
+
@pi=pi #0-15
|
5
|
+
@gpio=gpio #0-53
|
6
|
+
end
|
7
|
+
def gpio
|
8
|
+
[@pi,@gpio]
|
9
|
+
end
|
10
|
+
def mode=(mode)
|
11
|
+
ret=IF.set_mode(@pi,@gpio,mode)
|
12
|
+
end
|
13
|
+
def mode
|
14
|
+
ret=IF.get_mode(@pi,@gpio)
|
15
|
+
end
|
16
|
+
def pud=(pud)
|
17
|
+
ret=IF.set_pull_up_down(@pi,@gpio,pud)
|
18
|
+
end
|
19
|
+
def read
|
20
|
+
ret=IF.gpio_read(@pi,@gpio)
|
21
|
+
end
|
22
|
+
def write(level)
|
23
|
+
ret=IF.gpio_write(@pi,@gpio,level)
|
24
|
+
end
|
25
|
+
def hardware_clock(clkfreq)
|
26
|
+
ret=IF.hardware_clock(@pi,@gpio,clkfreq)
|
27
|
+
end
|
28
|
+
def hardware_PWM(vPWMfreq,vPWMduty)
|
29
|
+
ret=IF.hardware_PWM(@pi,@gpio,vPWMfreq,vPWMduty)
|
30
|
+
end
|
30
31
|
end
|
31
32
|
end
|
data/lib/pigpio/pwm.rb
CHANGED
@@ -1,34 +1,38 @@
|
|
1
|
-
class Pigpio
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
1
|
+
class Pigpio
|
2
|
+
class PWM
|
3
|
+
def initialize(pi,gpio)
|
4
|
+
@pi=pi
|
5
|
+
@gpio=gpio
|
6
|
+
end
|
7
|
+
def start(dutycycle)
|
8
|
+
ret=IF.set_PWM_dutycycle(@pi,@gpio,dutycycle)
|
9
|
+
end
|
10
|
+
def dutycycle=(dutycycle)
|
11
|
+
ret=IF.set_PWM_dutycycle(@pi,@gpio,dutycycle)
|
12
|
+
end
|
13
|
+
def dutycycle
|
14
|
+
ret=IF.get_PWM_dutycycle(@pi,@gpio)
|
15
|
+
end
|
16
|
+
def range=(range)
|
17
|
+
ret=IF.set_PWM_range(@pi,@gpio,range)
|
18
|
+
end
|
19
|
+
def range
|
20
|
+
ret=IF.get_PWM_range(@pi,@gpio)
|
21
|
+
end
|
22
|
+
def real_range
|
23
|
+
ret=IF.get_PWM_real_range(@pi,@gpio)
|
24
|
+
end
|
25
|
+
def frequency=(frequency)
|
26
|
+
ret=IF.set_PWM_frequency(@pi,@gpio,frequency)
|
27
|
+
end
|
28
|
+
def frequency
|
29
|
+
ret=IF.get_PWM_frequency(@pi,@gpio)
|
30
|
+
end
|
31
|
+
def servo_pulsewidth=(pulsewidth)
|
32
|
+
ret=IF.set_servo_pulsewidth(@pi,@gpio,pulsewidth)
|
33
|
+
end
|
34
|
+
def servo_pulsewidth
|
35
|
+
ret=IF.get_servo_pulsewidth(@pi,@gpio)
|
36
|
+
end
|
33
37
|
end
|
34
38
|
end
|