پارس‌کدرز چگونه کار می‌کند؟

از پارس‌کدرز بیشترین بهره را ببرید و رویای کاری خود را زندگی کنید.

پارس‌کدرز خریداران یا کارفرمایان را به مجری‌ها /فریلنسرهای خبره‌ای متصل می‌کند که برای انجام پروژه آماده هستند.

الکترونیک - 115145

پنج روز پیش منتشر شده

تعداد بازدید: 108

کد پروژه: 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روز

وضعیت مناقصه

باز (آماده دریافت پیشنهاد)


درباره کارفرما

عضویت سه سال پیش

25101 پروژه ثبت شده ،
20 پروژه در حال انجام ،
242 پروژه آماده دریافت پیشنهاد ،
نرخ پذیرش پیشنهاد 14%

برای پیدا کردن پروژه‌های مشابه ثبت نام کنید و پروفایل خود را بسازید.

ورود با گوگل
یا
نام نباید خالی باشد.
نام خانوادگی نباید خالی باشد.

نیاز به استخدام فریلنسر یا سفارش پروژه مشابه دارید؟

سفارش پروژه مشابه

نیاز به استخدام فریلنسر یا سفارش پروژه مشابه دارید؟

سفارش پروژه مشابه

قادر به انجام این پروژه هستید؟

ارسال پیشنهاد قیمت

تا کنون 8 پیشنهاد قیمت از سمت فریلنسرها برای این پروژه ارسال شده

روش کار در پارس‌کدرز

به رایگان یک حساب کاربری بسازید

مهارت‌ها و تخصص‌های خود را ثبت کنید، رزومه و نمونه‌کارهای خود را نشان دهید و سوابق کاری خود را شرح دهید.

به شیوه‌ای که دوست دارید کار کنید

برای پروژه‌های دلخواه در زمان دلخواه پیشنهاد قیمت خود را ثبت کنید و به فرصت‌های شغلی منحصر به فرد دسترسی پیدا کنید.

با اطمینان دستمزد دریافت کنید

از زمان شروع کار تا انتهای کار به امنیت مالی شما کمک خواهیم کرد. وجه پروژه را از ابتدای کار به امانت در سایت نگه خواهیم داشت تا تضمین شودکه بعد از تحویل کار دستمزد شما پرداخت خواهد شد.

می‌خواهید شروع به کار کنید؟

یک حساب کاربری بسازید


بهترین مشاغل فریلنسری را پیدا کنید
رشد شغلی شما به راحتی ایجاد یک حساب کاربری رایگان و یافتن کار (پروژه) متناسب با مهارت‌های شما است.

پیدا کردن کار (پروژه)

تماشای دمو روش کار