
نوشته اصلی توسط
cjmj
این کد ها رو برای ساخت یه فرکانس متر برای یه کار خاص استفاده کردم
این کد ها در نظر خودم درست میاد فرکانس هم درست اندازه گیری میکنه.
مشکل من اینجاست که وقتی که دیگه فرکانسی نمیدم به ورودی یعنی ورودی رو به زمین وصل میکنم یا به 5 ولت ، قانونا باید فرکانس صفر رو نشون بده ولی تو سریال مانیتور مینویسه inf و مشکل از همین جا شروع میشه. چون در این لحظه که فرکانس 0 میشه تمام خروجی ها 1 میشن
وقتی فرکانسی نداریم ، متغییر دوره ی زمانی مساوی میشه با 0 و چون طبق فرمول 1000 تقسیم میشه بر صفر و این یعنی بی نهایت. و وقتی که بی نهایت شد تمام خروجی هام 1 میشن.
در ضمن تا فرکانس 17 هرتز هم درست نمی سنجه
راستی در مورد تابع pulsein یه سوال دارم
این تابع زمان تناوب به میکرو ثانیه رو برمیگردونه یا تعداد نواسانات رو در هر میکروثانیه؟؟؟
مشکلت با نوشتن یه if حل میشه دوست من :
کد:
#define input 4
//#define in 8
#define F1 15
#define F2 16
#define F3 17
#define F4 13
unsigned int high_time;
//int h_time;
unsigned int low_time;
//int l_time;
float time_period;
//float t_period;
float frequency;
//float frequenc;
void setup()
{
pinMode(input,INPUT_PULLUP);
//pinMode(in,INPUT);
pinMode(F1,OUTPUT);
pinMode(F2,OUTPUT);
pinMode(F3,OUTPUT);
pinMode(F4,OUTPUT);
Serial.begin(9600);
}
void loop()
{
high_time=pulseIn(input,HIGH);
low_time=pulseIn(input,LOW);
time_period=high_time+low_time;
time_period=time_period/1000;
if(time_period!=0){frequency=1000/time_period;}
else {Serial.println("0 Frequency");frequency=0;}
/*
h_time=pulseIn(in,HIGH);
l_time=pulseIn(in,LOW);
t_period=h_time+l_time;
t_period=t_period/1000;
frequenc=1000/t_period;
*/
//Serial.print('frequenc');
Serial.println(frequency);
//Serial.print(" Hz");
if (frequency >= 17){
digitalWrite (F1, HIGH);
}
else if (frequency <=16 )
{
digitalWrite (F1, LOW);
}
if (frequency >= 25){
digitalWrite (F2, HIGH);
}
else if (frequency <= 24)
{
digitalWrite (F2, LOW);
}
if (frequency >= 38){
digitalWrite (F3, HIGH);
}
else if (frequency <= 37)
{
digitalWrite (F3, LOW);
}
if (frequency >= 49){
digitalWrite (F4, HIGH);
}
else if (frequency <=48){
digitalWrite (F4, LOW);
}
delay(50);
}
اینو تست کن ببین مشکل یک شدن خروجی هات حل میشه