tastas 发表于 2017-11-14 15:14:14

测试继电器动作时间,下面程序只能测试一次,不能连续测试。

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
unsigned long start, finished, elapsed;
boolean D7_flag;
boolean D8_flag;
long int i=0;

void setup()
{
lcd.begin();
lcd.backlight();
lcd.print("Ready Test!!!");
Serial.begin(9600);
pinMode(4, OUTPUT); // Coil action output signal
pinMode(7, INPUT); // start ,Coil input signal
pinMode(8, INPUT); // stop ,Contact input signal
D7_flag = false;
D8_flag = false;

for(i=1;i<=100;i++)
{
digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(50);               // wait for a second
digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
delay(50);
lcd.setCursor(0, 1);
lcd.print("CountDown=");
lcd.print(100-i);
if(i==1||i==90)
{
lcd.clear();
lcd.print("Ready Test!!!");
}
}
}

void loop()
{
digitalWrite(4, HIGH);

{
if ((digitalRead(7) == HIGH) && (!D7_flag))
{
   //start=millis();
start=micros();
D7_flag = true;
//Serial.println("Started...");
}

if ((digitalRead(8) == HIGH) && (!D8_flag))
{
    // finished=millis();
finished=micros();
D8_flag = true;
//Serial.println("Stop...");
Serial.print("Elapsed time= ");
elapsed=finished-start-8;
Serial.print(elapsed);
Serial.println("us");
lcd.clear();
lcd.print("Elapsed time= ");
lcd.setCursor(0, 1);
lcd.print( elapsed);
lcd.print("us , ");
lcd.print(elapsed/1000);
lcd.print("ms");
}
}
}

要求上电反复开关继电器线圈测试。线圈通电开始计时,触点闭合后计算时间。用1602显示。如果时间大于或者小于多少报警输出
大家帮忙看看处理一下比较好?

shouzama 发表于 2017-11-14 22:56:39

建議你把 setup() 裏的這一段程式碼移到 loop() 開頭處:
D7_flag = false;
D8_flag = false;

for(i=1;i<=100;i++)
{
digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(50);               // wait for a second
digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
delay(50);
lcd.setCursor(0, 1);
lcd.print("CountDown=");
lcd.print(100-i);
if(i==1||i==90)
{
lcd.clear();
lcd.print("Ready Test!!!");
}
}

每次重跑程式就將 pin4→LOW 斷電重來,也將 D7 D8
旗號復歸,這樣才有可能跑第二次吧

主程式最後面再加個 delay() 讓每次測試有時間間隔,
比較好讀取測試結果,以上是菜鳥的建議 :$

tastas 发表于 2017-11-16 00:09:10

shouzama 发表于 2017-11-14 22:56
建議你把 setup() 裏的這一段程式碼移到 loop() 開頭處:
D7_flag = false;
D8_flag = false;


shouzama:您好,试了就是不行,有些疑惑。
页: [1]
查看完整版本: 测试继电器动作时间,下面程序只能测试一次,不能连续测试。