สอบถามการใช้คำสั่งเช็คค่า ครับ

สอบถามการใช้คำสั่งเช็คค่า เช่น ส่งค่าเหมือนกัน 5 ครั้ง แล้วสั่ง Output ขอแนวทางหน่อยครับ

int ledPin = D0;
int analogPin = A0; //ประกาศตัวแปร ให้ analogPin แทนขา analog ขาA0
int val = 0;
void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
  digitalWrite(D0, LOW);
  Serial.begin(115200);
}

void loop() {
  val = analogRead(analogPin);  //อ่านค่าสัญญาณ analog ขาA0 
  Serial.print("val = "); // พิมพ์ข้อมความส่งเข้าคอมพิวเตอร์ "val = "
  Serial.println(val); // พิมพ์ค่าของตัวแปร val

  if (val == 10){ // ค่า 10 ติดต่อกัน 5 ครั้ง แจ้งเตือน
    
    digitalWrite(ledPin, HIGH); // สั่งให้ LED ดับ
  }
 
  else {
    digitalWrite(ledPin, LOW); // สั่งให้ LED ติดสว่าง
  }
  delay(1000);
}
1 Likes

หมายถึงยังไงครับ ส่งค่าอะไรมาก็ตาม 10 ครั้ง งี้หรอ

กำหนดค่า 10 ในการแจ้งเตือน แต่ต้องได้ค่า 10 ส่งมาติดกัน 5 ครับ ค่อยแจ้งเตือน แก้ไขยังไงได้บ้างครับ

ถ้างี้เรียกติดกันป่าว นับยังไง

val = 10
val =  0
val = 10
val = 10
val = 10
val = 10
val = 10
val = 10
val = 10
val = 10
val = 10

ใช่ครับ ค่า 10 ต่อเนื่องกัน 5 ครั้ง แล้วแจ้งเตือน ถ้าไม่ต่อเนื่องกัน ไม่แจ้งครับ จะแก้ส่วนไหนของ code ได้บ้างครับ

int ledPin = D0;
int analogPin = A0; //ประกาศตัวแปร ให้ analogPin แทนขา analog ขาA0
int val = 0;
void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
  digitalWrite(D0, LOW);
  Serial.begin(115200);
}

int Checkval = 0;
bool _val = false;
void loop() {
  val = analogRead(analogPin);  //อ่านค่าสัญญาณ analog ขาA0 
  Serial.print("val = "); // พิมพ์ข้อมความส่งเข้าคอมพิวเตอร์ "val = "
  Serial.println(val); // พิมพ์ค่าของตัวแปร val

  if(val == 10){
    Checkval++;

  }else{
      Checkval = 0;
  }

  if (_val == true){ // ค่า 10 ติดต่อกัน 5 ครั้ง แจ้งเตือน
    
    digitalWrite(ledPin, HIGH); // สั่งให้ LED ดับ
    _val = false;
  }
 
  else {
    digitalWrite(ledPin, LOW); // สั่งให้ LED ติดสว่าง
  }
  delay(1000);
}

ขอบคุณมากครับ เดี๋ยวลองดูนะครับ

ลอง code ที่ส่งมาแล้วครับ ต้องใส่อะไรเพิ่มตรงไหนครับ ไม่แจ้งเตือนที่ค่า 10 ส่งมาต่อเนื่อง ครับ

ลอง code แล้ว ไม่มีการแจ้งเตือนเลยครับ ไม่แน่ใจผิดตรงไหนครับ

น่าจะติดตรง ค่าของ val มันจะเปลี่ยนไปรึป่าว เพราะว่า ถ้าไม่ป้อนค่ามันอาจจะเป็นค่าเปล่าๆ ซึ่งไม่เท่ากับ 10

ดังดันลอง ดัก Serial ออกมาดูหน่อยว่าแต่ละค่ามันเป็นยังไว

รับค่ามาปกติครับ ได้ค่า 10 ก็ไม่แจ้งเตือนครับ ดูจาก serial จะลองแก้วิธีไหนดีครับ

ใช้โค้ตนี้แล้วแคป Serial มาให้ผมดูด้วยครับ

อ่อรู้สึกว่าผมจะลืมใสไปคำสั่งนึงนะ

int ledPin = D0;
int analogPin = A0; //ประกาศตัวแปร ให้ analogPin แทนขา analog ขาA0
int val = 0;
void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
  digitalWrite(D0, LOW);
  Serial.begin(115200);
}

int Checkval = 0;
bool _val = false;
void loop() {
  val = analogRead(analogPin);  //อ่านค่าสัญญาณ analog ขาA0 
  Serial.print("val = "); // พิมพ์ข้อมความส่งเข้าคอมพิวเตอร์ "val = "
  Serial.println(val); // พิมพ์ค่าของตัวแปร val

  if(val == 10){
    Checkval++;
     if(Checkval == 10){
     _val = true; //สั่งให้เข้าไปแจ้งเตือน
}

  }else{
      Checkval = 0;
  }

  if (_val == true){ // ค่า 10 ติดต่อกัน 5 ครั้ง แจ้งเตือน
    
    digitalWrite(ledPin, HIGH); // สั่งให้ LED ดับ
    _val = false;
  }
 
  else {
    digitalWrite(ledPin, LOW); // สั่งให้ LED ติดสว่าง
  }
  delay(1000);
}

เดี๋ยวลองใหม่ครับ ขอบคุณมากนะครับ

ตอนนี้ผมลองแจ้งเตือนแล้วครับ ขอสอบถามอีกนิดครับ ถ้าต้องการให้แจ้งเตือนไปตลอดจนกว่าค่าจะเปลี่ยนค่อยหยุดแจ้ง จะปรับ code ยังไงครับ