diff --git a/src/examples/button/button.go b/src/examples/button/button.go new file mode 100644 index 00000000..3be226c4 --- /dev/null +++ b/src/examples/button/button.go @@ -0,0 +1,28 @@ +package main + +import ( + "machine" + "runtime" +) + +// This example assumes that the button is connected to pin 8. Change the value +// below to use a different pin. +const buttonPin = 8 + +func main() { + led := machine.GPIO{machine.LED} + led.Configure(machine.GPIOConfig{Mode: machine.GPIO_OUTPUT}) + + button := machine.GPIO{buttonPin} + button.Configure(machine.GPIOConfig{Mode: machine.GPIO_INPUT}) + + for { + if button.Get() { + led.Low() + } else { + led.High() + } + + runtime.Sleep(runtime.Millisecond * 10) + } +} diff --git a/src/machine/machine_avr.go b/src/machine/machine_avr.go index e166a38e..a7e79a07 100644 --- a/src/machine/machine_avr.go +++ b/src/machine/machine_avr.go @@ -47,3 +47,14 @@ func (p GPIO) Set(value bool) { } } } + +// Get returns the current value of a GPIO pin. +func (p GPIO) Get() bool { + if p.Pin < 8 { + val := *avr.PIND & (1 << p.Pin) + return (val > 0) + } else { + val := *avr.PINB & (1 << (p.Pin - 8)) + return (val > 0) + } +} diff --git a/src/machine/machine_dummy.go b/src/machine/machine_dummy.go index 7c2f986b..f91c82b2 100644 --- a/src/machine/machine_dummy.go +++ b/src/machine/machine_dummy.go @@ -25,3 +25,7 @@ func (p GPIO) Configure(config GPIOConfig) { func (p GPIO) Set(value bool) { } + +func (p GPIO) Get() bool { + return false +} diff --git a/src/machine/machine_nrf.go b/src/machine/machine_nrf.go index 013fdd3c..f873f3e6 100644 --- a/src/machine/machine_nrf.go +++ b/src/machine/machine_nrf.go @@ -39,3 +39,9 @@ func (p GPIO) Set(high bool) { nrf.P0.OUTCLR = 1 << p.Pin } } + +// Get returns the current value of a GPIO pin. +func (p GPIO) Get() bool { + // TODO: implement + return false +}