lnwshop logo
  • ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

ึดึงเวลามาคำนวน

Mos 3 เดือนที่ผ่านมา

ผมอยากทำตัวจับเวลาแล้ว ดึงเวลามา คำนวน ทำยังไงอะคับ ช่วยแนะนำผมหน่อยคับ

โค้ดนี้แสดงเวลาได้ แต่ เวลาเอาไปคำนวน คำตอยที่ได้วันยังไม่ใช่อะคับ

ก็คือ เมือเรารันโปรแกรมแต่ยังไม่กดปุ่มจับเวลา เวลามันก็เดินไปเอง คือมันเอาเวลาที่เดินไปก่อนนั้นมาคำนวนอะคับ
,เวลากดปุ่มเริ่มจับเวลาเเสดงปกตินะคับ,

#include <Keypad.h> 

#include <LiquidCrystal.h> 

 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const byte numRows= 4; 

const byte numCols= 4;

unsigned long previousTime = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const byte numRows= 4; 

const byte numCols= 4;

unsigned long previousTime = 0;

char keymap[numRows][numCols]=

{

{'1', '2', '3', 'A'},

{'4', '5', '6', 'B'},

{'7', '8', '9', ' '},

{' ', '0', ' ', ' '}

};

 

byte rowPins[numRows] = {A3 ,A2 ,A1 ,A0}; //connect to row pinouts 

byte colPins[numCols] = {9, 8, 7, 6}; //connect to column pinouts

Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

 

void setup()

{

lcd.begin(16,2);

}

void loop()

{

  unsigned long showTime = millis();

char key = myKeypad.getKey(); // ตัวแปร key เป็นตัวแปรแบบ char รับค่าการกดปุ่ม

if (key != NO_KEY && key != 'A' && key != 'B' && key != ' ') //เมื่อกดปุ่ม (เฉพาะเลข 0 - 9) ค่า setTime จะเท่ากับปุ่มที่กด

{

//setTime = (key ); //นำค่า key ที่ได้มาลบกับ 48 เนื่องจากเป็นรหัส ascii48 ที่เลข 0 จะเริ่มที่ 48

Serial.print(key);

}

if(key == 'A') //เมื่อกดปุ่ม A ตัวแปร start จะเท่ากับ 1 และค่า previousTime สุดท้ายจะเท่ากับ showTime ณ ตอนนั้น

{

start = 1;

previousTime = showTime;

Serial.print("Start...");

}

if(key == 'B') //เมื่อกดปุ่ม B ทุกอย่างจะถูกหยุด 

{

int ans;  

start = 0;

//buzzer = 0;

previousTime = 0;

ans=(((showTime - previousTime) / 1000)/2);

lcd.setCursor(0,1);

//lcd.print("Stop!...\n");

lcd.print(ans);

}

if(start == 1) //เมื่อ start = 1 จะเป็นการวน loop จับเวลาไปเรื่อยๆ จนกว่าจะครบกำหนด

{

lcd.setCursor(0,0);

lcd.print((showTime - previousTime) / 1000);

}

}

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน
เจ้าของร้าน
3 เดือนที่ผ่านมา

ลองแกะโคดทีละส่วน ผมว่าน่าจะยังมีบางจุดที่โคดยังไม่ถุก ที่แนะนำคือ เอา unsigned long showTime = millis(); ไปไว้ข้างนอก ใน loop เรียกใช้ showTime = millis(); ตัวแปรจะไม่ถูกสร้างใหม่ทุกครั้งที่ทำงานครับ

QUOTE 
ความคิดเห็นที่ #2
Mos 3 เดือนที่ผ่านมา

showTime มันจับเวลาไปก่อนอะคับ

QUOTE 
ความคิดเห็นที่ #3
Mos 3 เดือนที่ผ่านมา

 

คือให้ผมเอา unsigned long showTime = millis(); ไปไว้ข้างนอก loop 


และเรียกใช้ showTime = millis(); ในloop แบบนี้ใช้ปะครับ

QUOTE 
ความคิดเห็นที่ #4
Mos 3 เดือนที่ผ่านมา

ขอบคุณมากครับ ได้ละครับบ 

QUOTE 
ความคิดเห็นที่ #5
เจ้าของร้าน
เจ้าของร้าน
3 เดือนที่ผ่านมา

ยินดีครับ : )

QUOTE 
ความคิดเห็นที่ #6
Mos 3 เดือนที่ผ่านมา

ผมอยากให้ตัวจับเวลานี้ มีเสี้ยววินาทีด้วยอะครับ มันสามารทำได้ไหมครับ เพื่อจะใด้เอามาคำนวนให้มันแม่นยำขึ้นอะครับ

QUOTE 
ความคิดเห็นที่ #7
เจ้าของร้าน
เจ้าของร้าน
3 เดือนที่ผ่านมา

คำสั่ง millis() ให้ค่า 1 ใน 1000 วินาทีแล้วครับ

 

millis()

Description

Returns the number of milliseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 50 days.

 

QUOTE 
ความคิดเห็นที่ #8
Mos 3 เดือนที่ผ่านมา

อยากให้มี เสี้ยววินาทีด้วย ต้องทำยังไงอะครับ ต้องการให้ค่ามันเเม่นยำขึ้นนะครับ

QUOTE 
ความคิดเห็นที่ #9
เจ้าของร้าน
เจ้าของร้าน
3 เดือนที่ผ่านมา

ลองแกะโคดดูก่อนนะว่าคำสั่งนี้ใช้ทำอะไร ans=(((showTime - previousTime) / 1000)/2);

QUOTE 
ความคิดเห็นที่ #10
Mos 3 เดือนที่ผ่านมา

ผมดึงเวลาที่นับได้ มา หาร 2 อะคับ ในส่วนนี้ผมลองดึงเวลาคำนวนดูอะครับเฉยๆๆ ว่าได้หรือป่าว

ผลที่ได้คือสามารถคำนวนได้ แต่ที่ผมอยากจะได้เพิ่มคือ อยากให้สามารถนับเสี้ยววินาทีได้ด้วยอะคับ

1
2
ถัดไป ›
แสดงความคิดเห็นที่ 1-10 จากทั้งหมด 11 ความคิดเห็น
ชื่อ
อีเมล
ข้อความ
  • ตอบกระทู้

หมวดหมู่สินค้า

สมาชิก Arduino All

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

Arduino All ขายดี

รหัสสินค้า A015
300.00 บาท
  • สั่งซื้อ
รหัสสินค้า A233
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A115
10.00 บาท
สินค้าหมด
รหัสสินค้า A238
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A237
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A014
90.00 บาท
  • สั่งซื้อ
รหัสสินค้า A225
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A097
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A474
7.00 บาท
สินค้าหมด
Go to Top