نمایش نتایج: از 1 به 10 از 11

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

Hybrid View

  1. #1
    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

  2. #2
    Junior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    14
    نقل قول نوشته اصلی توسط Smead نمایش پست ها
    با هر بار فشار دادن کلید فیزیکی چه تعداد دستور مثلا 1 یا صفر رو سریال نشون داده میشه؟ بیشتر از یدونس؟
    کلید مجازی چطور؟
    اگه بصورت مداوم داره حالت کلید هارو میخونه میتونه باعث این مشکل بشه؛ راه حلش اینه که یه دستور شرطی بزاری که فقط وقتی کلید فشار داده شد، مقدار صفر یا یک رو (فقط) یبار بفرسته
    با چند خط کد ساده نمیشه وب پیج مناسبی ساخت اردوینو برای این کار خیلی ضعیفه

    کلید فشاری فیزیکی در حالتintrrupt و در حالت rising قرار داره. یعنی به محض فشار دادن چون حساس به لبه است، عمل میکنه و led رو روشن و خاموش میکنه. همونطور که گفتم مشکل از طرف صفحه وب و کلیدهای صفحه وب هست که پس از فشار دادن هر کدوم، مقدار value که در کد html براش تعریف شده، جلوی آدرس ip در نوار آدرس مرورگر ظاهر میشه. و این یعنی تا کلید بعدی از صفحه وب فشار داده نشده و این عبارت تغییر نکرده، همون حالت برقراره و فشار دادن کلید فیزیکی فقط برای چند ثانیه عمل میکنه. چون وقتی برنامه از اول حلقه void loop اصلی اجرا میشه، کلاینت دوباره خوانده میشه و مقدار value رو میگیره و دوباره حالت قبل اتفاق میفته.
    نظری نداری همکار محترم؟ میشه کاری کرد که مثلا با فشار دادن کلید فیزیکی این value تغییر کنه؟ و اینکه گفتید یه دستور شرطی بنویسید منظورتون برای کلید فیزیکی بود دیگه؟؟ عملکرد کلید فیزیکی مشکلی نداره و در html هم فکر نکنم بشه دستور شرطی رو نوشت که فقط به بار این value رو با متد GET ارسال کنه. اگه اشتباه میگم تصحیح کنید.


    client.println("<form method=get name=form>");
    client.println("<button name=led_control value=1 type=submit style=height:80px;width:150px> LED ON </button>");
    client.println("<button name=led_control value=2 type=submit style=height:80px;width:150px> LED OFF </button>");

    دستوارت بالا فرم کلیدهای صفحه وب یا همون BUTTON هارو تشکیل میده و میگه در مقابل کلید LED ON مقدار (value) 1 و در مقابل کلید LED OFF مقدار 2 رو برگردون. مشکل توی همین تو خط هست. اگه بشه یه دستور شرطی به این ها اضافه کرد که اگه led روشن شده بود دیگه مقدار 2 رو برنگردونه و اگه led خاموش بود دیگه مقدار 1 رو برنگردونه که حالت قبل رو بهم بزنه، مسئله حل میشه.
    میشه کدهای شرطی رو در این دستورات اضافه کرد؟ البته فکر میکنم متغیری هم لازم باشه که در html تعریف بشه تا بفهمه خروجی مون چه حالتی داره.
    ویرایش توسط mhrt : 06-10-2019 در ساعت 05:43 PM

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

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

SEO by vBSEO