نوشته اصلی توسط
hasandimer
سلام خسته نباشید
من یه چرخ گردان دارم و میخوام یه کد براش بنویسم برای مثال اگر مثلا یک پایه اردوینو چندین دفعه در ثانیه 1شد تو کنسول سریال بنویسه کیلومتر در ساعت چطور میشه کدش؟
با دستورflagمیشه؟
سلام ،
با دستور pulseIn() میشه به شرطی که مدت زمانی که پایه یک میمونه در برابر مدت زمانی که صفره خیلی کم باشه
دستور رو برای همون پایه و مقدار صفر تنظیم کنید ، pulseIn(pin,LOW);
این دستور مدت زمانی که پایه low بوده (تقریبا زمانی که چزخ یک دور زده) رو برمیگردونه
2*Pi*r رو به این زمان تقسیم کنید تا سرعت به دست بیاد (r شعاع چرخ برحسب متر و زمان رو هم به ثانیه تبدیل کنید)
تا اینجا سرعت بر حسب متر بر ثانیه به دست اومده در 3.6 ضربش کنید تا بر حسب کیلومتر بر ساعت به دست بیاد
اگر زمان یک بودنه پایه هم قابل توجه هست میتونین هر لحظه مقدار پایه با مقدار پایه در تکرار قبل رو مقایسه کنید اگه در تکرار قبل صفر بوده و در این تکرار یک شده زمان رو یاداشت کنین و تفاوت این زمان با زمان قبلی میشه مدت زمانی که یه دور زده
اگه امکان داره برات پایه رو صفر کن به جای یک تا بتونی از پول آپ داخل آردوینو استفاده کنی:
کد:
int pin_status, previous_pin_status;
int input_pin=5;
int round_number;
unsigned long timE , interval;
float speedd=0;
float R=.5;
void setup()
{
pinMode(input_pin,INPUT_PULLUP);
pin_status=digitalRead(input_pin);
round_number=0;
timE=0;
}
void loop()
{
previous_pin_status= pin_status;
pin_status=digitalRead(input_pin);
if (previous_pin_status - pin_status ==1)
{
interval=millis()-timE;
timE=millis();
round_number++;
}
if (round_number>1)
speedd=(2*3.14*R/(interval/1000))*3.6;
}
R شعاع چرخ ، round_number شماره دور ، timE زمانی که پایه از یک به صفر میره ، interval هم زمان بین دو timE متوالی