صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 10 از 11

موضوع: کنترل led با وب سرور و push button

  1. #1
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14

    کنترل led با وب سرور و push button

    سلام به دوستان. کسی می دونه چطور میشه با یک push button (فقط یکی) و یک یا دو دکمه در صفحه وب، یک عدد خروجی یا همون led رو کنترل کرد؟
    یعنی یکبار کلید رو فشار بدیم لامپ روشن بشه و با زدن دوباره کلید لامپ خاموش بشه. و اگر با کلید لامپ روشن شد بشه با وب سرور اون رو خاموش کرد و برعکس.

  2. #2
    Senior Member
    تاریخ عضویت
    Apr 2016
    نوشته ها
    116
    نقل قول نوشته اصلی توسط mhrt نمایش پست ها
    سلام به دوستان. کسی می دونه چطور میشه با یک push button (فقط یکی) و یک یا دو دکمه در صفحه وب، یک عدد خروجی یا همون led رو کنترل کرد؟
    یعنی یکبار کلید رو فشار بدیم لامپ روشن بشه و با زدن دوباره کلید لامپ خاموش بشه. و اگر با کلید لامپ روشن شد بشه با وب سرور اون رو خاموش کرد و برعکس.
    سلام
    اول باید پروژتون مشخص باشه: اینکه وب سرور ساخته شده؟ از طریق چی قراره به وب سرور وصل شین(وای فای یا شبکه)؟
    نمونه کدهای زیادی تو اینترنت هست که میتونین سرچ کنین
    ولی یک راه آسونش اینه که از طریق برنامه های آماده مثل blynk ال ای دی رو کنترل کنین
    موفق باشی

  3. #3
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14
    بیشتر توضیح میدم. یه کلید رو در وقفه (پایه2 آردوینو uno) که میشه وقفه شماره صفر و مد RISING قرار دادم که هر وقت کلید فشار داده شد led روشن بشه (صرف نظر از اینکه کلید نگه داشته میشه یا رها میشه چون حساس به لبه است)
    و در سمت وب سرور هم مثل خیلی از مثال هایی که وجود داره دوتا کلید طراحی کردم به نام های LED ON و LED off . که این دوتا مستقل از هم به خوبی کار میکنن. یعنی با کلید روشن و با کلید خاموش میشه و از سمت کلاینت هم با کلیدهای داخل صفحه وب روشن و خاموش صورت می گیره.
    مشکل من اینجاست که می خوام ترکیبی انجام بشه. با صفحه وب روشن و با کلید خاموش بشه یا بالعکس. که اینکار صورت نمی گیره و قاطی میکنه.
    اگر کسی هست در این زمینه کار کرده لطفا کمک کنه؟

  4. #4
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14
    اضافه میکنم که در این پروژه از شیلد شبکه w5100 (یعنی اتصال از طریق کابل شبکه) استفاده شده و کدها و تگ های html که تو خیلی از مثال ها وجود داره.

  5. #5
    Senior Member
    تاریخ عضویت
    Apr 2016
    نوشته ها
    116
    نقل قول نوشته اصلی توسط mhrt نمایش پست ها
    اضافه میکنم که در این پروژه از شیلد شبکه w5100 (یعنی اتصال از طریق کابل شبکه) استفاده شده و کدها و تگ های html که تو خیلی از مثال ها وجود داره.
    برای اینکار باید یک پارامتری تعریف کنی برای وضعیت led که روشن هست یا خاموش(LED state)
    و با فشار دادن کلیدها اون وضعیت تغییر کنه ینی ببینه اگه روشن بود خاموش کنه و بالعکس
    هم برای کلیدهای فیزیکی و هم مجازی باید اینکارو کنی
    اینطوری میتونی دوتا کلید رو حذف کنی. یک کلید مجازی داشته باشی و یکی فیزیکی که با هربار فشار دادنش روشن یا خاموش کنه
    ویرایش توسط Smead : 06-04-2019 در ساعت 08:56 PM

  6. #6
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14
    نقل قول نوشته اصلی توسط Smead نمایش پست ها
    برای اینکار باید یک پارامتری تعریف کنی برای وضعیت led که روشن هست یا خاموش(LED state)
    و با فشار دادن کلیدها اون وضعیت تغییر کنه ینی ببینه اگه روشن بود خاموش کنه و بالعکس
    هم برای کلیدهای فیزیکی و هم مجازی باید اینکارو کنی
    اینطوری میتونی دوتا کلید رو حذف کنی. یک کلید مجازی داشته باشی و یکی فیزیکی که با هربار فشار دادنش روشن یا خاموش کنه

    اینکارو کردم اما جواب نمیده. مسئله اینجاست که یه رشته به عنوان readstring تو برنامه تعریف شده که هر چیزی که از سمت کلاینت (صفحه وب طرف کاربر) خونده میشه رو توی اون می ریزه. و با متد get اون رو در نوار آدرس مرورگر نشون میده. یعنی اگه کلید LED ON داخل صفحه وب رو فشار بدم، هر چیزی که در ازای این کلید تعریف شده باشه، در نوار آدرس مرورگر بعد از آدرس آی پی میاد. یعنی دائم داره اون کلید رو می خونه. سوال اصلی اینجاست که چطور میشه با زدن کلید فیزیکی این متغیر readstring رو تغییر داد.

    client.println("<a href=\"/?button1on\"\">Turn On LED</a>");
    client.println("<a href=\"/?button1off\"\">Turn Off LED</a>");
    دو خط بالا مربوط به همون متد GET هست که با زدن دکمه های TURN on LED و TURN off LED ، عبارات متناظر با اون ها یعنی ?button1on و ?button1off جلوی آدرس آی پی در مرورگر ظاهر میشه.
    ویرایش توسط mhrt : 06-06-2019 در ساعت 12:56 PM

  7. #7
    Senior Member
    تاریخ عضویت
    Apr 2016
    نوشته ها
    116
    نقل قول نوشته اصلی توسط mhrt نمایش پست ها
    اینکارو کردم اما جواب نمیده. مسئله اینجاست که یه رشته به عنوان readstring تو برنامه تعریف شده که هر چیزی که از سمت کلاینت (صفحه وب طرف کاربر) خونده میشه رو توی اون می ریزه. و با متد get اون رو در نوار آدرس مرورگر نشون میده. یعنی اگه کلید LED ON داخل صفحه وب رو فشار بدم، هر چیزی که در ازای این کلید تعریف شده باشه، در نوار آدرس مرورگر بعد از آدرس آی پی میاد. یعنی دائم داره اون کلید رو می خونه. سوال اصلی اینجاست که چطور میشه با زدن کلید فیزیکی این متغیر readstring رو تغییر داد.

    client.println("<a href=\"/?button1on\"\">Turn On LED</a>");
    client.println("<a href=\"/?button1off\"\">Turn Off LED</a>");
    دو خط بالا مربوط به همون متد GET هست که با زدن دکمه های TURN on LED و TURN off LED ، عبارات متناظر با اون ها یعنی ?button1on و ?button1off جلوی آدرس آی پی در مرورگر ظاهر میشه.
    Arduino Web Server and Web Page LED Control using HTML Button and Physical Push Button Switch

  8. #8
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14
    متشکرم. کار کرد. دنبال راهی هستم که بدون کدهای ajax و با همون کدهای html بشه این کارو انجام داد. ajax ظاهرا خیلی پیچیده است و اصلا سر در نمیارم. در هر صورت ممنون. اگه راه دیگه ای پیدا کردم به اشتراک میذارم. اگر در مورد این ajax هم اطلاعات یا آموزش روان و ساده ای دارید که به درد کار با آردوینو بخوره ، لطفا منتقل بفرمایید.[/SIZE]

  9. #9
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14
    لینک زیر برنامه من هست برای انجام این وب سرور.

    test-web-page.rar - آپلود عکس و فایل رایگان

    اگه سریال مانیتور رو باز کنید خواهید دید که مقدار اول مقدار c (که از نوع char است ) و مقدار دوم مقدار readString است (که از نوع رشته یا string) می باشد. اگه با صفحه وب led رو روشن و خاموش کنیم مشکلی نیست. به محض اینکه کلید فشاری رو از روی برد بورد می زنم، led یه لحظه روشن میشه (در صورت خاموش کردن از قبل با وب) ولی چند ثانیه بعد خاموش میشه و بالعکس یعنی اگه خاموش کنیم چند ثانیه بعد روشن میشه. یعنی حالت قبل که ازصفحه وب گرفته بود رو دوباره می گیره.
    علت اینه که دوباره با دستور client.read ، اطلاعات کلاینت رو می خونه و اون رو توی c و در نهایت توی readString ذخیره میکنه. سریال مانیتور هم این رو نشون میده. البته یه لحظه مقدار readString تغییر میکنه ولی دوباره برمی گرده.
    به نظرتون مشکل کجاست؟ میشه کاری کرد که اطلاعات کلاینت پاک بشه یا با اطلاعاتی که خودمون قرار میدیم جایگزین بشه؟
    مقادیر شرط رو من خودم به این شکل قرار دادم.

    if ((L==1) && (ledstate==1)){
    readString ="GET /?led_control=2 HTTP/1.1";
    L=0;
    digitalWrite(LED, LOW);

    }
    if ((L==0) && (ledstate==0)){
    readString ="GET /?led_control=1 HTTP/1.1";
    L=1;
    digitalWrite(LED, HIGH);

    }

    عبارت داخل "" رو به این خاطر این انتخاب کردم که کاملا با مقدار سریال مانیتور یکی باشه. که البته فکر میکنم اینکار اشتباهه و باید فقط مقدار ?led_control=2 ?led_control=1 رو قرار بدم.

    اگه اطلاعات دارید دریغ نفرمایید.

  10. #10
    Senior Member
    تاریخ عضویت
    Apr 2016
    نوشته ها
    116
    نقل قول نوشته اصلی توسط mhrt نمایش پست ها
    لینک زیر برنامه من هست برای انجام این وب سرور.

    test-web-page.rar - آپلود عکس و فایل رایگان

    اگه سریال مانیتور رو باز کنید خواهید دید که مقدار اول مقدار c (که از نوع char است ) و مقدار دوم مقدار readString است (که از نوع رشته یا string) می باشد. اگه با صفحه وب led رو روشن و خاموش کنیم مشکلی نیست. به محض اینکه کلید فشاری رو از روی برد بورد می زنم، led یه لحظه روشن میشه (در صورت خاموش کردن از قبل با وب) ولی چند ثانیه بعد خاموش میشه و بالعکس یعنی اگه خاموش کنیم چند ثانیه بعد روشن میشه. یعنی حالت قبل که ازصفحه وب گرفته بود رو دوباره می گیره.
    علت اینه که دوباره با دستور client.read ، اطلاعات کلاینت رو می خونه و اون رو توی c و در نهایت توی readString ذخیره میکنه. سریال مانیتور هم این رو نشون میده. البته یه لحظه مقدار readString تغییر میکنه ولی دوباره برمی گرده.
    به نظرتون مشکل کجاست؟ میشه کاری کرد که اطلاعات کلاینت پاک بشه یا با اطلاعاتی که خودمون قرار میدیم جایگزین بشه؟
    مقادیر شرط رو من خودم به این شکل قرار دادم.

    if ((L==1) && (ledstate==1)){
    readString ="GET /?led_control=2 HTTP/1.1";
    L=0;
    digitalWrite(LED, LOW);

    }
    if ((L==0) && (ledstate==0)){
    readString ="GET /?led_control=1 HTTP/1.1";
    L=1;
    digitalWrite(LED, HIGH);

    }

    عبارت داخل "" رو به این خاطر این انتخاب کردم که کاملا با مقدار سریال مانیتور یکی باشه. که البته فکر میکنم اینکار اشتباهه و باید فقط مقدار ?led_control=2 ?led_control=1 رو قرار بدم.

    اگه اطلاعات دارید دریغ نفرمایید.
    با هر بار فشار دادن کلید فیزیکی چه تعداد دستور مثلا 1 یا صفر رو سریال نشون داده میشه؟ بیشتر از یدونس؟
    کلید مجازی چطور؟
    اگه بصورت مداوم داره حالت کلید هارو میخونه میتونه باعث این مشکل بشه؛ راه حلش اینه که یه دستور شرطی بزاری که فقط وقتی کلید فشار داده شد، مقدار صفر یا یک رو (فقط) یبار بفرسته
    با چند خط کد ساده نمیشه وب پیج مناسبی ساخت اردوینو برای این کار خیلی ضعیفه
    ویرایش توسط Smead : 06-10-2019 در ساعت 03:55 AM

صفحه 1 از 2 12 آخرینآخرین

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO