![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Dependencies: FastPWM GMD_template_lib mbed
main.cpp@0:690d8ed9ee20, 2016-07-01 (annotated)
- Committer:
- inst
- Date:
- Fri Jul 01 06:31:56 2016 +0000
- Revision:
- 0:690d8ed9ee20
- Child:
- 1:29e84d1e7bcc
??????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
inst | 0:690d8ed9ee20 | 1 | #include "mbed.h" |
inst | 0:690d8ed9ee20 | 2 | #include "GMD.hpp" |
inst | 0:690d8ed9ee20 | 3 | |
inst | 0:690d8ed9ee20 | 4 | char read_address() { |
inst | 0:690d8ed9ee20 | 5 | const size_t din_num = 4; |
inst | 0:690d8ed9ee20 | 6 | DigitalIn din[] = { |
inst | 0:690d8ed9ee20 | 7 | DigitalIn(dp26), |
inst | 0:690d8ed9ee20 | 8 | DigitalIn(dp25), |
inst | 0:690d8ed9ee20 | 9 | DigitalIn(dp18), |
inst | 0:690d8ed9ee20 | 10 | DigitalIn(dp17) |
inst | 0:690d8ed9ee20 | 11 | }; |
inst | 0:690d8ed9ee20 | 12 | |
inst | 0:690d8ed9ee20 | 13 | char address = 0; |
inst | 0:690d8ed9ee20 | 14 | for (size_t i = 0; i < din_num; ++i) { |
inst | 0:690d8ed9ee20 | 15 | address |= din[i].read() << (i + 2); |
inst | 0:690d8ed9ee20 | 16 | } |
inst | 0:690d8ed9ee20 | 17 | return address; |
inst | 0:690d8ed9ee20 | 18 | } |
inst | 0:690d8ed9ee20 | 19 | |
inst | 0:690d8ed9ee20 | 20 | int main(){ |
inst | 0:690d8ed9ee20 | 21 | I2CSlave i2c(dp5, dp27); |
inst | 0:690d8ed9ee20 | 22 | i2c.address(read_address()); |
inst | 0:690d8ed9ee20 | 23 | GMD md(dp1, dp2, dp9); |
inst | 0:690d8ed9ee20 | 24 | |
inst | 0:690d8ed9ee20 | 25 | while (true){ |
inst | 0:690d8ed9ee20 | 26 | char buf; |
inst | 0:690d8ed9ee20 | 27 | switch (i2c.receive()){ |
inst | 0:690d8ed9ee20 | 28 | case I2CSlave::ReadAddressed: |
inst | 0:690d8ed9ee20 | 29 | break; |
inst | 0:690d8ed9ee20 | 30 | |
inst | 0:690d8ed9ee20 | 31 | case I2CSlave::WriteGeneral: |
inst | 0:690d8ed9ee20 | 32 | break; |
inst | 0:690d8ed9ee20 | 33 | |
inst | 0:690d8ed9ee20 | 34 | case I2CSlave::WriteAddressed: |
inst | 0:690d8ed9ee20 | 35 | i2c.read(&buf, 1); |
inst | 0:690d8ed9ee20 | 36 | |
inst | 0:690d8ed9ee20 | 37 | float p = (buf & 0x80) ? -1.0f: 1.0f; |
inst | 0:690d8ed9ee20 | 38 | p *= (buf & 0x7F); |
inst | 0:690d8ed9ee20 | 39 | p *= 1.0f / 0x7F; |
inst | 0:690d8ed9ee20 | 40 | |
inst | 0:690d8ed9ee20 | 41 | md.set(p); |
inst | 0:690d8ed9ee20 | 42 | break; |
inst | 0:690d8ed9ee20 | 43 | |
inst | 0:690d8ed9ee20 | 44 | case I2CSlave::NoData: |
inst | 0:690d8ed9ee20 | 45 | break; |
inst | 0:690d8ed9ee20 | 46 | } |
inst | 0:690d8ed9ee20 | 47 | } |
inst | 0:690d8ed9ee20 | 48 | } |