Ryo Od / ExioController
Revision:
6:1b3511093630
Parent:
5:b82675c50720
Child:
9:b0e9ec45a720
--- a/ExioMcp23s17RotaryEncoder.cpp	Wed Nov 02 04:16:46 2016 +0000
+++ b/ExioMcp23s17RotaryEncoder.cpp	Wed Nov 02 05:24:18 2016 +0000
@@ -31,17 +31,23 @@
 
 /**
  * Create rotary encoder.
- *
+ * @param device
+ * @param port
  * @param pin1
  * @param pin2
  * @param min Minimum value.
  * @param max Maximum value.
  * @param val Default value.
  */
-ExioMcp23s17RotaryEncoder::ExioMcp23s17RotaryEncoder(ExioMcp23s17DigitalIn& _pin1, ExioMcp23s17DigitalIn& _pin2, int min, int max, int val)
-        : pin1(_pin1), pin2(_pin2), min(min), max(max), val(val) {
-    pin1.mode(PullUp);
-    pin2.mode(PullUp);
+ExioMcp23s17RotaryEncoder::ExioMcp23s17RotaryEncoder(
+        ExioMcp23s17& device, ExioPort port, int pin1_n, int pin2_n,
+        int min, int max, int val) 
+    : min(min), max(max), val(val) 
+{
+    in1 = new ExioMcp23s17DigitalIn(device, port, pin1_n);
+    in2 = new ExioMcp23s17DigitalIn(device, port, pin2_n);
+    in1->mode(PullUp);
+    in2->mode(PullUp);
     ticker.attach_us(this, &ExioMcp23s17RotaryEncoder::func_ticker, 500);
 }
 
@@ -49,6 +55,8 @@
  * Dispose.
  */
 ExioMcp23s17RotaryEncoder::~ExioMcp23s17RotaryEncoder() {
+    delete in1;
+    delete in2;
 }
 
 /**
@@ -57,7 +65,7 @@
 void ExioMcp23s17RotaryEncoder::func_ticker() {
     //static uint8_t code;
 
-    code = (code << 2) + (((pin1.read() << 1) | (pin2.read() << 0)) & 3);
+    code = (code << 2) + (((in1->read() << 1) | (in2->read() << 0)) & 3);
     code &= 15;
     switch (code) {
         case 0x7: