เสียงอ่านค่าตัวเลข 0.0 - 1999.9 ตามค่าตัวเลข ที่ได้รับมา

สำหรับใครที่กำลังมองหา โปรเจคแบบนี้อยู่ วันนี้ผมจะเอามาแชร์ ให้ทดลองใช้งานกันนะครับ ถ้าใครเข้าใจหลักการแล้วก็ สามารถ ปรับแต่ง code ได้เลยครับ ส่วนการประยุกต์ ใช้งานคือ ใน code ผม สุ่มตัวเลขขึ้นมาให้มันอ่าน ดังนั้นจึงเป็นไปได้ว่า มันควรที่จะสามารถรับ ค่าจากอุปกรณ์ Sensor อะไรสักอย่าง เข้ามาแล้วสามารถอ่านออกเสียงได้

วิธีการเตรียม

  1. Micro SD Card format เป็น FAT32
  2. Copy file เสียง mp3 ที่ใช้งานทั้งหมดเข้าไปใน Micro SD Card (ไม่ต้องสร้างโฟลเดอร์ อะไรทั้งสิ้น)
    (เป็นไฟล์เสียงที่ผมอัด และตัดเอง ไม่มีลิขสิทธิ์อะไรนะครับ แค่เอาไว้ลอง)

Download sound :
https://drive.google.com/file/d/1V74LMCa3QxAoupDUSft6SS0FvrZijxqV/view?usp=sharing
https://drive.google.com/file/d/1ScC4ZfhUwSkK7dMxYUZfnzR0qyG08za1/view?usp=sharing

  1. เราจะรู้ได้อย่างไรว่า เมื่อ DFPlayerMini เล่นแล้ว จะเล่นไฟล์ ไหนเป็นลำดับแรก ตรงนี้สำคัญนะครับ ให้ใช้ไฟล์ จาก Library ของเขา ชื่อว่า Arduino\libraries\DFRobotDFPlayerMini-master\examples\GetStarted มาทดสอบ มันจะบอกเราว่า มันจะเล่นไฟล์ไหนเป็นลำดับแรก ให้เรามาร์กลำดับไว้ แล้วก็จัดลำดับ เรียงตามที่มันเล่นได้เลยครับ ก็เท่ากับว่าเราจะรู้ ลำดับ รายการที่มันเล่นแล้ว เอาไปใส่ใน code มันจะได้อ่านได้ตรงตามที่เราต้องการและถูกต้อง

Download Library :
https://drive.google.com/file/d/1wqWETr6wtwWMj2Q-uC7ClNjxvnImQmxK/view?usp=sharing

  1. จากนั้น Upload code เข้าไป มันก็จะพูดแล้วครับ

Download Code :
https://drive.google.com/file/d/1wqWETr6wtwWMj2Q-uC7ClNjxvnImQmxK/view?usp=sharing

ผลลัพธ์ การทำงานครับ

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(2, 3);
//สร้าง Port การติดต่อระหว่าง DFPlayerMini ติดต่อกับ Arduino NaNo ที่ RX = 2, TX = 3
DFRobotDFPlayerMini myDFPlayer; //โหลด Library  DFRobotDFPlayerMini-master



float V; // ตั้งค่า V เป็นจำนวนเต็ม+จุดทศนิยม โดยให้รับค่าจากการสุ่มตัวเลขเข้ามาเก็บไว้
String digitset1;// เป็นตัวแปร String เก็บค่า V จาก Float แปลงเป็น String

unsigned long delaytime_1 = 3000; //ระยะการหน่วงเวลา
unsigned long last_time = 0; //ประกาศตัวแปรเป็น global เพื่อเก็บค่าไว้ไม่ให้ reset จากการวน loop


int x = 600; // ปรับระยะเวลาการหน่วงเสียง หลักหน่วย 0-9
int x1 = 1100;// ปรับระยะการเวลาหน่วงเสียง ตั้งแต่ 10-99 100 200...900..1000


int set1;
int set3_1;
int set3_2;
int set3_3;
int set3_4;


String set2;
String set3;
String set3_5;
String set3_6;

int Int1_Data1  ;
int Int1_Data2  ;

