From 4f8a96c922b3641440188fc0056560efdb3494c7 Mon Sep 17 00:00:00 2001 From: Lucas Vido Date: Mon, 5 May 2014 22:31:23 -0300 Subject: [PATCH 1/4] Create README.rst --- pingo/arduino/README.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 pingo/arduino/README.rst diff --git a/pingo/arduino/README.rst b/pingo/arduino/README.rst new file mode 100644 index 0000000..7e5ccad --- /dev/null +++ b/pingo/arduino/README.rst @@ -0,0 +1,23 @@ +If anyone is facing some error like this: + +$ arduino +java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver +Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path + at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) + at java.lang.Runtime.loadLibrary0(Runtime.java:840) + at java.lang.System.loadLibrary(System.java:1047) + at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:123) + at processing.app.Editor.populateSerialMenu(Editor.java:962) + at processing.app.Editor.buildToolsMenu(Editor.java:691) + at processing.app.Editor.buildMenuBar(Editor.java:476) + at processing.app.Editor.(Editor.java:205) + at processing.app.Base.handleOpen(Base.java:704) + at processing.app.Base.handleOpen(Base.java:669) + at processing.app.Base.handleNew(Base.java:565) + at processing.app.Base.(Base.java:305) + at processing.app.Base.main(Base.java:194) + +The fix is this: +$ sudo ln -s /usr/lib/jni/librxtxSerial-2.2pre1.so /usr/lib/jni/librxtxSerial.so + +PS: I'm running here a CrunchBang 11. But Debian/Ubuntu/Mint user may have this problem too. From 0d8c425030411209680f7aa5ddfa4a396f735af9 Mon Sep 17 00:00:00 2001 From: Lucas Vido Date: Mon, 5 May 2014 22:31:23 -0300 Subject: [PATCH 2/4] Create README.rst --- pingo/arduino/README.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 pingo/arduino/README.rst diff --git a/pingo/arduino/README.rst b/pingo/arduino/README.rst new file mode 100644 index 0000000..7e5ccad --- /dev/null +++ b/pingo/arduino/README.rst @@ -0,0 +1,23 @@ +If anyone is facing some error like this: + +$ arduino +java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver +Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path + at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) + at java.lang.Runtime.loadLibrary0(Runtime.java:840) + at java.lang.System.loadLibrary(System.java:1047) + at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:123) + at processing.app.Editor.populateSerialMenu(Editor.java:962) + at processing.app.Editor.buildToolsMenu(Editor.java:691) + at processing.app.Editor.buildMenuBar(Editor.java:476) + at processing.app.Editor.(Editor.java:205) + at processing.app.Base.handleOpen(Base.java:704) + at processing.app.Base.handleOpen(Base.java:669) + at processing.app.Base.handleNew(Base.java:565) + at processing.app.Base.(Base.java:305) + at processing.app.Base.main(Base.java:194) + +The fix is this: +$ sudo ln -s /usr/lib/jni/librxtxSerial-2.2pre1.so /usr/lib/jni/librxtxSerial.so + +PS: I'm running here a CrunchBang 11. But Debian/Ubuntu/Mint user may have this problem too. From 6f3b8d6b2ebe77b2d626a0d6ae7006d4a8aee42a Mon Sep 17 00:00:00 2001 From: Vido Date: Wed, 7 May 2014 00:07:45 -0300 Subject: [PATCH 3/4] Testcase for AnalogInputCapable Boards * It needs some hardware inputs * Tested on the cool Garagino First working version. We need to discuss some details --- pingo/arduino/arduino.py | 4 +--- pingo/arduino/tests/test.py | 20 +++++++++++++++++++- pingo/board.py | 22 +++++++++++++++++++++- pingo/test/__init__.py | 1 + 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/pingo/arduino/arduino.py b/pingo/arduino/arduino.py index 9c830c5..bbb1909 100644 --- a/pingo/arduino/arduino.py +++ b/pingo/arduino/arduino.py @@ -72,7 +72,5 @@ def _get_pin_value(self, pin): value = firmata_pin.read() while value is None: value = firmata_pin.read() - return int(value * 1023) # the firmata returns - - + return int(value * ((2 ** pin.bits) - 1)) diff --git a/pingo/arduino/tests/test.py b/pingo/arduino/tests/test.py index 3756a9f..8365c88 100644 --- a/pingo/arduino/tests/test.py +++ b/pingo/arduino/tests/test.py @@ -3,17 +3,26 @@ import pingo from pingo.test import level0 +from pingo.test import level1 + class ArduinoFirmataTest(unittest.TestCase): def setUp(self): device = pingo.detect.detect._find_arduino_dev(platform.system()) self.board = pingo.arduino.ArduinoFirmata(device) + + # Level0 Parameters self.vdd_pin_number = 0 self.digital_output_pin_number = 13 self.digital_input_pin_number = 12 self.total_pins = 14 + # Level1 Parameters + self.analog_input_pin_number = 'A4' + self.expected_analog_input = 1004 + self.expected_analog_ratio = 0.98 + def tearDown(self): self.board.cleanup() @@ -28,7 +37,16 @@ def test_list_pins(self): def test_jumpwire(self): pass -class ArduinoExceptions(ArduinoFirmataTest, level0.BoardExceptions): + +class ArduinoDigitalExceptions(ArduinoFirmataTest, level0.BoardExceptions): + pass + + +class ArduinoAnalogRead(ArduinoFirmataTest, level1.AnalogReadBasics): + pass + + +class ArduinoAnalogExceptions(ArduinoFirmataTest, level1.AnalogExceptions): pass diff --git a/pingo/board.py b/pingo/board.py index aaf4cd5..dbde3a1 100644 --- a/pingo/board.py +++ b/pingo/board.py @@ -7,13 +7,19 @@ HIGH = 'HIGH' LOW = 'LOW' + +# TODO: 4 states implementation: IN, OUT, ANALOG, PWM IN = 'IN' OUT = 'OUT' - +ANALOG = 'ANALOG' +#PWM = 'PWM' class WrongPinMode(Exception): value = 'Operation not supported in current mode.' +class ModeNotSuported(Exception): + value = 'Mode not suported by Pin or Board.' + class Board(object): """Abstract class defining common interface for all boards. @@ -222,6 +228,20 @@ def __init__(self, board, location, resolution, gpio_id=None): Pin.__init__(self, board, location, gpio_id) self.bits = resolution + @property + def mode(self): + """[property] Get pin mode ``pingo.IN``""" + return self._mode + + @mode.setter + def mode(self, value): + # TODO: 4 states implementation: IN, OUT, ANALOG, PWM + if value not in [IN, ANALOG]: + raise ModeNotSuported() + + # TODO: Call Board's methods + self._mode = value + @property def value(self): """[property] Get pin value as an integer from 0 to 2 ** resolution - 1""" diff --git a/pingo/test/__init__.py b/pingo/test/__init__.py index 75513c4..49d6739 100644 --- a/pingo/test/__init__.py +++ b/pingo/test/__init__.py @@ -1 +1,2 @@ import level0 +import level1 From df9719ccb98bc6e59696d6416174628f82153d8d Mon Sep 17 00:00:00 2001 From: Vido Date: Wed, 7 May 2014 00:21:26 -0300 Subject: [PATCH 4/4] Level1 Test on PcDuino Tests were not performed on target device --- pingo/pcduino/pcduino.py | 6 +++--- pingo/pcduino/tests/test.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/pingo/pcduino/pcduino.py b/pingo/pcduino/pcduino.py index a2ceb21..125e774 100644 --- a/pingo/pcduino/pcduino.py +++ b/pingo/pcduino/pcduino.py @@ -12,7 +12,7 @@ DIGITAL_PIN_MODES = {IN: '0', OUT: '1'} DIGITAL_PIN_STATES = {HIGH:'1', LOW:'0'} -LEN_DIGITAL_PINS = 14 +LEN_DIGITAL_PINS = 14 ANALOG_PIN_RESOLUTIONS = [6, 6, 12, 12, 12, 12] @@ -20,8 +20,8 @@ class PcDuino(Board): def __init__(self): self.add_pins([DigitalPin(self, location) - for location in range(LEN_DIGITAL_PINS)] + - [AnalogPin(self, 'A%s' % location, bits=bits) + for location in range(LEN_DIGITAL_PINS)] + + [AnalogPin(self, 'A%s' % location, resolution=bits) for location, bits in enumerate(ANALOG_PIN_RESOLUTIONS)]) def _set_pin_mode(self, pin, mode): diff --git a/pingo/pcduino/tests/test.py b/pingo/pcduino/tests/test.py index 8ac4c23..5aaf50d 100644 --- a/pingo/pcduino/tests/test.py +++ b/pingo/pcduino/tests/test.py @@ -5,15 +5,23 @@ import pingo from pingo.test import level0 +from pingo.test import level1 + class PcDuinoTest(unittest.TestCase): def setUp(self): self.board = pingo.pcduino.PcDuino() + # Level0 Parameters self.digital_output_pin_number = 3 self.digital_input_pin_number = 11 self.total_pins = 20 + # Level1 Parameters + self.analog_input_pin_number = 'A2' + self.expected_analog_input = 4014 + self.expected_analog_ratio = 0.98 + def tearDown(self): self.board.cleanup() @@ -30,5 +38,13 @@ class PcDuinoExceptions(PcDuinoTest, level0.BoardExceptions): pass +class PcDuinoAnalogRead(PcDuinoTest, level1.AnalogReadBasics): + pass + + +class PcDuinoAnalogExceptions(PcDuinoTest, level1.AnalogExceptions): + pass + + if __name__ == '__main__': unittest.main()