Arduinoにモーター2つ、センサー1つ、外部出力機器2つを接続したシステムを作っています。
また、それらの情報をシリアル通信(USB経由)でPCに送信しています。
ピンのアサインは下記のようになっています。
4番ピン モーター1制御
5番ピン モーター1制御(PWM)
6番ピン モーター2制御
12番ピン モーター2制御(PWM)
8番ピン センサー入力
9番ピン 外部IO出力1
A4ピン 外部IO出力2
モーター制御はドライバーモジュールを使っています。
初期化時にシリアル通信「Serial.begin(9600);」実行しますが、この時なぜかモーター1が勝手に回りだし、しばらくすると止まります。
この現象の原因はなぜ起こるのでしょうか?
初期化のソースコードは以下になります。MsTimer2でセンサーの入力を500ms毎にPCへ送信しています。
void setup() { pinMode(6, OUTPUT); pinMode(12, OUTPUT); pinMode(8, INPUT_PULLUP); pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(A4, OUTPUT); Serial.begin(9600); // モーター1を停止 analogWrite(5, 0); digitalWrite(4, HIGH); // モーター2を停止 analogWrite(12, 0); digitalWrite(6, HIGH); MsTimer2::set(500, avg); MsTimer2::start(); }
ちなみに、下記のサイトで
2.同時に全部が使えないピン
「例えば、Arduinoにはタイマーという時間を刻む機能があるのですが、このタイマーの周期を作るために、●番ピンを使用してパルスを作っている! など...
ですので、最初のうち、全部のポートにいろいろな部品をぶら下げて機器を作ってみようとすると、プログラムでは決して制御していないLEDが急に光りだしたり、いきなりモータが回りだしたりとします。」
https://daisuki-arduino.com/arduino-pin/
という記載があり、これが問題なのではないかと考えています。