Arduino Nano 互換機テスト

はんだ付けしたArduino Nano 互換機が正常に動作するかテストしました。

このArduino Nano 互換機はUSB通信にCH340Gというチップを使っているようです。
archlinuxならch340はドライバを入れなくても認識しました。

$lsmod |grep ch34
ch341

テスト回路

f:id:tiridukano_yagigame:20191124202505j:plain
テスト回路
5VとGNDをブレッドボードのプラスとマイナスに、
デジタルピンを全てLEDに、
アナログピンを全てGNDに、
可変抵抗を取り付けてテストしたいアナログピンを繋いだだけです。

テストプログラム

int digitalPin =13;     //0-13 デジタルピンの数
int analogPin =7;       //0-7  アナログピンの数
int analogLevel =1024;  

void setup() {
  // put your setup code here, to run once:
  // デジタルピンをすべて出力モードに
  for(int i=0; i <= digitalPin; i=i+1){
    pinMode(i, OUTPUT);
  }
  
}

void loop() {
  // put your main code here, to run repeatedly:
  // 一番電圧の高いアナログピンを取得
  int analogMax =0;
  for(int i=0; i <= analogPin; i=i+1){
    int analog[i];
    analog[i] = analogRead(i);
    if(analog[i] > analogMax){
      analogMax = analog[i];
    }
  }

  //アナログ入力から点灯させるLEDを選ぶ
  int count=0;
  for(int i=digitalPin; i >= 0; i=i-1){
    if(analogMax > analogLevel/2/digitalPin*(i+1)+analogLevel/4){ //analogLevelの半分を検出範囲、上下1/4を余白にする
      if(count < 8){  //デジタルピンの出力が合計200mAを超えないようにする
        count = count +1;
        digitalWrite(i,HIGH);
      } else {
        digitalWrite(i,LOW);
      }
    } else {
      digitalWrite(i,LOW);
    }
  }
}

アナログピンの中で一番電圧の高いピンを探し、デジタルピンでLEDを光らせるプログラムです。
LED1つに20mAほど流れるので全部光らせるとArduino Nano 互換機の合計出力(200mA)を超えてしまうので、
if(count < 8){の部分で同時に光らせる数を制限しています。

テスト結果

テストしたArduino Nano 互換機は2つとも無事動作しました。
ピンに通電しなかったり、隣のピンと繋がってたりすることもなかったので無事使えそうです。

書き込みエラー

Arduino IDE の設定を

ツール>ボード Arduino Nano
プロセッサ ATmega328p

としてプログラムを書き込もうとしましたが,
エラーが出て書き込めませんでした。

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

ツール>ボード Arduino Nano
プロセッサ ATmega328p(Old Bootloader)

に設定を変更すると書き込めました。

f:id:tiridukano_yagigame:20191124202535p:plain
Arduino IDE 設定