---
# System prepended metadata

title: 卒業研究経過報告(Eチーム)#22

---

# 卒業研究経過報告(Eチーム)#22
メンバー：鈴木, 堀
[前回のメモ](https://hackmd.io/rtRjwnfgT5SPk4OQZlBXEw)
[先生のメモ](https://hackmd.io/@okuisatoshi/H1Z5QkTUY)

## 今回やること
前回の実験で各抵抗の識別が可能であることが分かったので、その結果を元に、読み取り値からブロックの種類を判別し、認識できるようにする。

## 実験
[先生のメモ](https://hackmd.io/@okuisatoshi/H1Z5QkTUY)に登場したコードを参考にして、読み取った値をif文で分けた後に1-9の戻り値を割り振って配列に格納するようにする。前回得られた読み取り値を元に、そこから多少値がブレても問題ないように幅を持たせて範囲を設定する。
#### 読み取り値を分けるコード
```c+=
//値変換
uint8_t SetNum(int blockNum){
        if(blockNum <= 27){
                return 0;
        }else if(blockNum <= 58 && blockNum >= 28){
                return 1; //10kΩ
        }else if(blockNum <= 117 && blockNum >= 59){
                return 2; //6.8kΩ
        }else if(blockNum <= 216 && blockNum >= 118){
                return 3; //2.2kΩ
        }else if(blockNum <= 342 && blockNum >= 217){
                return 4; //1.5kΩ
        }else if(blockNum <= 532 && blockNum >= 343){
                return 5; //510Ω
        }else if(blockNum <= 625 && blockNum >= 533){
                return 6; //220Ω
        }else if(blockNum <= 680 && blockNum >= 626){
                return 7; //180Ω
        }else if(blockNum <= 751 && blockNum >= 681){
                return 8; //100Ω
        }else if(blockNum <= 819 && blockNum >= 752){
                return 9; //47Ω
        }else{
            return 10;
        }
}
```
これを前回の実験で書いたコードと組み合わせる。
#### コードの全体
```c+=
#include"MicroBit.h"
#define TATE    1
#define YOKO    1
#define ID_READ_BUTTON  10
//読み取りボタンインスタンスのID7
#define MUX_READ    1
//マルチプレクサで拡張するピンの数
uint16_t board[TATE][YOKO];
MicroBit uBit;
MicroBitButton readButton(MICROBIT_PIN_P19, ID_READ_BUTTON, MICROBIT_BUTTON_ALL_EVENTS, PullUp);

//値変換
uint8_t SetNum(int blockNum){
        if(blockNum <= 27){
                return 0;
        }else if(blockNum <= 58 && blockNum >= 28){
                return 1; //10kΩ
        }else if(blockNum <= 117 && blockNum >= 59){
                return 2; //6.8kΩ
        }else if(blockNum <= 216 && blockNum >= 118){
                return 3; //2.2kΩ
        }else if(blockNum <= 342 && blockNum >= 217){
                return 4; //1.5kΩ
        }else if(blockNum <= 532 && blockNum >= 343){
                return 5; //510Ω
        }else if(blockNum <= 625 && blockNum >= 533){
                return 6; //220Ω
        }else if(blockNum <= 680 && blockNum >= 626){
                return 7; //180Ω
        }else if(blockNum <= 751 && blockNum >= 681){
                return 8; //100Ω
        }else if(blockNum <= 819 && blockNum >= 752){
                return 9; //47Ω
        }else{
            return 10;
        }
}

//読み取りルーチン
void read(){
    static MicroBitPin muxRead=uBit.io.P2;//マルチプレクサで読み取るピン
    //ここから読み取り
    for(int i = 0;i < YOKO; i++){//直接読み取り
        for(int j = 0;j < TATE; j++){
            board[i][j] = SetNum(muxRead.getAnalogValue());
        }
    }
}

//読み取りボタン押されたら実行
void OnButton(MicroBitEvent){
    uBit.display.disable();
    read();
    uBit.display.enable();
    //値を表示
    for(int i=0; i < TATE; i++){
        for(int j=0; j <YOKO; j++){
            uBit.serial.send(board[i][j]);
        }
        uBit.serial.send("\r\n\r\n");
    }
    uBit.serial.send("------------------------------------------------------");
    uBit.serial.send("\r\n\r\n");
}

int main(){
    uBit.init();
    uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, OnButton);
    while(true){
        uBit.sleep(1000);
    }
}
```

## 結果
| 計測した抵抗[Ω] | 1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 結果 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|10000|1|1|1|1|1|成功|
|6800|2|2|2|2|2|成功|
|2200|3|3|3|3|3|成功|
|1500|4|4|4|4|4|成功|
|510|5|5|5|5|5|成功|
|220|6|6|6|6|6|成功|
|180|7|7|7|7|7|成功|
|100|8|8|8|8|8|成功|
|47|9|9|9|9|9|成功|

## 考察
前回と同じ回路で9種類の抵抗を5回ずつ計測した結果、どの抵抗も問題なく判別できた。これにより、マルチプレクサを用いて抵抗を判別する工程が完成したと言える。
## 参考資料
[TC74HC4051APデータシート](https://www.chip1stop.com/pdf/product/TOSH/TC74HC4051AF_TC74HC4053AP_JA_DATASHEET_071001.PDF)

