78945622 發表於 2013-1-26 13:51:32

Ardiuno 如何同時執行兩個動作 請高手救命

#include "pitches.h"
// notes in the melody:
int melody[] = {
NOTE_C5,NOTE_F5, NOTE_C5,NOTE_F5, NOTE_C5,NOTE_F5, NOTE_C5,NOTE_F5, NOTE_C5,NOTE_F5, NOTE_C5,NOTE_F5};
int duration = 500;// 500 miliseconds
int photocellPin = 2; // 光敏電阻 (photocell) 接在 anallog pin 2
int photocellVal = 0; // photocell variable
int minLight = 800;   // 最小光線門檻值
int ledPin = 9;
int ledState = 0;



void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop() {

    photocellVal = analogRead(photocellPin);
Serial.println(photocellVal);

if (photocellVal < minLight && ledState == 0)
{
digitalWrite(ledPin, HIGH); // turn on LED
ledState = 1;
for (int a=0; a<=255; a++) //亮度增加
{
analogWrite(9,a);
delay(8);
}
digitalWrite(ledPin, LOW); // turn off LED
ledState = 0;

for (int a=255; a>=0; a--) //亮度減少
{
analogWrite(9,a);
delay(8);
}

}

// 光線充不足時關掉 LED
else if (photocellVal > minLight && ledState == 0)
{
digitalWrite(ledPin, HIGH); // turn on LED
ledState = 1;
for (int a=0; a<=255; a++) //亮度增加
{
analogWrite(9,a);
delay(1);
}
digitalWrite(ledPin, LOW); // turn off LED
ledState = 0;

for (int a=255; a>=0; a--) //亮度減少
{
analogWrite(9,a);
delay(1);

}
}

}

// for (int thisNote = 0; thisNote < 8; thisNote++) {
    // 在 pin8 上輸出聲音,每個音階響 0.5 秒
//    tone(8, melody, duration);
   
    // 間隔一段時間後再播放下一個音階
//   delay(1000);
}

// 兩秒後重新播放
// delay(2000);

我寫了這麼一個語法 這是一個 用光敏電阻控制LED閃爍的語法

當光敏電阻 讀值為800 LED快速閃爍 如果沒有超過 就是一般速度的呼吸燈

但是現在希望把紅色那串字加入 else 裡面 但是如果直接放進去 燈閃一下 馬上蜂鳴器就開始叫 燈都沒作用

希望可以 讓燈 跟蜂鳴器 在else 裡面同時作用

請高手救命

marbol 發表於 2013-1-27 09:18:50

789大大好~~
這個case的兩種輸出方式都各需佔了一個蘿蔔坑來作業,您講的同時執行看來需要雙核心來處理,最簡單的方式為一個板子執行呼吸燈,一個板子執行聲音的輸出,兩個板子再互相設定溝通的方式,來達到您的要求。若是只要一個板子達到要求,要用到中斷的方式長出另一個處理核心,實務上來做需要主客易位_紅色部分放進去正常執行(紅色部分因涉及音調的問題,須讓它一直執行才不會走音),原先呼吸燈的用計時中斷的方式累加或累減,並設定旗標來做判斷。

78945622 發表於 2013-1-27 10:50:55

回復 2# marbol


   感謝大大的指點
我想以我的等級 還是只能分別寫兩個語法來執行了

太感謝你了

cc1357 發表於 2022-3-12 21:02:57

谢谢分享
頁: [1]
查看完整版本: Ardiuno 如何同時執行兩個動作 請高手救命