The MGC3130 is the world’s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller
Dependents: NucleoMGC3130 i2c_master
MGC3130.cpp@0:92f17b057d6b, 2015-10-06 (annotated)
- Committer:
- yangcq88517
- Date:
- Tue Oct 06 22:35:38 2015 +0000
- Revision:
- 0:92f17b057d6b
- Child:
- 1:621c4e9238ef
The MGC3130 is the world?s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yangcq88517 | 0:92f17b057d6b | 1 | #include "MGC3130.h" |
yangcq88517 | 0:92f17b057d6b | 2 | |
yangcq88517 | 0:92f17b057d6b | 3 | // IS2 true->High, false->Low |
yangcq88517 | 0:92f17b057d6b | 4 | MGC3130::MGC3130(PinName sda, PinName scl, PinName EI0, bool IS2) |
yangcq88517 | 0:92f17b057d6b | 5 | :TS_Line(EI0), _i2c_bus(sda,scl), msg(255), sensor() |
yangcq88517 | 0:92f17b057d6b | 6 | { |
yangcq88517 | 0:92f17b057d6b | 7 | TS_Line.output(); |
yangcq88517 | 0:92f17b057d6b | 8 | TS_Line.write(1); |
yangcq88517 | 0:92f17b057d6b | 9 | _i2c_bus.frequency(FREQUENCY_FULL); |
yangcq88517 | 0:92f17b057d6b | 10 | |
yangcq88517 | 0:92f17b057d6b | 11 | if (IS2) |
yangcq88517 | 0:92f17b057d6b | 12 | _addr = 0x86; |
yangcq88517 | 0:92f17b057d6b | 13 | else |
yangcq88517 | 0:92f17b057d6b | 14 | _addr = 0x84; |
yangcq88517 | 0:92f17b057d6b | 15 | } |
yangcq88517 | 0:92f17b057d6b | 16 | |
yangcq88517 | 0:92f17b057d6b | 17 | GestICMsg * MGC3130::readMsg() |
yangcq88517 | 0:92f17b057d6b | 18 | { |
yangcq88517 | 0:92f17b057d6b | 19 | TS_Line.input(); |
yangcq88517 | 0:92f17b057d6b | 20 | if (TS_Line.read() == 0) |
yangcq88517 | 0:92f17b057d6b | 21 | return NULL; |
yangcq88517 | 0:92f17b057d6b | 22 | |
yangcq88517 | 0:92f17b057d6b | 23 | msg.reset(); |
yangcq88517 | 0:92f17b057d6b | 24 | |
yangcq88517 | 0:92f17b057d6b | 25 | TS_Line.output(); |
yangcq88517 | 0:92f17b057d6b | 26 | TS_Line.write(0); |
yangcq88517 | 0:92f17b057d6b | 27 | |
yangcq88517 | 0:92f17b057d6b | 28 | _i2c_bus.start(); |
yangcq88517 | 0:92f17b057d6b | 29 | _i2c_bus.write(_addr | 0x01); |
yangcq88517 | 0:92f17b057d6b | 30 | |
yangcq88517 | 0:92f17b057d6b | 31 | int size = _i2c_bus.read(1); |
yangcq88517 | 0:92f17b057d6b | 32 | msg.set(size); |
yangcq88517 | 0:92f17b057d6b | 33 | |
yangcq88517 | 0:92f17b057d6b | 34 | for (int i = 1; i < size - 1; i++) |
yangcq88517 | 0:92f17b057d6b | 35 | msg.set(_i2c_bus.read(1)); |
yangcq88517 | 0:92f17b057d6b | 36 | |
yangcq88517 | 0:92f17b057d6b | 37 | msg.set(_i2c_bus.read(0)); |
yangcq88517 | 0:92f17b057d6b | 38 | |
yangcq88517 | 0:92f17b057d6b | 39 | _i2c_bus.stop(); |
yangcq88517 | 0:92f17b057d6b | 40 | TS_Line.write(1); |
yangcq88517 | 0:92f17b057d6b | 41 | |
yangcq88517 | 0:92f17b057d6b | 42 | return &msg; |
yangcq88517 | 0:92f17b057d6b | 43 | } |
yangcq88517 | 0:92f17b057d6b | 44 | |
yangcq88517 | 0:92f17b057d6b | 45 | SensorData * MGC3130::readSensorData() |
yangcq88517 | 0:92f17b057d6b | 46 | { |
yangcq88517 | 0:92f17b057d6b | 47 | if (readMsg() != NULL && sensor.convert(&msg)) |
yangcq88517 | 0:92f17b057d6b | 48 | return &sensor; |
yangcq88517 | 0:92f17b057d6b | 49 | else return NULL; |
yangcq88517 | 0:92f17b057d6b | 50 | } |