oaoa40216 發表於 2019-4-11 21:32:16

霍爾.超音波.led燈合併

主要以HALL感測器測量轉速並傳換為時速,設定當達成時速超過20KM/hr、距離在20CM內時,LED警示燈亮起,其餘條件LED警示燈皆為暗
但目前遇到 在測試時 序列富視窗 裡的超音波數值正常 不過 當hall開始測轉速時 視窗就會整個卡住 不會動
程式個別分開時 偵測都正常 但要合併一起使用卻會有問題 我第一次做這樣的合併程式 不知道會有甚麼衝突
第一次詢問問題 arduino新手 請多包涵

int trigPin = 12;                  //Trig Pin 定義超音波感測器角位
int echoPin = 11;//Echo Pin          //定義超音波感測器角位
int ledPin = 13;                     //定義燈號角位
volatile int rpmcount = 0;
int rpm = 0;
unsigned long lastmillis = 0;
int val1=0;   //超音波感測器數值
int val2=0;      //HALL感測器數值

long duration, cm, inches;

void setup() {
Serial.begin (9600);             // Serial Port begin
pinMode(trigPin, OUTPUT);      //Define inputs and outputs
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
attachInterrupt(0,rpm, FALLING);//interrupt cero (0) is on pin two(2).
}

void loop()
{
   if (millis() - lastmillis == 500){
    rpm = rpmcount * 60;
    val2 = rpm;
    Serial.print("RPM =\t"); //print the word "RPM" and tab.
    Serial.print(rpm);
    Serial.print("\t Hz=\t"); //print the word "Hz".
    Serial.println(rpmcount); /*print revolutions per second or Hz. And print new line or enter.*/
    rpmcount = 0; // Restart the RPM counter
    lastmillis = millis(); // Uptade lasmillis
    attachInterrupt(0, rpm, FALLING); //enable interrupt
    }
if(val2>360){   //若時速超過20公里
    Distance();
    if(val1<=20)//距離小於20CM
    {
      digitalWrite(13,HIGH);//LED警示燈亮起
    }
   else
    {
      digitalWrite(13,LOW);//LED警示燈為暗
    }
}
}


void Distance(){
    digitalWrite(trigPin, LOW);
    delayMicroseconds(5);
    digitalWrite(trigPin, HIGH);   // 給 Trig 高電位,持續 10微秒
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    pinMode(echoPin, INPUT);             // 讀取 echo 的電位
    duration = pulseIn(echoPin, HIGH);   // 收到高電位時的時間
    cm = (duration/2) / 29.1;         // 將時間換算成距離 cm 或 inch
    inches = (duration/2) / 74;
    val1 = cm;
    Serial.print("Distance : ");
    Serial.print(inches);
    Serial.print("in,   ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
}

超新手 發表於 2019-4-12 08:40:50


if (millis() - lastmillis == 500){
改為
if (millis() - lastmillis >= 500){
試看看
頁: [1]
查看完整版本: 霍爾.超音波.led燈合併