overclockzonefanpage  overclockzoneth  TV  
Page 1 of 2 12 LastLast
Results 1 to 20 of 30
  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 วินาที เงื่อนไขจึงสมบูรณ์

    {

    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 zicmaxx's Avatar
    Join Date
    21 Mar 2007

    Default

    มาบอกแบบนี้ แก้ให้ก็ลำบาก

    คุณบอกมาเลย ว่าคุณต้องการอะไรจากระบบ ระบบมันทำงานยังไง แล้วค่อยแปลงเป็น algorithm

    ไม่ใช่ เอา code มาให้ดูแบบนี้ มันไม่ใช่วิธีแก้ปัญหาที่ถูกต้องครับ

  6. #6
    nikjaza's Avatar
    Join Date
    6 Mar 2009
    Location
    Bangkok, Ladprao 48 เคยอยู่ นครสวรรค์ , ลพบุรี

    Default

    ผมยังไม่ได้เรียนเลยภาษา C ปีหน้าจะเรียนวิทยาการคอมครับ ยังไม่เป็นอะไรหลายอย่างเลยครับ ชอบ Hardware ครับ

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

    Default

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

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

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

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

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

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

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

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

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

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

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

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

    Default

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

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

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

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

  9. #9

    Default

    ก็อยากจะช่วยนะครับ แต่อ่อนภาษาซี - -*

  10. #10
    OverclockZone Member zicmaxx's Avatar
    Join Date
    21 Mar 2007

    Default

    อธิบายง่ายๆคือ คุณต้องการเช็คว่ารถไฟ มาจริงๆ หรือไม่ แล้ว รถไฟไปแล้วจริงๆ หรือไม่
    ในระหว่างนั้นก็ กั้นทาง เปิดสัญญาณไฟใช่รึเปล่าครับ

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

    Default

    Quote Originally Posted by zicmaxx View Post
    อธิบายง่ายๆคือ คุณต้องการเช็คว่ารถไฟ มาจริงๆ หรือไม่ แล้ว รถไฟไปแล้วจริงๆ หรือไม่
    ในระหว่างนั้นก็ กั้นทาง เปิดสัญญาณไฟใช่รึเปล่าครับ
    ใช่ครับ

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

    Default

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

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

    Default

    พี่อย่าทิ้งผมนะครับ ฮือๆ

  14. #14
    OverclockZone Member zicmaxx's Avatar
    Join Date
    21 Mar 2007

    Default

    ใจเย้นครับ กำลังเขียนให้อยู่

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

    Default

    ขอบคุณครับพี่

  16. #16

    Default

    เขืยนแล้วช่วยเอาโค๊ตมาลงที่บอร์ดให้หน่อยได้ไหมครับ อยากเก็บไว้ศึกษาอะครับ

  17. #17
    OverclockZone Member zicmaxx's Avatar
    Join Date
    21 Mar 2007

    Default

    ถามอีกข้อ ที่จะไปเขียนเนี่ย ละเอาลงไมโครคอนโทรลเลอร์ใช่มะ

    มันเรียกเวลาอ้างอิง หน่วย มิลลิวินาทีได้ไหม

    เพราะการใช้ Delay มันจะมีข้อเสียมาก การทำงานส่วนอื่นมันต้องรอค่า Delay

    แต่ถ้า สามารถเรียก เวลาอ้างอิงได้ จะสามารถทำงานแบบ realtime ได้ดีกว่า

    เช่น Gettickcount() จะเอามานับเวลา

  18. #18

    Default

    Quote Originally Posted by zicmaxx View Post
    ถามอีกข้อ ที่จะไปเขียนเนี่ย ละเอาลงไมโครคอนโทรลเลอร์ใช่มะ

    มันเรียกเวลาอ้างอิง หน่วย มิลลิวินาทีได้ไหม

    เพราะการใช้ Delay มันจะมีข้อเสียมาก การทำงานส่วนอื่นมันต้องรอค่า Delay

    แต่ถ้า สามารถเรียก เวลาอ้างอิงได้ จะสามารถทำงานแบบ realtime ได้ดีกว่า

    เช่น Gettickcount() จะเอามานับเวลา
    พี่ครับ อยากเรืยนภาษา C ต้องเรี่มยังไงเหรอครับ? ผมรู้แค่ลอยๆอะ แบบไม่ปะติดปะต่อเลย - -* ถ้าพี่มีเว็ปดีๆก็แนะนำผมหน่อยนะครับ

  19. #19
    OverclockZone Member zicmaxx's Avatar
    Join Date
    21 Mar 2007

    Default

    เนื่องจากว่า มันมีความเกี่ยวข้องกับ Hardware ซึ่งคุณต้องเลือกชนิดของ Sensor
    ว่าจะเป็นแบบ Trigger หรือ Continue Signal

    ในกรณีนี้ผมจะออกแบบลักษณะของ Continue Signal นะ
    แล้วการทำงานของโปรแกรม จะอยู่ใน While loop

    Code:
    SWflag = false;
    While(true)
    {
            //ตรวจสอบด้วย Continue Signal
    	if(SW1 == true && SW2 == true) //define is train
    	{
    		SWflag = true;		
    	}
    	else
    	{
    		delay(15000)
    		if(SW1 == false && SW2 == false)
    		{
    			SWflag = false;	
    		}
    	}
    
    
    	// การทำงานของส่วนนี้ อุปกรณ์จะต้องทำงานแบบ Trigger Signal โดยไม่ต้องสนเวลาในการดีเลย์ตรวจสอบว่ารถไฟไปแล้วหรือยัง
    	if(SWflag)
    	{
    		//do enything while of train
    	
    	}
    	else
    	{
    		//do enything end of train
    	
    	}
    
    }
    ข้างบนเป็นการเขียนแบบง่ายๆ และแบ่งแยกส่วนของการตรวจจับเวลากับ ส่วนของการทำงานชัดเจน
    แต่มันมีข้อเสีย ที่การทำงานทุกรอบจะต้องมารอเวลา 15 วินาทีเพื่อตรวจสอบ ว่ารถไฟไปแล้วหรือไม่

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

    Default

    Quote Originally Posted by SK~Dex[D] View Post
    พี่ครับ อยากเรืยนภาษา C ต้องเรี่มยังไงเหรอครับ? ผมรู้แค่ลอยๆอะ แบบไม่ปะติดปะต่อเลย - -* ถ้าพี่มีเว็ปดีๆก็แนะนำผมหน่อยนะครับ
    ขอตอบแทน มีคอม 1 เครื่อง ไปซื้อหนังสือ ภาษาซีเบื้องต้น ของประภาภร ช่างไม้ เล่มสีขาวๆอ่ะ ปกเขียนว่า C Programmer มั้ง

    ลองอ่านแต่แรก แล้วในนั้นจะมีโจทย์ให้ลองทำ ลองทำดูในคอมเลย เขียนเสร็จลองรันดู

Page 1 of 2 12 LastLast

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
  •