از پارسکدرز بیشترین بهره را ببرید و رویای کاری خود را زندگی کنید.
پنج روز پیش منتشر شده
تعداد بازدید: 109
کد پروژه: 611696
شرح پروژه
سلام خسته نباشید
حدودا هزینش چقدر میشه؟
#include “stm8s.h” #include “stm8s_clk.h” #include “stm8s_gpio.h” #include “stm8s_tim4.h”
// ———————–– // پینها // ———————–– #define LEFT_PORT GPIOD #define LEFT_PIN GPIO_PIN_2
#define RIGHT_PORT GPIOD #define RIGHT_PIN GPIO_PIN_3
#define RELAY_PORT GPIOB #define RELAY_PIN GPIO_PIN_5
// ———————–– // millis() // ———————–– volatile uint32_t g_millis = 0;
uint32_t myMillis(void) { uint32_t ms; disableInterrupts(); ms = g_millis; enableInterrupts(); return ms; }
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23) { TIM4_ClearITPendingBit(TIM4_IT_UPDATE); g_millis++; }
// ———————–– // تبدیل پالس چشمکزن به حالت پایدار // ———————–– bool stableIndicator(GPIO_TypeDef* port, GPIO_Pin_TypeDef pin, uint32_t* lastOn) { uint32_t now = myMillis(); bool raw = (GPIO_ReadInputPin(port, pin) == RESET);
if (raw)
*lastOn = now;
// اگر در 250ms اخیر روشن بوده → هنوز روشن حساب کن
if (now - *lastOn < 250)
return true;
return false;
}
// ———————–– // متغیرها // ———————–– uint32_t lastLeft = 0; uint32_t lastRight = 0;
bool waiting = false; bool relayOn = false; bool holdPhase = false; bool lastWasLeft = false;
uint32_t tStart = 0; uint32_t tOffDelay = 0;
// ———————–– // Setup // ———————–– void setup() { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
GPIO_Init(LEFT_PORT, LEFT_PIN, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(RIGHT_PORT, RIGHT_PIN, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(RELAY_PORT, RELAY_PIN, GPIO_MODE_OUT_PP_LOW_FAST);
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4_Cmd(ENABLE);
enableInterrupts();
}
// ———————–– // Loop // ———————–– void loop() { uint32_t now = myMillis();
bool leftOn = stableIndicator(LEFT_PORT, LEFT_PIN, &lastLeft);
bool rightOn = stableIndicator(RIGHT_PORT, RIGHT_PIN, &lastRight);
// مرحله 1: شروع با یک جهت
if (!relayOn && !waiting && !holdPhase)
{
if (leftOn)
{
waiting = true;
lastWasLeft = true;
tStart = now;
}
else if (rightOn)
{
waiting = true;
lastWasLeft = false;
tStart = now;
}
}
// مرحله 2: جهت دوم زیر 1 ثانیه
if (waiting)
{
if (lastWasLeft && rightOn && (now - tStart < 1000))
{
GPIO_WriteHigh(RELAY_PORT, RELAY_PIN);
relayOn = true;
waiting = false;
holdPhase = true;
}
if (!lastWasLeft && leftOn && (now - tStart < 1000))
{
GPIO_WriteHigh(RELAY_PORT, RELAY_PIN);
relayOn = true;
waiting = false;
holdPhase = true;
}
if ((now - tStart) >= 1000)
waiting = false;
}
// مرحله 3: نگه داشتن رله تا خاموش شدن واقعی جهت دوم
if (holdPhase)
{
if (lastWasLeft)
{
if (!rightOn)
{
tOffDelay = now; // شروع تایمر 3 ثانیه
holdPhase = false;
}
}
else
{
if (!leftOn)
{
tOffDelay = now;
holdPhase = false;
}
}
}
// مرحله 4: خاموش کردن رله بعد از 3 ثانیه
if (!holdPhase && relayOn)
{
// اگر دوباره پالس آمد → تایمر ریست شود
if (lastWasLeft && rightOn)
{
holdPhase = true;
}
else if (!lastWasLeft && leftOn)
{
holdPhase = true;
}
else
{
// اگر 3 ثانیه کامل گذشت و هیچ پالسی نیامد → خاموش کن
if (now - tOffDelay >= 3000)
{
GPIO_WriteLow(RELAY_PORT, RELAY_PIN);
relayOn = false;
}
}
}
} این کد برای stm8s003f3p6 هست
میخواستم تبدیلش کنم به برنامه ی میکروی stm8s103f3p6
زمان که خیلی کم داریم
فرقی نداره
میتونید فایل هگزش رو برامون بفرستید
STVD
یا
IAR
ما فقط فایل هگز کامپایل شده رو میخوایم
مهارت ها و تخصص های مورد نیاز
بودجه
25,000 تومان تا 500,000 تومان
مهلت برای انجام
2روز
وضعیت مناقصه
باز (آماده دریافت پیشنهاد)
درباره کارفرما
عضویت سه سال پیش
نیاز به استخدام فریلنسر یا سفارش پروژه مشابه دارید؟
قادر به انجام این پروژه هستید؟
تا کنون 8 پیشنهاد قیمت از سمت فریلنسرها برای این پروژه ارسال شده
به رایگان یک حساب کاربری بسازید
مهارتها و تخصصهای خود را ثبت کنید، رزومه و نمونهکارهای خود را نشان دهید و سوابق کاری خود را شرح دهید.
به شیوهای که دوست دارید کار کنید
برای پروژههای دلخواه در زمان دلخواه پیشنهاد قیمت خود را ثبت کنید و به فرصتهای شغلی منحصر به فرد دسترسی پیدا کنید.
با اطمینان دستمزد دریافت کنید
از زمان شروع کار تا انتهای کار به امنیت مالی شما کمک خواهیم کرد. وجه پروژه را از ابتدای کار به امانت در سایت نگه خواهیم داشت تا تضمین شودکه بعد از تحویل کار دستمزد شما پرداخت خواهد شد.
میخواهید شروع به کار کنید؟
یک حساب کاربری بسازید
بهترین مشاغل فریلنسری را پیدا کنید
رشد شغلی شما به راحتی ایجاد یک حساب کاربری رایگان و یافتن کار (پروژه) متناسب با مهارتهای شما
است.
پیدا کردن کار (پروژه)
تماشای دمو روش کار