overclockzonefanpage  overclockzoneth  TV  
Results 1 to 13 of 13
  1. #1
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default ช่วยแนะนำการแก้โปรแกรมภาษาซีหน่อยครับ แงๆ

    เป็นวงจรที่ต่อกับเซนเซอร์นะครับ ตัดเอามาเฉพาะส่วนที่เป็นเงื่อนไขการทำงาน ทีนี้ผมมีปัญหาคือผมต้องแก้โปรแกรม และผมอ่อนกากมากๆ หน้านี้กว่าผมจะเขียนออกมาได้เป็นอาทิตๆ และมันต้องส่งพุ่งนี้ครับ

    โปรแกรมเดิมๆของมันจะอธิบายตามคำสั่งนะครับ โดยรีเรย์ที่จะไปควบคุมอุปกรณ์มีสี่ตัว

    if((SW1 == 1)&& (SW2 == 1)) //เมื่อเซนเซอร์1 และ 2 จับวัตถุได้พร้อมกัน
    {
    relay3 = 0; // รีเรย์ตัวที่สามทำงาน ไฟสัญญานติด
    delay(500); // Siren ON หน่วงเวลา 3 วินาที

    relay1 = 0; // รีเรย์ตัวแรกทำงาน Motor Left หมุนลง
    relay2 = 1;
    relay3 = 0;//ไฟยังติดอยู่
    relay4 = 1;

    while(limit1); // Limit Switch Left มอเตอร์หมุนผ้าใบไปชนลิมิตสวิตตัวล่าง

    relay1 = 1; // Motor OFF
    relay2 = 1;
    relay3 = 1; // Siren OFF
    relay4 = 1;
    delay(9000); // หน่วงเวลา 53 วินาที <<<<<<<<<<< แก้ตรงนี้ครับ

    relay3 = 0;
    delay(300); // Siren ON 2 วีนาที
    relay1 = 1;
    relay2 = 0; // Motor Right มอเตอร์หมุนขึ้น
    relay4 = 1;
    while(limit2); // Limit Switch Right ลิมิตสวิตตัวบนถูกชน

    relay1 = 1; // Motor OFF หยุดการทำงานทั้งหมด
    relay2 = 1; // Motor OFF
    relay3 = 1; // Siren OFF
    relay4 = 1;
    delay(10);
    }

  2. #2
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    สิ่งที่ผมะจแก้ก็คือการเพิ่มเงื่อนไข โดยยกเลิกการหน่วงเวลา 53 วินาที แต่เปลี่ยนเป็นเงื่อนไข if((SW1 == 0)&& (SW2 == 0)) คือเงื่อนไขที่ว่าเมื่อเซนเซอร์ออฟพร้อมกันสองตัวนาน 15 วินาที มอเตอร์ก็จะหมุนกลับทิศทางไปเข้าขั้นตอนอันเดิม งงกะคำสั่งอ่ะครับ จำไม่ได้จริง

  3. #3
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    if((SW1 == 1)&& (SW2 == 1)) //เมื่อเซนเซอร์1 และ 2 จับวัตถุได้พร้อมกัน
    {
    relay3 = 0; // รีเรย์ตัวที่สามทำงาน ไฟสัญญานติด
    delay(500); // Siren ON หน่วงเวลา 3 วินาที

    relay1 = 0; // รีเรย์ตัวแรกทำงาน Motor Left หมุนลง
    relay2 = 1;
    relay3 = 0;//ไฟยังติดอยู่
    relay4 = 1;

    while(limit1); // Limit Switch Left มอเตอร์หมุนผ้าใบไปชนลิมิตสวิตตัวล่าง

    relay1 = 1; // Motor OFF
    relay2 = 1;
    relay3 = 1; // Siren OFF
    relay4 = 1;

    if((SW1 == 0)&& (SW2 == 0)) ........... //<<<<<< ตรงนี้อ่ะครับ ต้องการให้เงื่อนไขเป็นวัตถุผ่านเซนเซอร์ทั้งสองไปแล้ว โดยเป้นเงื่อนไขเซนเซอร์จับวัตถุไม่ได้พร้อมกันนานเกิน 15 วินาที เงื่อนไขจึงสมบูรณ์ ไม่รู้จะใส่คำสั่งอะไรอ่ะครับ ให้มันนับเวลาว่าเซนเซอร์จับวัตถุไม่ได้นานเกิน 15 วิ

    {

    relay3 = 0;
    delay(300); // Siren ON 2 วีนาที
    relay1 = 1;
    relay2 = 0; // Motor Right มอเตอร์หมุนขึ้น
    relay4 = 1;
    while(limit2); // Limit Switch Right ลิมิตสวิตตัวบนถูกชน

    relay1 = 1; // Motor OFF หยุดการทำงานทั้งหมด
    relay2 = 1; // Motor OFF
    relay3 = 1; // Siren OFF
    relay4 = 1;
    delay(10);
    }
    }

  4. #4
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    ช่วยหน่อยนะครับ ส่งพรุ่งนี้แล้ว ทำไม่ทันจริงๆ ต้องไปคำนวนส่วนอื่นๆ

  5. #5
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    ดันครับ

  6. #6
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    อธิบายการใช้งานเลยดีกว่า

    รางรถไฟมีทางข้าม ผมทำเครื่องกั้นทางเดินข้ามรถไฟ โดยเป็นแบบอัตโนมัติ คือเมื่อมีรถไฟมา เครื่องกั้นจะเปิดลง พอรถไฟไป เครื่องกั้นจะเปิดขึ้น

    ทีนี้จังหวะที่รถไฟมาแล้ว เครื่องกั้นปิดแล้ว ตอนแรกพวกผมทำการหน่วงเวลาเอาเองว่าเวลา 53 วินาที น่าจะเป็นเวลาที่รถไฟได้ผ่านไปแล้ว เครื่องกั้นจึงเปิดขึ้น

    ทีนี้ต้องการแก้ไขคือนอกจากจะให้เซนเซอร์ทั้งสองทั้งสองตัวรับรู้ว่ารถไฟมาได้แล้ว อยากให้มันทำหน้าที่รับรุ้อีกว่ารถไฟไปแล้ว แล้วไปส่งสัญญานให้เครื่องกั้นเปิด

    อย่างที่ทุกท่านทราบว่ารถไฟแต่ละขบวนยาวไม่เท่ากัน

    เหตุผลที่ใช้เซนเซอร์ 2 ตัวต่อรางเพราะว่าต้องการความแน่ชัดว่าสิ่งที่ผ่านเซนเซอร์เป็นรถไฟจริงๆ โดยเงื่อนไขคือวัตถุต้องผ่านเซนเซอร์ทั้งสอง ซึ่งเซนเซอร์ทั้งสองตั้งอยู่ริมรางรถไฟโดน******งกันสองเมตร

    การรับรู้ว่ารถไฟมาไม่ยาก แต่การรับรู้ว่ารถไฟไปแล้ว ผมมาคิดๆดู

    อยากจะเพิ่มเงื่อนไขว่า เมื่อเซนเซอร์จับรถไปได้ปั๊บ เครื่องกั้นทำการปิดทางเดิน ในระหว่างที่รถไฟโบกี้ต่อๆมาแล่นผ่านเซนเซอร์ มันก็จะมีบ้างที่เซนเซอร์จะมีวัตถุผ่านหรือไม่มีวัตถุผ่าน เนื่องจากบริเวณด้านล่างของรถไฟไม่ได้ทึบทั้งหมด

    เงื่อนไขที่จะทำให้แน่ใจก็คือหากรถไฟวิ่งผ่านไปจริงๆแล้ว เซนเซอร์ต้องจับวัตถุไม่ได้ หรือ OFF เกิน 15 วินาที

    คือคำสั่งนี้อ่ะครับ

    if((SW1 == 0)&& (SW2 == 0)) แต่ต้องเพิ่มเงื่อนไขเข้าไปอีกว่าเซนเซอร์ OFF นานเกิน 15 วินาที

  7. #7
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    งงว่าคำสั่งที่จะกำหนดว่าหลังจากรถไปผ่านเซนเซอร์ไปแล้ว เมื่อเซนเซอร์จับวัตถุไม่ได้นานเกิน 15 วินาที

    คือเงือนไข (SW1 == 0)&& (SW2 == 0) ต้องเกิดนานเกิน 15 วินาที จึงจะไปสั่งให้ตัวไม้กั้นหมุนขึ้น

    งงว่าถ้าสมมติใช้ While ((SW1 == 0)&& (SW2 == 0)) แล้วจะเพิ่มคำสั่งอะไรเพื่อให้มันรอจนกว่าจะ 15 นาทีถึงไปขั้นตอนต่อไปครับ

    พี่ช่วยเขียนโค๊ดให้หน่อยนะครับ งงมาก อะไรๆก็รุมเร้าผมไปหมด จะบ้าตายแล้ว

  8. #8
    OverclockZone Member palatoglossus's Avatar
    Join Date
    9 Jun 2008

    Default

    ดัน

  9. #9
    OverclockZone Member muumcrmy's Avatar
    Join Date
    26 Jan 2009
    Location
    เด็กดอนเมือง

    Default

    ดันให้ครับ

  10. #10
    OverclockZone Member gh_dark's Avatar
    Join Date
    30 Dec 2009

    Default

    ไม่รู้อ่า ช่วยดันนะ

  11. #11
    OverclockZone Member Migkie's Avatar
    Join Date
    23 Dec 2009

    Default

    ใช้ Timing ครับ สร้างฟังก์ชั่นขึ้นมาแล้วนับจาก Timing ใน IC เลย

  12. #12
    OverclockZone Member Migkie's Avatar
    Join Date
    23 Dec 2009

    Default

    นำเงื่อนไขไปใส่ไว้ใน Timeing Code เลย แล้วให้รีเทิร์นค่ามาก็น่าจะโอเคแล้วครับ

  13. #13
    OverclockZone Member POM_MJ's Avatar
    Join Date
    6 Apr 2008
    Location
    งามวงษ์วาน นนทบุรี

    Default

    int safe,timer;

    ...
    relay4 = 1;

    safe = 0; timer = 0;
    while (!safe) {
    if (SW1 == 0) && (SW2 == 0)) { //เซนเซอร์จับวัตถุไม่ได้พร้อมกัน
    delay(50); //0.3วินาที
    timer++;
    if (timer >= 50) safe = 1; //นานเกิน 15 วิ
    }
    else {
    timer = 0; //เริ่มจับเวลาใหม่ ถ้ายังมีเซนเซอร์ใดจับวัตถุได้
    }
    }

    relay3 = 0;
    ...


Bookmarks

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •