ADコンバーターMCP3008 / SPI / AD変換値を1回だけ読み出してみる / micro:bit / mbed

#include "MicroBit.h"
SPI            spi(MOSI, MISO, SCK);
MicroBitSerial serial(USBTX, USBRX);
MicroBitPin    CS(MICROBIT_ID_IO_P16,
                  MICROBIT_PIN_P16,
                  PIN_CAPABILITY_DIGITAL);

int main(void){
    
    CS.setDigitalValue(1);

    char mosi[] = {1, 0b10000000, 0};
    char miso[3];

    // If you specify default settings for SPI, .format() and .frequency() can be omitted.
    //spi.format(8, 0); // How many bits in one byte, and SPI mode0(0,0).
    //spi.frequency(1000000);

    CS.setDigitalValue(0);
    for(int i=0; i<3; i++){
        miso[i] = spi.write(mosi[i]);
    }    
    CS.setDigitalValue(1);
    
    serial.printf("MOSI data: 0x%x\t 0x%x\t 0x%x\n", mosi[0], mosi[1], mosi[2]);
    serial.printf("MISO data: 0x%x\t 0x%x\t 0x%x\n", miso[0], miso[1], miso[2]);

    uint16_t A2Ddata = (miso[1]<<8 | miso[2]) & 1023;
    float    volt    = (float)A2Ddata * 3.23/1024.0;
    
    serial.printf("AD%d, %.2f(v)\n", A2Ddata, volt);

    release_fiber();
    return 0;
}

実行結果:
f:id:ti-nspire:20180702082203p:plain
f:id:ti-nspire:20180702082138p:plain
f:id:ti-nspire:20180702082806p:plain