miso dengaku
/
patlite_sakuraio
patlite controller for STM32F303K8
main.cpp
- Committer:
- misodengaku
- Date:
- 2017-04-10
- Revision:
- 0:872ad9820a14
File content as of revision 0:872ad9820a14:
#include "mbed.h" #include "SakuraIO.h" DigitalOut status_led(PB_5); DigitalOut patlite_r(PB_4); DigitalOut patlite_y(PB_3); DigitalOut patlite_g(PA_15); DigitalOut patlite_4(PA_12); DigitalOut patlite_5(PA_11); DigitalOut patlite_6(PA_8); DigitalOut patlite_7(PB_1); DigitalOut patlite_8(PB_0); DigitalOut patlite_map[8] = { patlite_r, patlite_y, patlite_g, patlite_4, patlite_5, patlite_6, patlite_7, patlite_8 }; //SPI spi(D11, D12, D13); // mosi, miso, sclk //DigitalOut cs(D10); I2C i2c(PB_7, PB_6); // sda, scl uint64_t counter = 0; int main() { //SakuraIO_SPI sakuraio( spi, cs ); SakuraIO_I2C sakuraio(i2c); // Waiting to come online for(;;) { if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break; for (int i = 0; i < 6; i++) { patlite_y = !(i % 2); wait_ms(100); } wait_ms(1000); } patlite_y = 1; wait(1); patlite_y = 0; while(1) { uint8_t avail; uint8_t queued; for(uint8_t i=0; i<queued; i++) { uint8_t channel; uint8_t type; uint8_t values[8]; int64_t offset; int32_t value; // RXキューから点灯要求を取り出す uint8_t ret = sakuraio.dequeueRx(&channel, &type, values, &offset); value = *((int32_t *)values); if(ret == 0x01) { // 取り出せたらチャンネルIDを元に動作振り分け // https://gist.github.com/misodengaku/17b8194dcd0c3038ea5ce7f60ef04072 if (channel < 7) { // tentou if (value == 1) { patlite_map[channel] = 1; sakuraio.enqueueTx((uint8_t)channel, (int32_t)1); } else { patlite_map[channel] = 0; sakuraio.enqueueTx((uint8_t)channel, (int32_t)0); } } } } counter++; if (counter % 100 == 0) { sakuraio.enqueueTx(24, counter); status_led = !status_led; } sakuraio.getTxQueueLength(&avail, &queued); if(queued >= 30) { sakuraio.clearTx(); } else if(queued >= 5) { sakuraio.send(); } wait_ms(10); } }