save loops

Dependencies:   mbed

Revision:
0:df6fdd9b99f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hardwareIO/CRotaryEncoder.h	Tue Dec 02 04:39:15 2014 +0000
@@ -0,0 +1,73 @@
+#ifndef CROTENC_H_INCLUDED
+#define CROTENC_H_INCLUDED
+
+#include "mbed.h"
+
+
+/* This Class handles a rotary encoder like the one from Pollin electronic (Panasonic EVEP...).
+ * It uses two pins, one creating an interrupt on change.
+ * Rotation direction is determined by checking the state of the other pin.
+ *
+ * Operating the encoder changes an internal integer value that can be read
+ * by Get() or the operator int() functions.
+ * A new value can be set by Set(value) or opperator=.
+ *
+ * Autor: Thomas Raab (Raabinator)
+ *
+ * Dent steady point     !     !     !
+ *                    +-----+     +-----+
+ * pinA (interrupt)   |     |     |     |
+ *                  --+     +-----+     +---
+ *                      +-----+     +-----+
+ * pinB                 |     |     |     |
+ *                  ----+     +-----+     +-
+ *                           --> C.W
+ * CW:  increases position value
+ * CCW: decreases position value
+ *
+ * changelog:
+ *
+ * 09. Nov. 2010
+ *     First version published.
+ *
+ */
+
+#define ROTARY_ENCODER1_PINA p21
+#define ROTARY_ENCODER1_PINB p22
+
+#define ROTARY_ENCODER2_PINA p26
+#define ROTARY_ENCODER2_PINB p27
+
+class CRotaryEncoder
+{
+    public:
+    CRotaryEncoder(PinName pinA, PinName pinB);
+    ~CRotaryEncoder();
+    
+    int Get(void);
+    inline operator int() { return Get(); }
+
+    void Set(int value);
+    inline CRotaryEncoder& operator= ( int  value ) { Set(value); return *this; }
+    
+    void SetMinMax(int min, int max);
+    
+    bool CheckNew();
+
+    private:
+    void wrapValue();
+    InterruptIn     *m_pinA;
+    DigitalIn       *m_pinB;
+    volatile int    m_position, maxValue, minValue;
+    volatile bool newValue;
+    
+    void rise(void);
+    void fall(void);
+    
+
+};
+
+extern CRotaryEncoder rotaryEncoder1;
+extern CRotaryEncoder rotaryEncoder2;
+
+#endif