miso dengaku
/
patlite_sakuraio
patlite controller for STM32F303K8
main.cpp@0:872ad9820a14, 2017-04-10 (annotated)
- Committer:
- misodengaku
- Date:
- Mon Apr 10 16:51:10 2017 +0000
- Revision:
- 0:872ad9820a14
init
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
misodengaku | 0:872ad9820a14 | 1 | #include "mbed.h" |
misodengaku | 0:872ad9820a14 | 2 | #include "SakuraIO.h" |
misodengaku | 0:872ad9820a14 | 3 | |
misodengaku | 0:872ad9820a14 | 4 | DigitalOut status_led(PB_5); |
misodengaku | 0:872ad9820a14 | 5 | |
misodengaku | 0:872ad9820a14 | 6 | DigitalOut patlite_r(PB_4); |
misodengaku | 0:872ad9820a14 | 7 | DigitalOut patlite_y(PB_3); |
misodengaku | 0:872ad9820a14 | 8 | DigitalOut patlite_g(PA_15); |
misodengaku | 0:872ad9820a14 | 9 | DigitalOut patlite_4(PA_12); |
misodengaku | 0:872ad9820a14 | 10 | DigitalOut patlite_5(PA_11); |
misodengaku | 0:872ad9820a14 | 11 | DigitalOut patlite_6(PA_8); |
misodengaku | 0:872ad9820a14 | 12 | DigitalOut patlite_7(PB_1); |
misodengaku | 0:872ad9820a14 | 13 | DigitalOut patlite_8(PB_0); |
misodengaku | 0:872ad9820a14 | 14 | |
misodengaku | 0:872ad9820a14 | 15 | DigitalOut patlite_map[8] = { |
misodengaku | 0:872ad9820a14 | 16 | patlite_r, patlite_y, patlite_g, patlite_4, |
misodengaku | 0:872ad9820a14 | 17 | patlite_5, patlite_6, patlite_7, patlite_8 |
misodengaku | 0:872ad9820a14 | 18 | }; |
misodengaku | 0:872ad9820a14 | 19 | |
misodengaku | 0:872ad9820a14 | 20 | //SPI spi(D11, D12, D13); // mosi, miso, sclk |
misodengaku | 0:872ad9820a14 | 21 | //DigitalOut cs(D10); |
misodengaku | 0:872ad9820a14 | 22 | I2C i2c(PB_7, PB_6); // sda, scl |
misodengaku | 0:872ad9820a14 | 23 | uint64_t counter = 0; |
misodengaku | 0:872ad9820a14 | 24 | |
misodengaku | 0:872ad9820a14 | 25 | |
misodengaku | 0:872ad9820a14 | 26 | int main() |
misodengaku | 0:872ad9820a14 | 27 | { |
misodengaku | 0:872ad9820a14 | 28 | //SakuraIO_SPI sakuraio( spi, cs ); |
misodengaku | 0:872ad9820a14 | 29 | SakuraIO_I2C sakuraio(i2c); |
misodengaku | 0:872ad9820a14 | 30 | |
misodengaku | 0:872ad9820a14 | 31 | // Waiting to come online |
misodengaku | 0:872ad9820a14 | 32 | for(;;) { |
misodengaku | 0:872ad9820a14 | 33 | if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break; |
misodengaku | 0:872ad9820a14 | 34 | for (int i = 0; i < 6; i++) { |
misodengaku | 0:872ad9820a14 | 35 | patlite_y = !(i % 2); |
misodengaku | 0:872ad9820a14 | 36 | wait_ms(100); |
misodengaku | 0:872ad9820a14 | 37 | } |
misodengaku | 0:872ad9820a14 | 38 | wait_ms(1000); |
misodengaku | 0:872ad9820a14 | 39 | } |
misodengaku | 0:872ad9820a14 | 40 | |
misodengaku | 0:872ad9820a14 | 41 | patlite_y = 1; |
misodengaku | 0:872ad9820a14 | 42 | wait(1); |
misodengaku | 0:872ad9820a14 | 43 | patlite_y = 0; |
misodengaku | 0:872ad9820a14 | 44 | |
misodengaku | 0:872ad9820a14 | 45 | |
misodengaku | 0:872ad9820a14 | 46 | while(1) { |
misodengaku | 0:872ad9820a14 | 47 | uint8_t avail; |
misodengaku | 0:872ad9820a14 | 48 | uint8_t queued; |
misodengaku | 0:872ad9820a14 | 49 | |
misodengaku | 0:872ad9820a14 | 50 | for(uint8_t i=0; i<queued; i++) { |
misodengaku | 0:872ad9820a14 | 51 | uint8_t channel; |
misodengaku | 0:872ad9820a14 | 52 | uint8_t type; |
misodengaku | 0:872ad9820a14 | 53 | uint8_t values[8]; |
misodengaku | 0:872ad9820a14 | 54 | int64_t offset; |
misodengaku | 0:872ad9820a14 | 55 | int32_t value; |
misodengaku | 0:872ad9820a14 | 56 | |
misodengaku | 0:872ad9820a14 | 57 | // RXキューから点灯要求を取り出す |
misodengaku | 0:872ad9820a14 | 58 | uint8_t ret = sakuraio.dequeueRx(&channel, &type, values, &offset); |
misodengaku | 0:872ad9820a14 | 59 | value = *((int32_t *)values); |
misodengaku | 0:872ad9820a14 | 60 | if(ret == 0x01) { |
misodengaku | 0:872ad9820a14 | 61 | // 取り出せたらチャンネルIDを元に動作振り分け |
misodengaku | 0:872ad9820a14 | 62 | // https://gist.github.com/misodengaku/17b8194dcd0c3038ea5ce7f60ef04072 |
misodengaku | 0:872ad9820a14 | 63 | if (channel < 7) { |
misodengaku | 0:872ad9820a14 | 64 | // tentou |
misodengaku | 0:872ad9820a14 | 65 | if (value == 1) { |
misodengaku | 0:872ad9820a14 | 66 | patlite_map[channel] = 1; |
misodengaku | 0:872ad9820a14 | 67 | sakuraio.enqueueTx((uint8_t)channel, (int32_t)1); |
misodengaku | 0:872ad9820a14 | 68 | } else { |
misodengaku | 0:872ad9820a14 | 69 | patlite_map[channel] = 0; |
misodengaku | 0:872ad9820a14 | 70 | sakuraio.enqueueTx((uint8_t)channel, (int32_t)0); |
misodengaku | 0:872ad9820a14 | 71 | } |
misodengaku | 0:872ad9820a14 | 72 | } |
misodengaku | 0:872ad9820a14 | 73 | |
misodengaku | 0:872ad9820a14 | 74 | } |
misodengaku | 0:872ad9820a14 | 75 | } |
misodengaku | 0:872ad9820a14 | 76 | counter++; |
misodengaku | 0:872ad9820a14 | 77 | if (counter % 100 == 0) { |
misodengaku | 0:872ad9820a14 | 78 | sakuraio.enqueueTx(24, counter); |
misodengaku | 0:872ad9820a14 | 79 | status_led = !status_led; |
misodengaku | 0:872ad9820a14 | 80 | } |
misodengaku | 0:872ad9820a14 | 81 | sakuraio.getTxQueueLength(&avail, &queued); |
misodengaku | 0:872ad9820a14 | 82 | if(queued >= 30) { |
misodengaku | 0:872ad9820a14 | 83 | sakuraio.clearTx(); |
misodengaku | 0:872ad9820a14 | 84 | } else if(queued >= 5) { |
misodengaku | 0:872ad9820a14 | 85 | sakuraio.send(); |
misodengaku | 0:872ad9820a14 | 86 | } |
misodengaku | 0:872ad9820a14 | 87 | |
misodengaku | 0:872ad9820a14 | 88 | wait_ms(10); |
misodengaku | 0:872ad9820a14 | 89 | } |
misodengaku | 0:872ad9820a14 | 90 | |
misodengaku | 0:872ad9820a14 | 91 | } |
misodengaku | 0:872ad9820a14 | 92 |