• ベストアンサー

arduinoのプログラムの書き方について

aruduinoのプログラムの書き方として1つのプログラム内に下記のように複数のセットアップとvoid loopを書き込むのは可能なのでしょうか? void setup(led) { ledを点灯させる為の初期設定 } void setup(buzzer) { ブザーを鳴動させる為の初期設定 } void loop(led) { ledを点灯させる処理 } void loop(buzzer) { ブザーを鳴動させる処理 } どうか宜しく御回答の程お願いいたします。

  • baoo
  • お礼率79% (23/29)

質問者が選んだベストアンサー

  • ベストアンサー
  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.1

無理です、Arduino スケッチは setip() , loop() はひとつのみです 最終的に main() に組み込まれます int main(void){ init(); initVariant(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun();   } return 0; } 書くとしたら void setup(){ led_ini(); buzzer_ini(); } void loop(){ task_led(); task_buzzer(); } とするか、led or buzzer をタイマ割り込みで処理すると時分割で同時進行が可能です

baoo
質問者

お礼

loopだけでもできれば・・・ と思っていたのですが無理なんですね。 御教授ありがとうございました。

関連するQ&A

  • 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); }

  • 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のプログラムのループ文

    ESP-wroom-32のプログラムを勉強している時にループ文について気になることがあったのですが、 void mqttLoop() { Serial.print("mqttLoop() area01: "); if (!mqttClient.connected()) { connectAWSIoT(); } mqttClient.loop(); long now = millis(); if (now - lastMsg > 2000) { lastMsg = now; ++value; snprintf (msg, 75, "hello world #%ld", value); Serial.print("Publish message: "); Serial.println(msg); //mqttClient.publish("msg/comment", msg); Serial.print("mqttLoop() area02: "); } } void loop() { mqttLoop(); } void loop() という関数を宣言して、それをmqttLoop() 関数内で ”mqttClient.loop();” これを置くと、mqttLoop関数が無限ループ状態になっているのですが、これはArduinoの無限ループの特殊なやり方なのでしょうか? 自分がやっているC言語の無限ループだと while(1){.........} これが普通のやり方だと思うのですが、どうぞご教示の程よろしくお願い致します。

  • Arduinoで曲げセンサの値を取得する方法

    Arduinoで曲げセンサを使い、その値を取得してProcessingで音を鳴らす方法はどのような方法があるのでしょうか。 例えば弱く曲げればsample01.mp3が流れ、強く曲げればsample02.mp3が流れるようにしたいです。 自分なりに調べてProcessing側でMinimライブラリを使って下記のプログラムを書けば音を鳴らせるとこまではいけました。 Processing側のプログラムです。 import ddf.minim.*; Minim minim; AudioPlayer player; void setup(){ size(200,200); minim = new Minim(this); player = minim.loadFile("sample01.mp3"); player.play(); } void draw(){ } void stop(){ player.close(); minim.stop(); super.stop(); } Arduinoのプログラムです。 const int led_pin = 9; const int vol_pin = 1; int vol_value = 0; void setup() { Serial.begin( 9600 ); } void loop() { vol_value = analogRead( vol_pin ); analogWrite( led_pin, vol_value/4 ); Serial.write( byte(vol_value/4) ); delay( 50 ); } よろしくお願い申し上げます。

  • arduinoで7セグメントを使いたい

    arduinoで下記のスケッチを使って7セグメントledを動かしているのですが、 /////////////////////////////////////////////////////////////////////////////////////////////////////// //LED表示関数を定義 void NumPrint(int Number){ for (int w=0; w<=7; w++){ digitalWrite(w+1,Num_Array[Number][w]); } } /////////////////////////////////////////////////////////////////////////////////////////////////////// (1)この部分がどのような動作をしているのかわかりません。 (2)また、arduinoMEGAを使用して22~29番ピンを出力にして動かそうとしても上手くいきません。 (1)についての説明と(2)の解決法を知りたいです。 よろしくお願いしますm(._.)m ↓使っているスケッチ(1~8番ピンが出力のもので上手く動作します) void setup(){ //1~8番ピン デジタル出力へセット for (int i=1; i<=8; i++){ pinMode(i,OUTPUT); } } //LEDレイアウトを定義 //0,1,2,3,4,5,6,7,8,9,0,. の順。 boolean Num_Array[11][8]={ {0,0,0,1,0,0,0,1},{1,1,0,1,0,1,1,1},{0,0,1,1,0,0,1,0},{1,0,0,1,0,0,1,0}, {1,1,0,1,0,1,0,0},{1,0,0,1,1,0,0,0},{0,0,0,1,1,0,0,0},{1,1,0,1,0,0,0,1}, {0,0,0,1,0,0,0,0},{1,0,0,1,0,0,0,0},{1,1,1,0,1,1,1,1} }; //LED表示関数を定義 void NumPrint(int Number){ for (int w=0; w<=7; w++){ digitalWrite(w+1,Num_Array[Number][w]); } } void loop(){ for(int t=0;t<=10;t++){ NumPrint(t); delay(500); } }

  • 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について

    7セグledとボタンを使って、エレベーターの階数表示をさせる回路とプログラムを作っていてプログラムはある程度かけているのですがうまくいきません。何が足りないのでしょうか? プログラムは以下の通りです。 {#define LED_A 6 #define LED_B 7 #define LED_C 8 #define LED_D 9 #define LED_E 10 #define LED_F 11 #define LED_G 12 #define LED_DP 13 #include <Servo.h> Servo servo; int button1 = 5; int button2 = 4; unsigned long buttonGap ; void setup() { pinMode(LED_A, OUTPUT); pinMode(LED_B, OUTPUT); pinMode(LED_C, OUTPUT); pinMode(LED_D, OUTPUT); pinMode(LED_E, OUTPUT); pinMode(LED_F, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_DP, OUTPUT); pinMode(5, OUTPUT); pinMode(4, OUTPUT); servo.attach(11); } void loop() { digitalWrite(LED_A, HIGH); digitalWrite(LED_B, LOW); digitalWrite(LED_C, LOW); digitalWrite(LED_D, HIGH); digitalWrite(LED_E, HIGH); digitalWrite(LED_F, HIGH); digitalWrite(LED_G, HIGH); digitalWrite(LED_DP, HIGH); digitalWrite(LED_A, LOW); digitalWrite(LED_B, LOW); digitalWrite(LED_C, HIGH); digitalWrite(LED_D, LOW); digitalWrite(LED_E, LOW); digitalWrite(LED_F, HIGH); digitalWrite(LED_G, LOW); digitalWrite(LED_DP, HIGH); servo.write(180); delay(2000); servo.write(0); delay(2000); } void switchLights() { digitalWrite(LED_A, HIGH); digitalWrite(LED_B, LOW); digitalWrite(LED_C, LOW); digitalWrite(LED_D, HIGH); digitalWrite(LED_E, HIGH); digitalWrite(LED_F, HIGH); digitalWrite(LED_G, HIGH); digitalWrite(LED_DP, HIGH); delay(4000); digitalWrite(LED_A, LOW); digitalWrite(LED_B, LOW); digitalWrite(LED_C, HIGH); digitalWrite(LED_D, LOW); digitalWrite(LED_E, LOW); digitalWrite(LED_F, HIGH); digitalWrite(LED_G, LOW); digitalWrite(LED_DP, HIGH); delay(5000); }

  • CCSコンパイラにてLED点灯プログラムが作成したい

    タイトルにもあるようにCCSコンパイラにてLED点灯プログラムを作成したいのですが、プログラムが上手く組めません。 ハードウェアとしては、PORT_A0にスイッチを接続。 PORT_B0にLEDを接続。 PICは16F873を使用。 動作は、電源を入れた状態でLEDは消灯している状態。 スイッチを1度押すとLEDは点灯(スイッチはモメンタリーを使用) スイッチを離してもLEDは点灯したまま。 もう一度スイッチを押すとLEDは消灯。 これらの動作を繰り返すプログラムを割り込みを使用せずに作成したいのですが、上手くできません。 void main() 以降の{}の中がわかりませんので、 もし宜しければ、教えてください。 #include <16f873.h> #ZERO_RAM #define setup_adc_ports(NO_ANALOG) #use delay(clock = 20000000) void main() { }

  • H8-3048 LED点灯プログラムについて

    初歩的な質問で申し訳ございません。 H8-3048でスイッチ入力によってLEDを点灯させたいのですが、 スイッチの押されたタイミングによって LEDの点灯状況が変化してしまいます。 何故でしょうか?回路側の問題?ご助言お待ちしています。 参考までに下にLED点灯ソースコードを示します。 #include <3048f.h> #define led P1.DR.BYTE /*P1.DR.BYTEをledに割り当て*/ #define sw1 PA.DR.BIT.B2 #define sw2 PA.DR.BIT.B3 void initport(void) /*入出力端子設定*/ { P1.DDR = 0xff; PA.DDR = 0x00; } int main( void ){ initport(); led = 0x00; /*初期値設定*/ while(1){ if( sw1 == 1 ){ /*sw1が押された時LED点灯*/ led = 0xff;} else if( sw2 == 1 ){ /*sw2が押された時LED消灯*/ led = 0x00;} else{ led;} /*それ以外はLEDの状態保持*/ } }