koding fun

Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 467|回復: 1

霍爾.超音波.led燈合併

[複製鏈接]
發表於 2019-4-11 21:32:16 | 顯示全部樓層 |閱讀模式
主要以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){
試看看
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2020-8-12 15:29 , Processed in 0.058961 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表