| 
 | 
 
主要以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(); 
} 
 
  |   
 
 
 
 |