รบกวนดู Code ให้หน่อยครับ เกี่ยวกับการรับค่า

นี้ก็ด้วย

image

แก้ == เรียบร้อยแล้วครับ :pray:
มีคำถามครับ คือค่า k ต้องตั้งยังไงให้มันไม่ไปเข้า switch case เหรอครับ ผมหมายถึงตอนกดใช้ฟังก์ชั่น SW_back ให้กลับไปอ่านที่ Mode_Select_Complete ใหม่อีกรอบ

image

ตรงนี้เราไม่ตรงเขียนเต็มแบบนี้หรอ มันก็เข้าไปทำงานที่ void SW_case() {} เหมือนกันใช้ไหม

ผมว่าแก้ = เป็น == มันก็น่าจะเข้าไปทำได้แล้วนะ ตอนนี้ผลเป็นยังไง

ใช่ครับ ตอนนี้ผมอัพเดทมานิดหน่อย
ผมเพิ่มตัวนี้มา
image

มันเข้าไปอ่านMode_Select_Complete แล้วครับ แต่ มันก็ติดตรงนี้ เพราะ Mode_Enter = false แบบข้างบน
image
image
^^^^ ตามรูปนี้ คือมันไม่ได้ขึ้นให้ผมเลือกค่า K ได้เลยครับ

ปล. เพิ่ม == ก็เหมือนเดิมเลยครับ

เหมือนค่า K มันคงที่ครับ กด เปลี่ยนไม่ได้เลยครับ
อันนี้ฟังก์ชั่นที่เอาไว้เปลี่ยนค่า k ครับ แต่ตอนนี้มันไม่ได้เข้าไปทำฟังก์ชั่นนี้

void ModeUpDown(){
 
  if (Mode_SL) {
    Read_SW2 = digitalRead(SW2);
    if (Read_SW2 == LOW) {
      //delay(100);
      timex = millis();
      if (digitalRead(SW2) == LOW)
      k  = k + 1;  
      while (digitalRead(SW2) == LOW);
    }
  
    Read_SW3 = digitalRead(SW3);
    if (Read_SW3 == LOW) {
     // delay(100);
      timex = millis();
      if (digitalRead(SW3) == LOW)        
      k = k - 1;    
      while (digitalRead(SW3) == LOW);
    }
    lcd.setCursor(0, 1);
    lcd.print("Project : ");
    lcd.setCursor(10, 1);
    lcd.print(k);
   
  }
}

เครื่องหมายปีกกา ทำให้ชัดเจนหน่อยครับ ผมดูแล้วงง ๆ นะ

image

ใช้คำสั่ง autoFormat() ของ IDE ก็ได้มันจัดให้เอง

ขออภัยครับ ผมติดมาจากอาจารย์ผม แฮะๆ

Mod_Enter กำหนดค่าให้เงื่อนไขรึยังครับ มันไม่รู้ว่ามันจะทำงานเมื่อไหร่เลย ผมว่ามันไม่เข้าไปทำงานแน่ๆ

image

ให้เงื่อนไขแล้วกดไม่ได้ครับ

อันนี้ code ตัว Enter_Press ครับ

void Enter_Press() {

  Read_SW1 = digitalRead(SW1);
  if (Read_SW1 == LOW) {
    lcd.setCursor(0, 0);
    lcd.print("Press Button");
    lcd.setCursor(0, 1);
    lcd.print("Button >"); //<<<< มาติดตรงนี้ 
    Mode_Enter = true;
    delay(200);
    Mode_Clear = false;
  }
}

ตรงนั้นเราต้องการให้มันทำอะไรอธิบายหน่อย

void Mode_Select_Complete() {
  if (Mode_Enter) {  // 1)<<< เดิมตั้งค่าให้  bool Mode_Enter = false
    CountS();              // 6) <<<<ขึ้นมาทำ2ฟังก์ชั่นนี้ 
    ModeUpDown();   //  6) <<< ขึ้นมาทำ2ฟังก์ชั่นนี้ 
  } else {
    Enter_Press();  //2) <<<<เข้ามาทำฟังก์ชั่นนี้ก่อน
  }
  SW_case();

}

void Enter_Press() {

  Read_SW1 = digitalRead(SW1); //  <<< 3)  พอกดปุ่ม
  if (Read_SW1 == LOW) {
    lcd.setCursor(0, 0);
    lcd.print("Press Button");
    lcd.setCursor(0, 1);
    lcd.print("Button >");
    Mode_Enter = true; <<< //4) ให้ Mode_Enter เป็น true แล้วขึ้นไปทำ ^^^^ 
    delay(200);
    Mode_Clear = false;
  }
}

2 ฟังก์ชั่นข้างบนครับ

void ModeUpDown() {

  if (Mode_SL) {
    Read_SW2 = digitalRead(SW2);
    if (Read_SW2 == LOW) {
      //delay(100);
      timex = millis();
      if (digitalRead(SW2) == LOW)
        k  = k + 1;
      while (digitalRead(SW2) == LOW);
    }

    Read_SW3 = digitalRead(SW3);
    if (Read_SW3 == LOW) {
      // delay(100);
      timex = millis();
      if (digitalRead(SW3) == LOW)
        k = k - 1;
      while (digitalRead(SW3) == LOW);
    }
    lcd.setCursor(0, 1);
    lcd.print("Project : ");
    lcd.setCursor(10, 1);
    lcd.print(k);

  }
}

void CountS() {
  if (Mode_SL) {
    if (k >= 6) {
      k = 6;
      delay(1);
      

    }
    if (k <= 1) {
      k = 1;
      delay(1);
     
    }
  }
}

ในช่วงนี้ติดปัญหาอะไรรึป่าว

ถ้าตอนแรก ได้นะครับ แต่พอเอาเข้าไปใช้ในฟังก์ชั่น SW_Back เพื่อกดกลับ มันก็แสดงตามที่บอกเลยครับ ;w;

ติดอะไรอยู่ตรงนี้ครับ

ได้แล้วขอบคุณครับ !!

เพิ่ม Mode_SL = true ; เข้ามาครับ
image

เพราะตรงนี้มันเป็น
image

1 Likes

เยี่ยมเลยครับ ช่วยกันนึกว่าจะยาวแล้วคืนนี้ 555

Roller Coaster Fun GIF

1 Likes