String value2_1;
int value2_2;
int value2_6;
int countstring;









void setup()

{

  mySoftwareSerial.begin(9600);
  Serial.begin(115200);


  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  //ชุดตรวจสอบความพร้อมของ DFPlayerMini ว่าพร้อมทำงานหรือไม่
  //ใช้ softwareSerial เพื่อติดต่อกับไฟล์ .mp3 ที่อยู่ในใน SD Card
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    //ถ้าติดต่อไม่ได้ จะมีคำแนะนำตามนี้แสดงใน Serial monitor แล้ววนค่า
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {//ถ้าติดต่อได้
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(25);  //ตั้งระดับความดังของเสียง 0-30
  myDFPlayer.EQ(DFPLAYER_EQ_BASS);
  //ตั้งรูปแบบ EQ ของเสียง ดูใน ไฟล์ตัวอย่างของ Libraries DFRobotDFPlayerMini-master

  //ให้ Value รับค่า การอ่านจำนวนไฟล์ ใน SD Card และแสดงจำนวนไฟล์ทั้งหมด
  int value;
  value = myDFPlayer.readFileCounts();
  Serial.println("");
  Serial.print("พบไฟล์ใน SD CARD = ");
  Serial.print(value);
  Serial.println("  ไฟล์");


}


void loop() {



  if (millis() - last_time > delaytime_1) {
    last_time = millis();
    //บันทึกเวลาปัจจุบันไว้เพื่อรอจนกว่า millis() จะมากกว่าตัวมันเท่า delaytime_1

    V = random(1, 2715) / 1.36;  //ให้ V ที่เป็น float รับค่า จากการสุ่มเข้ามา
    //V = random(1, 10) / 2.34;
    //V = 105.4;
    //V = 1054.4;
    //V = 0.6;
    digitset1 = String(V, 1); // เป็นตัวแปร String เก็บค่า V จาก Float แปลงเป็น String + จุดทศนิยม 1 ตำแหน่ง



    //--------------------------------------------------------------------------
    for (int i = 0; i < digitset1.length(); i++) {//นับความยาวของ digitset1.length ว่ารับมากี่ตัว แล้ว for วน อ่านค่าแต่ละตัวออกมาว่ามีอะไรบ้าง

      if (digitset1.substring(i, i + 1) == ".") {//ถ้าในขณะที่วนเลื่อนตำแหน่งไปทางขวาเรื่อยๆ แล้วเจอ String ที่เป็น .(จุด)
        //ให้ int set1 รับค่าจาก digitset1.substring
        //โดยแสดงค่า จากตำแหน่งที่ 0 (ซ้ายสุด) ไปสุดที่ตำแหน่ง i ก่อนที่จะเจอ .(จุด)
        //เช่น digitset1 = 1235.2   set1= 1235
        set1 = digitset1.substring(0, i).toInt();
        //ให้ String set2 รับค่าจาก int  set1 แปลงเป็น String
        set2 = String(set1);
        //แล้วให้ int countstring นับความยาวของ set2.length ว่ารับมากี่ตัว
        countstring =  set2.length();

        //ในส่วนของตัวเลขหลังจุด  (.x)  ให้ String value2_1 รับค่า จาก i + 1 มาว่าเป็นค่าอะไรบ้าง
        value2_1 = digitset1.substring( i + 1);
        //cแล้วให้ int value2_2 รับค่าการแปลงของ value2_1 จาก String เป็น Int
        value2_2 = value2_1.toInt();

        //        Serial.print("value2_1 = ");
        //        Serial.println(value2_1);
        Serial.print("จำนวนหลัก = ");
        Serial.println(countstring);
        break;

      }//if
    }//for


    //------------กรณีรับค่ามาเป็นหลักร้อย (3 หลัก) เช่น 536.2---------------------------------------------------------
    if (countstring == 3) {// ถ้า int countstring นับความยาวของ set2.length ได้ = 3 หลัก

      //วนอ่านค่า โดย เอาเฉพาะหลักที่ 1 ที่อยู่ทางซ้ายมือสุดมาเท่านั้น
      //เช่น set2 รับค่าได้มา = 3 หลัก  คือ 536
      //set2.length() - (set2.length() - 1
      //จะได้  3       - (3-1)  จะได้ = 1 ดังนั้น i จะวนแค่ 1 ครั้งแล้วหยุด
      //set2 จะได้ = 5 จะแสดงค่าหลักที่ 1 ซ้ายมือสุดมาเท่านั้น
      for (int i = 0; i < set2.length() - (set2.length() - 1); i++) {

        //Serial.println(set2[i]);

        //ให้ String set3 รับค่า String set2 1 หลัก + 0 + 0
        //จากตัวอย่าง set2 จะได้ = 500
        set3 = set2[i] + String(0) + String(0);
        //ให้ int set3_1 รับค่าการแปลงจาก String set3 เป็น int
        //จากตัวอย่าง set3 จะได้ = 500
        set3_1 = set3.toInt();
        //ให้ int set3_2 รับค่าการแปลงจาก String set2 เป็น int
        //จากตัวอย่าง set2 จะได้ = 536
        set3_2 = set2.toInt();
        // int   Int1_Data1 แสดงค่าหลักที่เหลืออีก 2 หลักก่อนที่จะเจอ .(จุด)
        //จะได้  536 - 500 = 36
        //Int1_Data1 = 36
        Int1_Data1 = set3_2 - set3_1;

        //        Serial.print("V = ");
        Serial.println(V, 1);
        //        Serial.print("set3 = ");
        //        Serial.println(set3);
        //        Serial.print("Int1_Data1 = ");
        //        Serial.println(Int1_Data1);

        //จากตัวอย่าง สรุปว่า รับมา 536 แยกเป็น (ที่ต้องแปลงเป็นคังเลข เพราะจะนำไปใช้กับ Switch case)
        //set3_1 = 500      //ส่วนของหลักร้อย
        //Int1_Data1 = 36   //ส่วนของหลักสิบ

        //ส่วนของหลักร้อย
        if (set3_1 >= 100 and set3_1 <= 900) {//ถ้าค่า int set3_1 อยู่ในช่วงระหว่าง 100 - 900

          if (set3_1 == 100 || set3_1 == 200 || set3_1 == 300 ||
              set3_1 == 400 || set3_1 == 500 || set3_1 == 600 ||
              set3_1 == 700 || set3_1 == 800 || set3_1 == 900 ) {
            Tens_digit11();//เข้าฟังก์ชั่น
          }
        }

        //ส่วนของหลักสิบ
        if (Int1_Data1 > 0 and Int1_Data1 <= 99   ) {//ถ้าค่า Int1_Data1 อยู่ในช่วงระหว่าง 1 - 99

          if (Int1_Data1 >= 0 and Int1_Data1 <= 9 ) {
            Tens_digit1();
          }
          if (Int1_Data1 >= 10 and Int1_Data1 <= 19 ) {
            Tens_digit2();
          }
          if (Int1_Data1 >= 20 and Int1_Data1 <= 29 ) {
            Tens_digit3();
          }
          if (Int1_Data1 >= 30 and Int1_Data1 <= 39 ) {
            Tens_digit4();
          }
          if (Int1_Data1 >= 40 and Int1_Data1 <= 49 ) {
            Tens_digit5();
          }
          if (Int1_Data1 >= 50 and Int1_Data1 <= 59 ) {
            Tens_digit6();
          }
          if (Int1_Data1 >= 60 and Int1_Data1 <= 69 ) {
            Tens_digit7();
          }
          if (Int1_Data1 >= 70 and Int1_Data1 <= 79 ) {
            Tens_digit8();
          }
          if (Int1_Data1 >= 80 and Int1_Data1 <= 89 ) {
            Tens_digit9();
          }
          if (Int1_Data1 >= 90 and Int1_Data1 <= 99 ) {
            Tens_digit10();
          }
        }





        //ส่วนของหลักทศนิยม 1 ตำแหน่ง
        if (value2_2 == 0 || value2_2 == 1 || value2_2 == 2 ||
            value2_2 == 3 || value2_2 == 4 || value2_2 == 5 ||
            value2_2 == 6 || value2_2 == 7 || value2_2 == 8 ||
            value2_2 == 9 ) {

          Tens_digit12();
        }

      }//for (int i = 0; i < set2.length() - (set2.length() - 1); i++)
    }//if (countstring == 3)

    //--------------------------------------------------------------------------------


    //------------กรณีรับค่ามาเป็นหลักสิบ (2 หลัก) เช่น 36.2-------------------------------------------
    if (countstring == 2) { //ถ้า int countstring มีค่าอยู่ในช่วงระหว่าง =0 ถึง 2
      //ให้ String set3 มีค่า= int set1
      set3 = set1 ;
      //ให้ int set3_1 มีค่า= การแปลง String set3 เป็นตัวเลข
      set3_1 = set3.toInt();
      //ให้  int Int1_Data1 มีค่า= int set3_1 เป็นตัวเลข
      Int1_Data1 =  set3_1;

      //      Serial.print("V = ");
      Serial.println(V, 1);
      //      Serial.print("set3 = ");
      //      Serial.println(set3);
      //      Serial.print("Int1_Data1 = ");
      //      Serial.println(Int1_Data1);


      //ส่วนของหลักสิบ
      if (set3_1 >= 100 and set3_1 <= 900   ) {//ถ้าค่า Int1_Data1 อยู่ในช่วงระหว่าง 100 - 900

        if (set3_1 == 100 || set3_1 == 200 || set3_1 == 300 ||
            set3_1 == 400 || set3_1 == 500 || set3_1 == 600 ||
            set3_1 == 700 || set3_1 == 800 || set3_1 == 900 ) {
          Tens_digit11();
        }
      }
      //ถ้าค่า Int1_Data1 อยู่ในช่วงระหว่าง 1 - 99
      if (Int1_Data1 > 0 and Int1_Data1 <= 99   ) {

        if (Int1_Data1 >= 0 and Int1_Data1 <= 9 ) {
          Tens_digit1();
        }
        if (Int1_Data1 >= 10 and Int1_Data1 <= 19 ) {
          Tens_digit2();
        }

        if (Int1_Data1 >= 20 and Int1_Data1 <= 29 ) {
          Tens_digit3();
        }
        if (Int1_Data1 >= 30 and Int1_Data1 <= 39 ) {
          Tens_digit4();
        }
        if (Int1_Data1 >= 40 and Int1_Data1 <= 49 ) {
          Tens_digit5();
        }
        if (Int1_Data1 >= 50 and Int1_Data1 <= 59 ) {
          Tens_digit6();
        }
        if (Int1_Data1 >= 60 and Int1_Data1 <= 69 ) {
          Tens_digit7();
        }
        if (Int1_Data1 >= 70 and Int1_Data1 <= 79 ) {
          Tens_digit8();
        }
        if (Int1_Data1 >= 80 and Int1_Data1 <= 89 ) {
          Tens_digit9();
        }
        if (Int1_Data1 >= 90 and Int1_Data1 <= 99 ) {
          Tens_digit10();
        }
      }

      //ส่วนของหลักทศนิยม 1 ตำแหน่ง
      if (value2_2 == 0 || value2_2 == 1 || value2_2 == 2 ||
          value2_2 == 3 || value2_2 == 4 || value2_2 == 5 ||
          value2_2 == 6 || value2_2 == 7 || value2_2 == 8 ||
          value2_2 == 9 ) {

        Tens_digit12();
      }
    }
    //--------------------------------------------------------------------------------
    //------------กรณีรับค่ามาเป็นหลักร้อย (4 หลัก) เช่น 1536.2---------------------------------------------------------
    if (countstring == 4) {

      //วนอ่านค่า โดย เอาเฉพาะหลักที่ 1 ที่อยู่ทางซ้ายมือสุดมาเท่านั้น
      //เช่น set2 รับค่าได้มา = 4 หลัก  คือ 1536
      //set2.length() - (set2.length() - 1
      //จะได้  4       - (4-1)  จะได้ = 1 ดังนั้น i จะวนแค่ 1 ครั้งแล้วหยุด
      //set2 จะได้ = 1 จะแสดงค่าหลักที่ 1 ซ้ายมือสุดมาเท่านั้น
      for (int i = 0; i < set2.length() - (set2.length() - 1); i++) {// ถ้า int countstring นับความยาวของ set2.length ได้ = 4 หลัก
        //Serial.println(set2[i]);

        //ให้ String set3 รับค่า String set2 1 หลัก + 0 + 0 + 0
        //จากตัวอย่าง set2 จะได้ = 1000
        set3 = set2[i] + String(0) + String(0) + String(0);

        //ให้ int value2_6 รับค่าการแปลงจาก String set3 เป็น int
        //จากตัวอย่าง set3 จะได้ = 1000
        value2_6 = set3.toInt();
        //ให้ String set3 มีค่า= int set1
        set3 = set1 ;
        //ให้ int set3_4 รับค่าการแปลงจาก String set3 เป็น int
        set3_4 = set3.toInt();
        // set3_3 แสดงค่าหลักที่เหลืออีก 3 หลักก่อนที่จะเจอ .(จุด)
        //จะได้  1536 - 1000 = 536
        set3_3 = set3_4 - value2_6;
        //แปลงค่า set3_3 จากตัวเลขแปลงเป็น String ให้ set3_5 รับไว้ เพื่อนำไปวนค่าหาหลัก 100
        set3_5 = String(set3_3);

        //วนค่าหาหลัก 100
        if (set3_5.length() == 3) {//นับความยาวของ set3_5.length ได้ = 3 หลัก

          //วนหาหลักที่ 1 (หลักร้อย)แค่ 1หลักเท่านั้น
          for (int i = 0; i < set3_5.length() - (set3_5.length() - 1); i++) {

            set3_6 = set3_5[i] + String(0) + String(0);
            set3_1 = set3_6.toInt();

          }
          // int   Int1_Data1 แสดงค่าหลักที่เหลืออีก 2 หลักก่อนที่จะเจอ .(จุด)
          //จะได้  536 - 500 = 36
          //Int1_Data1 = 36
          Int1_Data1 = set3_3 - set3_1;
        }

        if (set3_5.length() == 2) {// ถ้ารับค่ามาอ่านเป็นหลักสิบ+ทศนิยม

          set3_1 = "";
          Int1_Data1 = set3_3;

        }


        //        Serial.print("V = ");
        Serial.println(V, 1);
        //        Serial.print("value2_6 = ");
        //        Serial.println(value2_6);
        //        Serial.print("set3_3 = ");
        //        Serial.println(set3_3);
        //        Serial.print("set3_1 = ");
        //        Serial.println(set3_1);
        //        Serial.print("Int1_Data1 = ");
        //        Serial.println(Int1_Data1);


        if (value2_6 == 1000) {

          if (value2_6 == 1000 ) {
            Tens_digit13();
          }
        }



        if (set3_1 >= 100 and set3_1 <= 900) {

          if (set3_1 == 100 || set3_1 == 200 || set3_1 == 300 ||
              set3_1 == 400 || set3_1 == 500 || set3_1 == 600 ||
              set3_1 == 700 || set3_1 == 800 || set3_1 == 900 ) {
            Tens_digit11();
          }
        }

        if (Int1_Data1 > 0 and Int1_Data1 <= 99   ) {

          if (Int1_Data1 >= 0 and Int1_Data1 <= 9 ) {
            Tens_digit1();
          }
          if (Int1_Data1 >= 10 and Int1_Data1 <= 19 ) {
            Tens_digit2();
          }

          if (Int1_Data1 >= 20 and Int1_Data1 <= 29 ) {
            Tens_digit3();
          }
          if (Int1_Data1 >= 30 and Int1_Data1 <= 39 ) {
            Tens_digit4();
          }
          if (Int1_Data1 >= 40 and Int1_Data1 <= 49 ) {
            Tens_digit5();
          }
          if (Int1_Data1 >= 50 and Int1_Data1 <= 59 ) {
            Tens_digit6();
          }
          if (Int1_Data1 >= 60 and Int1_Data1 <= 69 ) {
            Tens_digit7();
          }
          if (Int1_Data1 >= 70 and Int1_Data1 <= 79 ) {
            Tens_digit8();
          }
          if (Int1_Data1 >= 80 and Int1_Data1 <= 89 ) {
            Tens_digit9();
          }
          if (Int1_Data1 >= 90 and Int1_Data1 <= 99 ) {
            Tens_digit10();
          }
        }


        //ส่วนของหลักทศนิยม 1 ตำแหน่ง
        if (value2_2 == 0 || value2_2 == 1 || value2_2 == 2 ||
            value2_2 == 3 || value2_2 == 4 || value2_2 == 5 ||
            value2_2 == 6 || value2_2 == 7 || value2_2 == 8 ||
            value2_2 == 9 ) {

          Tens_digit12();
        }
      }
    }//if (countstring == 4)

//------------กรณีรับค่ามาเป็นหลักหน่วย (1 หลัก) เช่น 1.2,0.4-------------------------------------------
    if (countstring == 1) {// ถ้า int countstring นับความยาวของ set2.length ได้ = 3 หลัก


      Int1_Data1 = set1;

      Serial.println(V, 1);


      if (Int1_Data1 >= 0 and Int1_Data1 <= 9 ) {
        Tens_digit1();
      }


      //ส่วนของหลักทศนิยม 1 ตำแหน่ง
      if (value2_2 == 0 || value2_2 == 1 || value2_2 == 2 ||
          value2_2 == 3 || value2_2 == 4 || value2_2 == 5 ||
          value2_2 == 6 || value2_2 == 7 || value2_2 == 8 ||
          value2_2 == 9 ) {

        Tens_digit12();
      }
    }








  }//if (millis() - last_time > delaytime_1)

}//End Loop



void Tens_digit13() {
  switch (value2_6) {
    case 1000:
      myDFPlayer.play(56);
      delay(x1);
      break;

  }
}





void Tens_digit12() {
  switch (value2_2) {
    case 0:
      myDFPlayer.play(57);
      delay(x1);
      break;

    case 1:
      myDFPlayer.play(58);
      delay(x1);
      break;
    case 2:
      myDFPlayer.play(59);
      delay(x1);
      break;
    case 3:
      myDFPlayer.play(60);
      delay(x1);
      break;
    case 4:
      myDFPlayer.play(61);
      delay(x1);
      break;
    case 5:
      myDFPlayer.play(62);
      delay(x1);
      break;
    case 6:
      myDFPlayer.play(63);
      delay(x1);
      break;
    case 7:
      myDFPlayer.play(64);
      delay(x1);
      break;
    case 8:
      myDFPlayer.play(65);
      delay(x1);
      break;
    case 9:
      myDFPlayer.play(66);
      delay(x1);
      break;


  }
}




void Tens_digit11() {
  switch (set3_1) {
    case 100:
      myDFPlayer.play(47);
      delay(x1);
      break;

    case 200:
      myDFPlayer.play(48);
      delay(x1);
      break;
    case 300:
      myDFPlayer.play(49);
      delay(x1);
      break;
    case 400:
      myDFPlayer.play(50);
      delay(x1);
      break;
    case 500:
      myDFPlayer.play(51);
      delay(x1);
      break;
    case 600:
      myDFPlayer.play(52);
      delay(x1);
      break;
    case 700:
      myDFPlayer.play(53);
      delay(x1);
      break;
    case 800:
      myDFPlayer.play(54);
      delay(x1);
      break;
    case 900:
      myDFPlayer.play(55);
      delay(x1);
      break;



  }
}





void Tens_digit10() {
  switch (Int1_Data1) {
    case 90:
      myDFPlayer.play(37);
      delay(x1);
      break;

    case 91:
      myDFPlayer.play(38);
      delay(x1);
      break;
    case 92:
      myDFPlayer.play(39);
      delay(x1);
      break;
    case 93:
      myDFPlayer.play(40);
      delay(x1);
      break;
    case 94:
      myDFPlayer.play(41);
      delay(x1);
      break;
    case 95:
      myDFPlayer.play(42);
      delay(x1);
      break;
    case 96:
      myDFPlayer.play(43);
      delay(x1);
      break;
    case 97:
      myDFPlayer.play(44);
      delay(x1);
      break;
    case 98:
      myDFPlayer.play(45);
      delay(x1);
      break;
    case 99:
      myDFPlayer.play(46);
      delay(x1);
      break;


  }
}










void Tens_digit9() {
  switch (Int1_Data1) {
    case 80:
      myDFPlayer.play(27);
      delay(x1);
      break;

    case 81:
      myDFPlayer.play(28);
      delay(x1);
      break;
    case 82:
      myDFPlayer.play(29);
      delay(x1);
      break;
    case 83:
      myDFPlayer.play(30);
      delay(x1);
      break;
    case 84:
      myDFPlayer.play(31);
      delay(x1);
      break;
    case 85:
      myDFPlayer.play(32);
      delay(x1);
      break;
    case 86:
      myDFPlayer.play(33);
      delay(x1);
      break;
    case 87:
      myDFPlayer.play(34);
      delay(x1);
      break;
    case 88:
      myDFPlayer.play(35);
      delay(x1);
      break;
    case 89:
      myDFPlayer.play(36);
      delay(x1);
      break;


  }
}























void Tens_digit8() {
  switch (Int1_Data1) {
    case 70:
      myDFPlayer.play(17);
      delay(x1);
      break;

    case 71:
      myDFPlayer.play(18);
      delay(x1);
      break;
    case 72:
      myDFPlayer.play(19);
      delay(x1);
      break;
    case 73:
      myDFPlayer.play(20);
      delay(x1);
      break;
    case 74:
      myDFPlayer.play(21);
      delay(x1);
      break;
    case 75:
      myDFPlayer.play(22);
      delay(x1);
      break;
    case 76:
      myDFPlayer.play(23);
      delay(x1);
      break;
    case 77:
      myDFPlayer.play(24);
      delay(x1);
      break;
    case 78:
      myDFPlayer.play(25);
      delay(x1);
      break;
    case 79:
      myDFPlayer.play(26);
      delay(x1);
      break;


  }
}















void Tens_digit7() {
  switch (Int1_Data1) {
    case 60:
      myDFPlayer.play(7);
      delay(x1);
      break;

    case 61:
      myDFPlayer.play(8);
      delay(x1);
      break;
    case 62:
      myDFPlayer.play(9);
      delay(x1);
      break;
    case 63:
      myDFPlayer.play(10);
      delay(x1);
      break;
    case 64:
      myDFPlayer.play(11);
      delay(x1);
      break;
    case 65:
      myDFPlayer.play(12);
      delay(x1);
      break;
    case 66:
      myDFPlayer.play(13);
      delay(x1);
      break;
    case 67:
      myDFPlayer.play(14);
      delay(x1);
      break;
    case 68:
      myDFPlayer.play(15);
      delay(x1);
      break;
    case 69:
      myDFPlayer.play(16);
      delay(x1);
      break;


  }
}






void Tens_digit6() {
  switch (Int1_Data1) {
    case 50:
      myDFPlayer.play(117);
      delay(x1);
      break;

    case 51:
      myDFPlayer.play(118);
      delay(x1);
      break;
    case 52:
      myDFPlayer.play(119);
      delay(x1);
      break;
    case 53:
      myDFPlayer.play(120);
      delay(x1);
      break;
    case 54:
      myDFPlayer.play(1);
      delay(x1);
      break;
    case 55:
      myDFPlayer.play(2);
      delay(x1);
      break;
    case 56:
      myDFPlayer.play(3);
      delay(x1);
      break;
    case 57:
      myDFPlayer.play(4);
      delay(x1);
      break;
    case 58:
      myDFPlayer.play(5);
      delay(x1);
      break;
    case 59:
      myDFPlayer.play(6);
      delay(x1);
      break;


  }
}



void Tens_digit5() {
  switch (Int1_Data1) {
    case 40:
      myDFPlayer.play(107);
      delay(x1);
      break;

    case 41:
      myDFPlayer.play(108);
      delay(x1);
      break;
    case 42:
      myDFPlayer.play(109);
      delay(x1);
      break;
    case 43:
      myDFPlayer.play(110);
      delay(x1);
      break;
    case 44:
      myDFPlayer.play(111);
      delay(x1);
      break;
    case 45:
      myDFPlayer.play(112);
      delay(x1);
      break;
    case 46:
      myDFPlayer.play(113);
      delay(x1);
      break;
    case 47:
      myDFPlayer.play(114);
      delay(x1);
      break;
    case 48:
      myDFPlayer.play(115);
      delay(x1);
      break;
    case 49:
      myDFPlayer.play(116);
      delay(x1);
      break;


  }


}//void Tens_digit(










void Tens_digit4() {
  switch (Int1_Data1) {
    case 30:
      myDFPlayer.play(97);
      delay(x1);
      break;

    case 31:
      myDFPlayer.play(98);
      delay(x1);
      break;
    case 32:
      myDFPlayer.play(99);
      delay(x1);
      break;
    case 33:
      myDFPlayer.play(100);
      delay(x1);
      break;
    case 34:
      myDFPlayer.play(101);
      delay(x1);
      break;
    case 35:
      myDFPlayer.play(102);
      delay(x1);
      break;
    case 36:
      myDFPlayer.play(103);
      delay(x1);
      break;
    case 37:
      myDFPlayer.play(104);
      delay(x1);
      break;
    case 38:
      myDFPlayer.play(105);
      delay(x1);
      break;
    case 39:
      myDFPlayer.play(106);
      delay(x1);
      break;


  }


}//void Tens_digit(











void Tens_digit3() {
  switch (Int1_Data1) {
    case 20:
      myDFPlayer.play(87);
      delay(x1);
      break;

    case 21:
      myDFPlayer.play(88);
      delay(x1);
      break;
    case 22:
      myDFPlayer.play(89);
      delay(x1);
      break;
    case 23:
      myDFPlayer.play(90);
      delay(x1);
      break;
    case 24:
      myDFPlayer.play(91);
      delay(x1);
      break;
    case 25:
      myDFPlayer.play(92);
      delay(x1);
      break;
    case 26:
      myDFPlayer.play(93);
      delay(x1);
      break;
    case 27:
      myDFPlayer.play(94);
      delay(x1);
      break;
    case 28:
      myDFPlayer.play(95);
      delay(x1);
      break;
    case 29:
      myDFPlayer.play(96);
      delay(x1);
      break;


  }


}//void Tens_digit(














void Tens_digit2() {
  switch (Int1_Data1) {
    case 10:
      myDFPlayer.play(77);
      delay(x1);
      break;

    case 11:
      myDFPlayer.play(78);
      delay(x1);
      break;
    case 12:
      myDFPlayer.play(79);
      delay(x1);
      break;
    case 13:
      myDFPlayer.play(80);
      delay(x1);
      break;
    case 14:
      myDFPlayer.play(81);
      delay(x1);
      break;
    case 15:
      myDFPlayer.play(82);
      delay(x1);
      break;
    case 16:
      myDFPlayer.play(83);
      delay(x1);
      break;
    case 17:
      myDFPlayer.play(84);
      delay(x1);
      break;
    case 18:
      myDFPlayer.play(85);
      delay(x1);
      break;
    case 19:
      myDFPlayer.play(86);
      delay(x1);
      break;


  }


}//void Tens_digit(












void Tens_digit1() {


  switch (Int1_Data1) {
    case 0:
      myDFPlayer.play(67);
      delay(x);
      break;

    case 1:
      myDFPlayer.play(68);
      delay(x);
      break;
    case 2:
      myDFPlayer.play(69);
      delay(x);
      break;
    case 3:
      myDFPlayer.play(70);
      delay(x);
      break;
    case 4:
      myDFPlayer.play(71);
      delay(x);
      break;
    case 5:
      myDFPlayer.play(72);
      delay(x);
      break;
    case 6:
      myDFPlayer.play(73);
      delay(x);
      break;
    case 7:
      myDFPlayer.play(74);
      delay(x);
      break;
    case 8:
      myDFPlayer.play(75);
      delay(x);
      break;
    case 9:
      myDFPlayer.play(76);
      delay(x);
      break;


  }


}//void Tens_digit(
1 Like

ทำให้อุปกรณ์เหมิอนมันพูดได้ ล้ำมาก ชอบๆๆ

เป็นเรื่องที่น่าสนใจมากครับ ว่างๆ ต้องมาลองทำดู

ดีมากครับ น่าสนใจมาก ว่างๆต้องลองทำแล้ว