极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 289|回复: 2

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

[复制链接]
发表于 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显示。如果时间大于或者小于多少报警输出
大家帮忙看看处理一下比较好?

回复

使用道具 举报

发表于 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() 讓每次測試有時間間隔,
比較好讀取測試結果,以上是菜鳥的建議
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
shouzama 发表于 2017-11-14 22:56
建議你把 setup() 裏的這一段程式碼移到 loop() 開頭處:
  D7_flag = false;
  D8_flag = false;

shouzama:您好,试了就是不行,有些疑惑。
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-11-23 20:53 , Processed in 0.039147 second(s), 5 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表