QEIx4 Example

Dependencies:   QEIx4 mbed

Committer:
jocis
Date:
Tue Sep 30 12:35:07 2014 +0000
Revision:
2:7c787d83331e
Parent:
0:bbf48777e304
Child:
3:922c100de8cd
Added speed measurement; adapted to changed lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jocis 0:bbf48777e304 1 #include "mbed.h"
jocis 0:bbf48777e304 2 #include "QEIx4.h"
jocis 0:bbf48777e304 3
jocis 2:7c787d83331e 4 DigitalOut LEDalive(LED1);
jocis 2:7c787d83331e 5 DigitalOut LEDup(LED4);
jocis 2:7c787d83331e 6 DigitalOut LEDdown(LED3);
jocis 2:7c787d83331e 7
jocis 0:bbf48777e304 8 Timer t;
jocis 0:bbf48777e304 9
jocis 0:bbf48777e304 10 // ports for nxp LPC 1768
jocis 2:7c787d83331e 11 QEIx4 qei1(p30, p29, p28, (QEIx4::EMODE)(QEIx4::IRQ | QEIx4::SPEED)); // QEI with index signal for zeroing
jocis 2:7c787d83331e 12 QEIx4 qei2(p21, p22, NC, QEIx4::IRQ_NO_JAMMING); // QEI with AB signals only
jocis 2:7c787d83331e 13 QEIx4 qei3(p25, p24, NC, QEIx4::POLLING); // QEI without interrups in polling mode
jocis 2:7c787d83331e 14
jocis 2:7c787d83331e 15 // The callback function.
jocis 2:7c787d83331e 16 void myCallback(int value)
jocis 2:7c787d83331e 17 {
jocis 2:7c787d83331e 18 static int valueLast=-1;
jocis 0:bbf48777e304 19
jocis 2:7c787d83331e 20 if ( value > valueLast ) {
jocis 2:7c787d83331e 21 LEDup = !LEDup;
jocis 2:7c787d83331e 22 LEDdown = 0;
jocis 2:7c787d83331e 23 } else {
jocis 2:7c787d83331e 24 LEDdown = !LEDdown;
jocis 2:7c787d83331e 25 LEDup = 0;
jocis 2:7c787d83331e 26 }
jocis 2:7c787d83331e 27 valueLast=value;
jocis 2:7c787d83331e 28 }
jocis 2:7c787d83331e 29
jocis 2:7c787d83331e 30 int main()
jocis 2:7c787d83331e 31 {
jocis 0:bbf48777e304 32 t.start();
jocis 0:bbf48777e304 33
jocis 2:7c787d83331e 34 qei1.setZeroOnIndex(true); // set the flag to zero counter on next index signal rises
jocis 2:7c787d83331e 35 qei1.setSpeedFactor(1.0f); // factor to scale from Hz (edges pe second = 4 * CPS) to user units (1.0=Hz, 1/(4*CPR)=rps, 1/(60*4*CPR)=rpm, 360/(4*CPR)=°/s, ...)
jocis 2:7c787d83331e 36
jocis 2:7c787d83331e 37 qei3.attachCounterChange(myCallback);
jocis 0:bbf48777e304 38
jocis 2:7c787d83331e 39 while(1) {
jocis 0:bbf48777e304 40 qei3.poll(); // poll manually without interrupt - sampling in this loop with about 2kHz
jocis 2:7c787d83331e 41
jocis 2:7c787d83331e 42 if ( t.read_ms() > 250 ) { // every quater second (4 Hz)
jocis 0:bbf48777e304 43 t.reset();
jocis 0:bbf48777e304 44 t.start();
jocis 2:7c787d83331e 45 LEDalive = !LEDalive;
jocis 2:7c787d83331e 46
jocis 2:7c787d83331e 47 printf ( "\r\n%6d %6d %6d %10.3f", (int)qei1, (int)qei2, (int)qei3, (float)qei1.getSpeed() ); // print counter values
jocis 0:bbf48777e304 48 }
jocis 0:bbf48777e304 49
jocis 2:7c787d83331e 50 wait_us(20); // for about 50kHz polling
jocis 0:bbf48777e304 51 }
jocis 0:bbf48777e304 52 }