• 締切済み

arduinoについて

BuriBuri4の回答

  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.2

11番ピンにLED_Fとサーボが二重に割り当てられてる気がする、知らんけど。 あと、具体的な回路とか提示してないけどArduinoから電源とってるなら出力電流足りない気がする。

関連するQ&A

  • ARDUINOで5つのLEDをそれぞれ点滅させたり、フェードインさせた

    ARDUINOで5つのLEDをそれぞれ点滅させたり、フェードインさせたりしたい!! ARDUINO初心者です。5つのLEDをそれぞれ上記の様に制御したいと思っています。点滅は点灯、消灯が一定の点滅ではない効果を持たせたく、5つのLEDのうち、2つはフェードインフェードアウトで蛍のような効果にしたいと思っております。 以下、途中まで3つのLEDで試行錯誤してスケッチを構築したのですが、なかなかこれ以上、前へすすみません。 まず、このスケッチでの第一関門はプログラムの並列処理ができない、ということでした。 int ledPina = 9; int ledPinb = 10; int ledPinc = 11; void setup(){ pinMode(ledPina, OUTPUT); pinMode(ledPinb, OUTPUT); pinMode(ledPinc, OUTPUT); //LedPin a b cを出力に設定。 } void loop() { digitalWrite(ledPina, HIGH); // aのLEDをオン delay(500); //待機 digitalWrite(ledPina, LOW); //aをオフ delay(500); digitalWrite(ledPinb, HIGH); // bのLEDをオン delay(800); // 待機 digitalWrite(ledPinb, LOW); //bをオフ delay(300); digitalWrite(ledPinc, HIGH); // cのLEDをオン delay(100); // 待機 digitalWrite(ledPinc, LOW); //cをオフ delay(50); } おわかりの方、いらっしゃいましたら、お教え願えますでしょうか? よろしくお願い致します!!

  • Arduino プログラミングのエラーについて

    現在、Arduino、4桁7セグメントLED(カソードコモン)、タクトスイッチ3つで、3人クイズ対決で利用する得点加算機を作成しています。 プログラムで、下記のようなエラーが出てしまいます。 invalid types 'int[int]' for array subscript このエラーに対して、何か解決策があればご教授お願い致します。 下記にプログラムを載せます。 const int first_BUTTON = 0; //プレイヤー1の得点ボタン const int second_BUTTON = 1; //プレイヤー2の得点ボタン const int third_BUTTON = 4; //プレイヤー3の得点ボタン const int anode_a = 12; //アノードに接続するArduinoのピン const int anode_b = 8; const int anode_c = 5; const int anode_d = 3; const int anode_e = 2; const int anode_f = 11; const int anode_g = 6; const int cathode_first = 7; // カソードに接続するArduinoのピン const int cathode_second = 9; const int cathode_third = 10; int val_1= 0; int val_2= 0; int val_3= 0; int old_val_1 = 0; int old_val_2 = 0; int old_val_3 = 0; // LEDの状態(0ならオフ、1ならオン) int state_first=0; int state_second=0; int state_third=0; int w; int N; // setup() は、最初に一度だけ実行される void setup () { // ピンを出力モードに設定する pinMode(first_BUTTON, INPUT); pinMode(second_BUTTON, INPUT); pinMode(third_BUTTON, INPUT); pinMode(anode_a, OUTPUT); pinMode(anode_b, OUTPUT); pinMode(anode_c, OUTPUT); pinMode(anode_d, OUTPUT); pinMode(anode_e, OUTPUT); pinMode(anode_f, OUTPUT); pinMode(anode_g, OUTPUT); pinMode(cathode_first, OUTPUT); pinMode(cathode_second, OUTPUT); pinMode(cathode_third, OUTPUT); } //LEDレイアウトを定義 boolean Num_Array[11][7]={ {1,1,1,1,1,1,0},//0 {0,1,1,0,0,0,0},//1 {1,1,0,1,1,0,1},//2 {1,1,1,1,0,0,1},//3 {0,1,1,0,0,1,1},//4 {1,0,1,1,0,1,1},//5 {1,0,1,1,1,1,1},//6 {1,1,1,0,0,1,0},//7 {1,1,1,1,1,1,1},//8 {1,1,1,1,0,1,1},//9 {0,0,0,0,0,0,0} //space }; //LED表示関数を定義 void NumPrint (int Number){ for (int w=0; w<=6; w++){ digitalWrite(w+1,Num_Array[Number][w]); } } boolean Led_Array[3][3]={ {1,0,0,}, //LED1 {0,1,0}, //LED2 {0,0,1} //LED3 }; void Led_Active(int Number){ for(w=0;w<=2;w++){ digitalWrite(w+11,Led_Array[Number][w]); } } // loop() は、setup ()実行後、無限に実行される void loop(){ for(int i=0;i<=2;i++){ NumPrint(N[i]) } Led_Active(i); delay(5); } val_1 = digitalRead(first_BUTTON); NumPrint(state_first); //変化があるかどうかチェック if((val_1 == HIGH) && (old_val_1 == LOW)) { state_first = (state_first+1) % 10; NumPrint(state_first); delay(300); } delay(100); old_val_1 = val_1; val_2 = digitalRead(second_BUTTON); NumPrint(state_second); //変化があるかどうかチェック if((val_2 == HIGH) && (old_val_2 == LOW)) { state_second = (state_second+1) % 10; NumPrint(state_second); delay(300); } delay(100); old_val_2 = val_2; val_3 = digitalRead(third_BUTTON); NumPrint(state_third); //変化があるかどうかチェック if((val_3 == HIGH) && (old_val_3 == LOW)) { state_third = (state_third+1) % 10; NumPrint(state_third); delay(300); } delay(100); old_val_3 = val_3; }

  • Arduino のプログラムについて

    下のプログラムはArduinoで、4個のバッテリーの電圧を取得して、あるバッテリー電圧が14.5V以上だったら、充電を停止し、14.5Vよりも低いバッテリーには充電をするようにしたいのです。例えば、4個のバッテリーの取得電圧が下の図の様な状況の時、それぞれのバッテリーに充電、充電停止を行いたいのです。 AnalogPin 0 → 14.8V → digitalPin 10 を充電停止(LOWにする) AnalogPin 1 → 12.8V → digitalPin 11 を充電(HIGHにする) AnalogPin 2 → 13.7V → digitalPin 12 を充電(HIGHにする) AnalogPin 3 → 13.0V → digitalPin 13 を充電(HIGHにする) 質問:下のプログラムでArduinoに書き込んで動作させてみると、バッテリーの電圧は読み取っているのですが、digitalPin10~13のHIGH、LOWがうまくいきません。良い方法を教えてください。 void setup() { Serial.begin(9600); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); } void loop() { float battery_v[4];            for(int i=0;i<4;i++){ float convert_v=analogRead(i)*5./1024; battery_v[i]=convert_v/30*130; delay(100); Serial.print(i); Serial.print(" is "); Serial.println(battery_v[i]); delay(100); for(int r=9;r<14;r++){  // ここから下の命令がうまく動作しません。 if(battery_v[i]>14.5){ // digitalPin は10~13です。 digitalWrite(r,LOW); // すべてのdigitalWriteが }else { // LOWのままか、HIGHのままになってしまいます。 digitalWrite(r,HIGH); // } }   } delay(1000); } 以上、宜しくお願い致します。

  • Arduino 条件式

    Arduinoでシリアルモニタを使用しています。 それで、入力した数字を条件式で判断し、真ならLEDを光らせるプログラムを作りたいのですが、入力した数字をどのようなコードで描いたらいいでしょうか? ちなみに、if (Serial.readString() <= 40) { と書いたらダメでした。 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); int RST = 3; int RstFlag = 0; int Tr = 4; int TrFlag = 0; int LED = 2; //初期設定 void setup() { pinMode(RST, INPUT); pinMode(Tr, INPUT); pinMode(LED, OUTPUT); lcd.init(); lcd.backlight(); //起動後一回のみ表示 lcd.setCursor(2, 0); lcd.print("Lab"); delay(2000); lcd.clear(); //シリアル通信開始 Serial.begin(9600); } void loop() { RstFlag = digitalRead(RST); TrFlag = digitalRead(Tr); lcd.setCursor(0, 0); lcd.print("Auto Mode"); lcd.setCursor(0, 1); lcd.print("Trigger = "); //シリアルポートにデータがあるか判断 if (Serial.available()) { delay(100); lcd.clear(); //データがある場合の動作 if (Serial.available() > 0) { //print"ln"はモニタに入力後改行するコマンド Serial.println("LCD Received!"); //Serial.readString():データを”文字列”として読み込む lcd.setCursor(10, 1); lcd.print(Serial.readString() + "s"); } } if (RstFlag == 0) { delay(100); lcd.clear(); Serial.println("LCD Clear!"); } /*if ( ○○○ <= 40) { //仮に40とする delay(100); Serial.println("Trigger Out!"); digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } */ length(readString()); }

  • Arduinoでランダムにモーターを回したい

    【電子工作関連】Arduinoでボタンを押すたびに、ランダムに3つのモーターのうち一つが回転するというスケッチを書きたいのですが、ランダムになりません。どうすればランダムになるでしょう? 下がそのスケッチです。 今のところ、3つ全てのモーターが回ってしまいます。 なお、モータードライバにはTA7291Pを使用。 信号ピンである5番6番ピンをArduino5~10番ピンに振り分けて、それぞれにモーターを接続、 電源やGNDは共有してます。 なお、ボタンを使わず、単純に3つのモーターのうち一つが回転するというというスケッチは出来ていて、実際にその通り動いています。 ------------------------------ //3つのモーターをランダムに動かす int val = 0; //入力ピンの状態がこの変数に記憶される void setup(){ pinMode(2,INPUT); //ボタンを入力に設定 pinMode(5,OUTPUT); //モーター(1)のドライバー5番ピンを出力に設定 pinMode(6,OUTPUT); //モーター(2)のドライバー5番ピンを出力に設定 pinMode(7,OUTPUT); //モーター(3)のドライバー5番ピンを出力に設定 pinMode(8,OUTPUT); //モーター(1)のドライバー6番ピンを出力に設定 pinMode(9,OUTPUT); //モーター(2)のドライバー6番ピンを出力に設定 pinMode(10,OUTPUT); //モーター(3)のドライバー6番ピンを出力に設定 } void loop(){ val = digitalRead(2); //入力を読み取りvalに格納 if (val == HIGH){ digitalWrite(random(5,8),HIGH);//ランダムにモーターを正回転させる } else { digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW);//モータを止める } }

  • Arduinoのスケッチでエラーがでてしまいます。

    【電子工作関連】Arduinoでボタンを押すとランダムに3つのモーターのうち一つが回転するというスケッチを書きたいのですが、エラーが出てしまいます。どこが間違っているのでしょう? Arduinoで、ボタンを押すとランダムに3つのモーターのうち一つが回転するというスケッチを書きたいのですが、コンパイル使用とすると、 「error: expected unqualified-id before numeric constant」 というエラーが出てしまいます。 どこが間違っているのでしょう? 下がそのスケッチです。 なお、モータードライバにはTA7291Pを使用。 信号ピンである5番6番ピンをArduino5~10番ピンに振り分けて、それぞれにモーターを接続、 電源やGNDは共有してます。 なお、ボタンを使わず、単純に3つのモーターのうち一つが回転するというというスケッチは出来ていて、実際にその通り動いています。 ------------------------------ //3つのモーターをランダムに動かす int val = 0 //入力ピンの状態がこの変数に記憶される void setup(){ pinMode(2,INPUT); //ボタンを入力に設定 pinMode(5,OUTPUT); //モーター(1)のドライバー5番ピンを出力に設定 pinMode(6,OUTPUT); //モーター(2)のドライバー5番ピンを出力に設定 pinMode(7,OUTPUT); //モーター(3)のドライバー5番ピンを出力に設定 pinMode(8,OUTPUT); //モーター(1)のドライバー6番ピンを出力に設定 pinMode(9,OUTPUT); //モーター(2)のドライバー6番ピンを出力に設定 pinMode(10,OUTPUT); //モーター(3)のドライバー6番ピンを出力に設定 } void loop(){ val = digitalRead(2); //入力を読み取りvalに格納 if (val == HIGH){ digitalWrite(random(5,8),HIGH);//ランダムにモーターを正回転させる } else { digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW);//モータを止める } }

  • プログラムの組み合わせ

    一つ目 #include <Servo.h> #define PBS1 10 #define analogPin 0 Servo RCservo1; void setup() { RCservo1.attach(7); pinMode(PBS1,INPUT); } void loop() { int s1 = digitalRead(PBS1); if(s1 == LOW) { while(1) { RCservo1.write(90); delay(1000); RCservo1.write(140); delay(1000); RCservo1.write(40); delay(1000); RCservo1.write(180); delay(1000); RCservo1.write(0); delay(1000); RCservo1.write(180); delay(1000); RCservo1.write(30); break; } } } 二つ目 int Duration; float Distance; const int TRIG = 10; const int ECHO = 12; const int BEAT = 300; const int SPK = 2; void setup() { Serial.begin(9600); pinMode(TRIG,OUTPUT); pinMode(ECHO,INPUT); } void loop() { digitalWrite(TRIG,LOW); delayMicroseconds(10); digitalWrite(TRIG,HIGH); delayMicroseconds(10); digitalWrite(TRIG,LOW); Duration = pulseIn(ECHO,HIGH); if (Duration > 0) { Distance = Duration /2; Distance = Distance * 0.034; Serial.print(Distance); Serial.print("cm"); } if(Distance < 5) { tone(SPK, 523, BEAT); Serial.println("[C]"); }else if (Distance >= 5&& Distance < 10){ tone(SPK, 494, BEAT); Serial.println("[B]"); }else if (Distance >= 10&& Distance < 15){ tone(SPK, 440, BEAT); Serial.println("[A]"); }else if (Distance >= 15&& Distance < 20){ tone(SPK, 392, BEAT); Serial.println("[G]"); }else if (Distance >= 20&& Distance < 25){ tone(SPK, 349, BEAT); Serial.println("[F]"); }else if (Distance >= 25&& Distance < 30){ tone(SPK, 330, BEAT); Serial.println("[E]"); }else if (Distance >=30&& Distance < 35){ tone(SPK, 294, BEAT); Serial.println("[D]"); }else if (Distance >= 35&& Distance < 40){ tone(SPK, 262, BEAT); Serial.println("[c]"); } delay(1000); } 一つ目はサーボモータを動かすプログラムで 二つ目は超音波センサによる距離に応じて音階が変わるプログラムです これらのプログラムを組み合わせて 距離に応じてサーボモータを動かすプログラムを作りたいです もしよろしければプログラムを教えてください

  • Arduino unoでLED点滅周期が乱れる

      Arduino unoでLED点滅周期が乱れる理由は? スケッチ例のblinkプログラムでLED(13ピン)の点滅時間を1マイクロ秒ON・1マイクロ秒offとしデジタルオシロで観測すると、通常は50%dutyでON・OFFをくりかえしている。  しかし数十パルスかそれ以上経過後の1パルスのON時間が約2倍になったり、別のタイミングのOFF時間が同様に約2倍になったりする理由はどうしてか?  もちろん周期は2マイクロ秒にはならず、プログラムのdigitalWrite()の命令時間分は長く約10マイクロ秒となっています。 実験したプログラムを記載します。 int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delayMicroseconds(1); digitalWrite(led, LOW); delayMicroseconds(1); }

  • Arduinoのプログラムで質問です。

    お世話になります。 Arduinoのプログラムで質問が有ります。 下記のプログラムは2番ピンに信号が入ると割り込みで13番ピンのLEDが設定時間点灯します。 ただ、設定時間になると信号が入っていてもLEDは消灯してしまいます。 そこで、信号が入っている間(ボタンが押されている時)はLEDに点灯してもらいたいのです。 2番ピンに入る信号が不安定なのですが、LEDはずーっと点灯してもらいたいのです。 ちなみにDelayは使いたくありません。(わがままスミマセン) 皆様、よろしくお願い致します。 int PinFlag ; long TimeCount ; void InterPin() { PinFlag = 1 ; // 割込み有ればON } void setup() { pinMode(13,OUTPUT) ; // 13番ピン付属LED出力 attachInterrupt(0,InterPin, RISING) ; // 2番ピンの割込みを指定(立上がりで割込み) PinFlag = 0 ; TimeCount = 0 ; } void loop() { // 割込み有ればその時点の時刻を保存してLEDを点灯する while(PinFlag) { PinFlag = 0 ; TimeCount = millis() ; // 現在の時刻を保存 digitalWrite(13,HIGH) ; // LEDを点灯 } // 設定秒間カウントしたらLEDを消灯する if (TimeCount != 0) { if ((millis() - TimeCount) >= 1010) { TimeCount = 0 ; digitalWrite(13,LOW) ; // LEDを消灯 } } }

  • アルディーノのプログラムについて

    アルディーノで現在、スイッチを押すとLEDが点灯し、センサーが、5回反応をするとLEDが消えると言うプログラムを作りました。 このプログラムにセンサーが10秒間一度も反応しなかったら、LEDが消灯すると言うプログラムを追加したいです。ご教授お願いします。 現在のプログラム #define sensor_ON 1 byte sw=2; byte sensor=3; byte led=13; byte val,last_val=!sensor_ON,num; void setup(){ pinMode(sw,INPUT_PULLUP); pinMode(led,OUTPUT); } void loop(){ if(digitalRead(sw)==LOW)digitalWrite(led,HIGH);//スイッチを押したらLED点灯 if(digitalRead(led)==HIGH){//計測状態なら val=digitalRead(sensor); if(val!=sensor_ON && last_val==sensor_ON){//通過(前回検知&今回非検知)なら num++; if(num==5){//5回通過したら digitalWrite(led,LOW);//LEDを消す num=0;//リセット } } last_val=val; } delay(20); }