久しぶりに使ったらはまった、、、
RGBのチップLEDをArduinoで制御しようと、中華製のArduino nano のコピー互換品を久々に使ったらはまりました、、、
Arduino IDE を最新版にして下さい!というポップが出たので、指示に従い最新の IDE 1.8.13に更新しました。
それで、書き込みしようとすると必ずズッコケる。
下記の記事が多分自分のケースに当てはまるのではないかと試してみました。
こちらによれば
久しぶりに中国製Arduino Nano互換機を出して、Arduino IDE 1.8.8で書き込もうとしたらエラーが出ちゃいました。良く見ると書き込みボーレートが115200bpsになっています。中国製Arduino Nano互換機はセラロックを使っているのでそんなに高速な通信は出来ません。
という事でした。
僕のエラーをみると、同じ現象をうかがわせる
avrdude: Version 6.3-20190619Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/Copyright (c) 2007-2014 Joerg WunschSystem wide configuration file is "C:\Users\info\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"Using Port : COM3Using Programmer : arduinoOverriding Baud Rate : 115200
記事を参考にこのファイルをいじる。
C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt
変更箇所はこちら
元のパラメーターをコメントアウト。スピードを 57600に変更。
ちなみに、このファイルデフォルトでは読み取り、実行の権限しかないので、編集する権限を与えてから内容変更しましょう。
修正完了したら元に戻しましょう。
## Arduino Nano w/ ATmega328P## --------------------------nano.menu.cpu.atmega328=ATmega328Pnano.menu.cpu.atmega328.upload.maximum_size=30720nano.menu.cpu.atmega328.upload.maximum_data_size=2048#nano.menu.cpu.atmega328.upload.speed=115200nano.menu.cpu.atmega328.upload.speed=57600
これで、プログラム書き込み成功しました!
古いIDEでは問題なく動いていたので、この情報がなかったら一生露頭に迷っていたと思います。
ありがとう御座います!
RGBの3チップLEDを使って、LEDチカチカ遊び
一応今回作ったプログラム資料として置いておきます。
3個のRGB LEDをチカチカさせます。
void setup() {
// put your setup code here, to run once:
// 2-10 pin を出力端子に割り当てます。
// 確認でそれぞれ一回点灯させます!
for(int i=2 ; i <=10; i++){
pinMode(i , OUTPUT);
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}
}void loop() {
// put your main code here, to run repeatedly:
//RGBチップLEDの制御// 1つのデモの繰り返し回数
int cnt = 3;//3つのRGBチップ
demo01(cnt);
//LED1 , LED2 , LED3 をそれぞれRGBで点滅させます
demo02(cnt);
//LED1 , LED2 , LED3 をそれぞれゆっくり点灯、ゆっくり消灯
demo03(cnt);
//LED1,LED2,LED3 を全部ゆっくり全点灯させて最後は白にその後ゆっくり消灯
demo04(cnt);}
void demo01(int aCnt){
for(int i=0 ; i < aCnt ; i++){
for(int col=0;col < 3 ; col++){
digitalWrite(col+2 ,HIGH);
digitalWrite(col+5 ,HIGH);
digitalWrite(col+8 ,HIGH);
delay(2000);
digitalWrite(col+2 , LOW);
digitalWrite(col+5 , LOW);
digitalWrite(col+8 , LOW);
}
}
}void demo02(int aCnt){
int led1 = 2;
int led2 = 6;
int led3 = 10;
for(int i=0; i < aCnt ;i++){
for(int col=0; col < 3 ; col++){
if(led1 > 4) led1 = 2 ;
if(led2 > 7) led2 = 5 ;
if(led3 > 10) led3 = 8;
digitalWrite(led1 , HIGH);
digitalWrite(led2 , HIGH);
digitalWrite(led3 , HIGH);
delay(1000);
digitalWrite(led1 , LOW);
digitalWrite(led2 , LOW);
digitalWrite(led3 , LOW);led1++;
led2++;
led3++;
}
}
}void demo03(int aCnt){
for(int i=0; i < aCnt ; i++){
int led[3]={2,6,10};
for(int ii=0 ; ii < 3 ; ii++){
int blit = 0;
for(blit = 0 ; blit <= 255 ; blit += 5){
analogWrite(led[ii] , blit);
delay(30);
}
for(blit = 255 ; blit >= 0 ; blit -= 5){
analogWrite(led[ii] , blit);
delay(30);
}
digitalWrite(led[ii] , LOW);
}
}
}void demo04(int aCnt){
for(int i=0 ; i < aCnt ; i++){
int blit = 0;
int ii = 2;
for(blit = 0 ; blit <= 255 ; blit +=5){
for(ii=2; ii <= 10 ; ii++){
analogWrite(ii , blit);
}
delay(30);
}
for(blit = 255 ; blit >=0 ; blit -=5){
for(ii=2; ii <= 10 ; ii++){
analogWrite(ii , blit);
}
delay(30);
}
}
}
実は、ここでもPWM制御ではまった!
PWMでLEDを段々明るくして、暗くする制御を入れたかったんですけど、ここでもつまづきました。
上手く動くLEDと、デジタル的にオン、オフされちゃうLEDが出てきちゃいました、、、
なんでだろう、、、って悩んでいたら
どうやら analogWrite(LED1, 255); みたいな機能が使えるのは、デジタルの 3,9,10,11 番ポートだけなんですね! 番号の横に~がボードに書いてあるピンだけ。
知らんかった、、、なのでこの制御を入れたければ対応したポートに接続してないとダメなんですね。
もうハンダでバチバチに固定してしまったので、諦めます。