patlite controller for STM32F303K8

Dependencies:   SakuraIO mbed

Committer:
misodengaku
Date:
Mon Apr 10 16:51:10 2017 +0000
Revision:
0:872ad9820a14
init

Who changed what in which revision?

UserRevisionLine numberNew 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