Skip to content

Commit

Permalink
Added buzzer driver.
Browse files Browse the repository at this point in the history
  • Loading branch information
gunthercox committed Jan 30, 2016
1 parent 38438ed commit 0c330da
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 0 deletions.
27 changes: 27 additions & 0 deletions examples/buzzer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import time
import zorg


def buzz(my):
while True:
my.buzzer.toggle()
time.sleep(0.5)

robot = zorg.robot({
"name": "Test",
"connections": {
"edison": {
"adaptor": "zorg_edison.Edison",
},
},
"devices": {
"buzzer": {
"connection": "edison",
"driver": "zorg_gpio.Buzzer",
"pin": 4, # Digital pin 4
},
},
"work": buzz,
})

robot.start()
10 changes: 10 additions & 0 deletions tests/smoke_tests/test_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from zorg_gpio import LightSensor
from zorg_gpio import TemperatureSensor
from zorg_gpio import Button
from zorg_gpio import Buzzer
from zorg_gpio import Servo
from zorg_gpio import Relay
from zorg_gpio import Led
Expand Down Expand Up @@ -38,6 +39,15 @@ def test_command_method_exists(self):
self.assertIn(command, dir(button))


class BuzzerSmokeTests(SmokeTestCase):

def test_command_method_exists(self):
buzzer = Buzzer(self.options, self.connection)

for command in buzzer.commands:
self.assertIn(command, dir(buzzer))


class DigitalSensorSmokeTests(SmokeTestCase):

def test_command_method_exists(self):
Expand Down
31 changes: 31 additions & 0 deletions tests/test_devices.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from zorg_gpio.led import Led
from zorg_gpio.servo import Servo
from zorg_gpio.relay import Relay
from zorg_gpio.buzzer import Buzzer
from .mock_device import MockAdaptor
from unittest import TestCase

Expand Down Expand Up @@ -80,3 +81,33 @@ def test_toggle(self):

self.assertTrue(first_toggle != second_toggle)


class TestBuzzer(TestCase):

def setUp(self):
self.buzzer = Buzzer({}, MockAdaptor())

def test_set_state_on(self):
self.buzzer.set_state(1)
self.assertEqual(self.buzzer.is_on(), True)

def test_set_state_off(self):
self.buzzer.set_state(0)
self.assertEqual(self.buzzer.is_on(), False)

def test_turn_on(self):
self.buzzer.turn_on()
self.assertEqual(self.buzzer.is_on(), True)

def test_turn_off(self):
self.buzzer.turn_off()
self.assertEqual(self.buzzer.is_on(), False)

def test_toggle(self):
self.buzzer.toggle()
first_toggle = self.buzzer.is_on()

self.buzzer.toggle()
second_toggle = self.buzzer.is_on()

self.assertTrue(first_toggle != second_toggle)
2 changes: 2 additions & 0 deletions zorg_gpio/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from .analog_sensor import AnalogSensor
from .button import Button
from .buzzer import Buzzer
from .digital_sensor import DigitalSensor
from .led import Led
from .light_sensor import LightSensor
Expand All @@ -11,6 +12,7 @@
__all__ = [
'AnalogSensor',
'Button',
'Buzzer',
'DigitalSensor',
'Led',
'LightSensor',
Expand Down
41 changes: 41 additions & 0 deletions zorg_gpio/buzzer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from zorg.driver import Driver


class Buzzer(Driver):

def __init__(self, options, connection):
super(Buzzer, self).__init__(options, connection)

self.current_state = False

self.commands = [
"set_state",
"is_on",
"turn_on",
"turn_off",
"toggle",
]

def set_state(self, state):
"""
State should be a 1 or a 0.
"""
self.current_state = (state == 1)
self.connection.digital_write(self.pin, state)

def is_on(self):
return self.current_state

def turn_on(self):
self.current_state = True
self.connection.digital_write(self.pin, 1)

def turn_off(self):
self.current_state = False
self.connection.digital_write(self.pin, 0)

def toggle(self):
if self.is_on():
self.turn_off()
else:
self.turn_on()

0 comments on commit 0c330da

Please sign in to comment.