อยากแปลงค่าให้มี จุดทศนิยม อะครับ

อยากให้มีจุดทศนิมแบบฝั่งซ้ายอะครับ เช่น 22.90 อะไรประมาณนี้ทำยังไงหรอครับ ผมลองแปลง int เป็น float แล้วมันเป็น 22.00 ตลอดเลย


void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
void loop() {
  int val = map(analogRead(A0), 1023, 0, -20, 110);
  Serial.print("Temp = ");
  Serial.println(val);

  // wait 2 milliseconds before the next loop for the analog-to-digital
  // converter to settle after the last reading:
  delay(1000);
}

อันนี้คืออะไร หรอครับ


มันเป็น 24.00 ผมอยากให้มีแบบ 24.85 24.90 อะไรประมาณนี้อะครับ

มันเป็นโปรแกรมดู Serial port ครับอันนี้ผมเอาให้ดูเฉยว่าอยากได้ประมาณแบบนี้

ลองดู ขั้นตอนตามนี้ครับ

1 Like

เอาง่ายๆ ครับ เพราะข้อมูลมีแค่นี้

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);

}
void loop() {
  //RT = analogRead(RTpin);
  //RT = (((RT * 5) / 1023) * 80) / 0.8;

  int val = map(analogRead(A0), 1023, 0, -20, 110);
  float val1 = val/0.8;
  Serial.print("Temp = ");
  Serial.println(val1);



  delay(2000);
}

1

คือถ้า map ออกมา ยังไงก็ได้จำนนเต็มครับ ยกเว้นว่าเราเอาค่ามี่ map มาได้ มาใส่สูตรหาอะไรสักอย่าง ให้ให้ตัวแปรรับค่าเป็น Float แค่นี้ค่าที่ออกมาก็เป็นจุดทศนิยม แล้วครับ :sweat_smile:

สมมติว่า เราใช้ com11 กับ arduino ide อยู่ แล้วโปรแกรมตัวนี้มันดึง com11 มาใช้พร้อมกันได้รึป่าวครับ

ไม่ได้ครับ

1 Like

มีวิธี แบบอ่านค่า analog ออกมาแล้ว แปลงเป็น % ความชื้น ได้หรือป่าวครับ

ปกติ เราใช้ library ของ sensor นั้นๆ ในการอ่านค่าออกมา นะครับ ซึ่ง มันก็เอาค่าที่อ่านได้ จาก analog ไปแปลง ออกมาให้เราอีกที

ผมเข้าใจว่า library มันแปลงออกมาเป็น ทศนิยม ให้อยู่แล้วนะครับ

คือ sensor ที่ผมเอามามันไม่มี lib อะครับ มันอ่าน analog มา

ลองอ่านบทความนี้ครับ น่าจะพอได้คำตอบอยู่บ้าง

https://www.modulemore.com/article/16/วิธีใช้งาน-ฟังก์ชัน-map-บน-arduino-และข้อจำกัด-รู้ไว้ไม่ปวดหัว

void setup() {
  Serial.begin(115200);
}
double mapf(double val, double in_min, double in_max, double out_min, double out_max) {
    return (val - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void loop() {
  int val = map(analogRead(A7), 0, 1023, 0, 1000);
  float valf = val/1000.0;

  float newval = mapf(valf, 0.0, 1.0, 0.0, 100.0);
  Serial.println(newval);
  
  delay(100);
}

เท่าที่ผมลองอ่านดู map ด่านหลังนี้คืออะไรหรอครับ 0 - 1000 มันควรใส่ 100 ไม่ใช้หรอครับ

int val = map(analogRead(A7), 0, 1023, 0, 1000); //รับค่ามาจาก A7 ช่วง 0 - 1023 แปลงให้อยู่ในช่วง Rang ใหม่ 0 - 1000

float valf = val/1000.0; //แปลงจาก 0-1000 เป็น 0-1.0 ด้วยการหาร 1000 เก็บไว้ในตัวแปร float

จากนั้น นำค่า ที่ได้ อยู่ใน valf มาปรับ Rang ใหม่ให้มีจุดทศนิยม โดยใช้คำสั่งข้างล่าง

float newval = mapf(valf, 0.0, 1.0, 0.0, 100.0);
Serial.println(newval);

งงไหม

2 Likes

พอเข้าใจแล้วครับ เดียวผมเอาไปทดสอบแล้วจะมาบอกครับผม

วิธีนี้น่าสนใจมากครับ รอติดตามดูว่า output จะได้ตามที่ต้องการไหม

ใช่ครับสุดท้ายก็ต้องสร้างเงื่อนไข


ผลออกมาตามนี้ครับผม