สารบัญ:

เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex: 13 ขั้นตอน
เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex: 13 ขั้นตอน

วีดีโอ: เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex: 13 ขั้นตอน

วีดีโอ: เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex: 13 ขั้นตอน
วีดีโอ: របៀបប្រើប្រាស់ Ultrasonic sensor HC-SR04 with arduino 2024, พฤศจิกายน
Anonim
เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex
เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex

คุณสามารถอ่านคำถามนี้ได้หรือไม่? มันแปลก! ฉันถามคำถามนี้โดยตั้งใจ หากคุณสามารถอ่านข้อความนี้ได้ นั่นก็เพราะว่าคุณรู้จักตัวอักษรทั้งหมดและแน่นอนว่าได้เรียนรู้เกี่ยวกับสระทั้งหมด

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

ฉันแน่ใจว่าทรัพยากรการเรียนรู้มีน้อย และคุณใช้วิธีการแบบเดิมเพื่อเรียนรู้สระและตัวอักษร

เป็นไปได้ไหมที่จะใช้แหล่งข้อมูลทางเทคโนโลยีเพื่อเรียนรู้สระ?

ในบทความนี้ ฉันจะสอนวิธีสอนนักเรียนและสระเด็กของคุณผ่านเกม

ฉันจะสอนวิธีสร้างระบบด้วยเสียง โดยที่บุตรหลาน/นักเรียนของคุณจะได้ยินเสียงตัวอักษรและต้องกดปุ่มเพื่อระบุตัวอักษรที่ถูกต้อง

ดังนั้นพวกเขาจะเรียนรู้ในขณะที่เล่นและจะมีแรงจูงใจในการเรียนเสมอ

ตอนนี้ ผมจะแสดงให้คุณเห็นถึงขั้นตอนทีละขั้นตอนในการสร้างเกมของคุณเอง และสอนสระให้เด็กๆ

เสบียง

แผงวงจรพิมพ์ JLCPCB

Arduino Uno

สวิตช์ปุ่มกด

ตัวต้านทาน 10kR

หัวชาย 2, 54mm 1x7

ขั้นตอนที่ 1: พัฒนาเกมสระด้วย Arduino

พัฒนาเกมสระด้วย Arduino
พัฒนาเกมสระด้วย Arduino

หัวใจของเกมคือแผงวงจรพิมพ์ของ JLCPCB ของสระ คุณสามารถเข้าถึงลิงค์นี้และดาวน์โหลดไฟล์โครงการ มี 5 ปุ่ม คุณจะใช้แต่ละปุ่มเพื่อแสดงเสียงสระและเชื่อมต่อกับ Arduino ของคุณ

แผงวงจรพิมพ์แสดงในรูปที่ 1

ขั้นตอนที่ 2:

ภาพ
ภาพ

ด้วยโครงการ PCB นี้ คุณสามารถเชื่อมต่อกับ Arduino และสร้างเกมของคุณได้ ต่อไป ฉันจะเสนอแผนผังอิเล็กทรอนิกส์ให้คุณเพื่อประกอบหรือสร้างโครงการบนโปรโตบอร์ดของคุณ

ขั้นตอนที่ 3:

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

เลือก 5 พินจาก Arduino และเชื่อมต่อจัมเปอร์บนบอร์ดกับ Arduino หรือมิฉะนั้น คุณสามารถประกอบไดอะแกรมอิเล็กทรอนิกส์ต่อไปนี้

ขั้นตอนที่ 4: แนวคิดโครงการ

แนวคิดโครงการ
แนวคิดโครงการ

ฉันจะสอนวิธีประกอบระบบเสียง MP3 กับ Arduino ระบบนี้จะรับผิดชอบในการสร้างเสียงพูดในจดหมาย เสียงของตัวอักษรแต่ละตัวจะถูกวาดโดยใช้ค่าตั้งแต่ 1 ถึง 5 โดยที่ 1 แทน A และ 5 แทน U

ดังนั้น เมื่อเด็กได้ยินเสียง เขาต้องมองที่แป้นพิมพ์ จำการสะกดของสระ และกดปุ่มที่ถูกต้อง

หากไม่สำเร็จ ระบบจะกะพริบ LED สีแดง 3 ครั้ง มิฉะนั้น ระบบจะเปิดเสียงกริ่งเป็นเวลา 5 วินาทีและวาดสระใหม่

ในการทำเช่นนี้ คุณต้องประกอบวงจรต่อไปนี้

ในวงจรนี้ คุณจะเชื่อมต่อโมดูล MP3 และบอร์ดสระบน Arduino โมดูล Bluetooth ถูกใช้เพื่อเป็นตัวแทนของโมดูล Catalex MP3

Arduino จะรับผิดชอบในการเรียงลำดับตัวเลข 5 ตัวแล้วส่งคำสั่งเพื่อเปิดใช้งานเสียงสระที่วาด

ขั้นตอนที่ 5:

ภาพ
ภาพ

หลังจากนั้นเราจะรอจนกว่าเด็กจะได้ยินและกดปุ่มดังรูปด้านบน

ปุ่มแต่ละปุ่มด้านบนแทนเสียงสระของตัวอักษร ต่อไป ฉันจะแสดงให้คุณเห็นว่าคุณจะสร้างตรรกะการเขียนโปรแกรมสำหรับโครงการนี้อย่างไร

ขั้นตอนที่ 6: สร้างลอจิกการเขียนโปรแกรมของเกม

การสร้างลอจิกการเขียนโปรแกรมของเกม
การสร้างลอจิกการเขียนโปรแกรมของเกม

ระบบเกมสระขึ้นอยู่กับการทำงานของโมดูล YX5300 โมดูลนี้มีฟังก์ชันบางอย่าง อย่างไรก็ตาม เราจะเน้นที่การนำเสนอโครงสร้างการทำงานของเกมผ่านฟังก์ชันหลักของโมดูล YX5300

ด้านล่างนี้ฉันให้ตรรกะการเขียนโปรแกรมทั้งหมดของโครงการแก่คุณ

ขั้นตอนที่ 7:

ต่อไปนี้ ฉันจะอธิบายทีละขั้นตอนเพื่อสร้างตรรกะของเกมแสนสนุกสำหรับเด็ก

#รวม

#define ARDUINO_RX 5 // ควรเชื่อมต่อกับ TX ของโมดูล Serial MP3 Player #define ARDUINO_TX 6 // เชื่อมต่อกับ RX ของโมดูล SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); คงที่ int8_t Send_buf[8] = {0}; // บัฟเฟอร์สำหรับคำสั่ง Send // ดีกว่าในเครื่อง uint8_t ansbuf[10] = {0}; //บัฟเฟอร์สำหรับคำตอบ // BETTER LOCALLY สตริง mp3Answer; // คำตอบจาก MP3 คำตอบสตริง(เป็นโมฆะ); สตริง sbyte2hex(uint8_t b); /************ ไบต์คำสั่ง **************************/ #define CMD_NEXT_SONG 0X01 // เล่นต่อไป เพลง. #define CMD_PREV_SONG 0X02 // เล่นเพลงก่อนหน้า #define CMD_PLAY_W_INDEX 0X03 #define CMD_VOLUME_UP 0X04 #define CMD_VOLUME_DOWN 0X05 #define CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // เล่นรอบเดียว #define CMD_SEL_DEV 0X09 #define CMD_SLEEP_MODE 0X0A #define CMD_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLDER_FILE CMD_ 0S // หยุดเล่นอย่างต่อเนื่อง #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // ตั้งค่ารอบเดียว #define CMD_SET_DAC 0X1A #define DAC_ON 0x00 #define DAC_OFF 0x01 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43 #define CMD_QUERY_FLDR_TRACKS 0x4E #define CMD_QUERY_TOT_TRACKS 0x48 #define CMD_QUERY_FLDR_COUNT 0x4f / ********* *** ความคิดเห็น **************************/ #define DEV_TF 0X02 /**************** ******************************************************** *****/ จำนวนเต็ม; ไบต์เอสตาโด; ไบต์ออด = 2; ไบต์พิน = 0; ไบต์ SortNumber = 0; ปุ่มบูล = 0; การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); mp3.begin(9600); ล่าช้า (500); สำหรับ (พิน = 8; พิน 13) { พิน = 8; } Serial.println("วาร์เรนโด…"); Serial.println (พิน); // ล่าช้า (1000); }ในขณะที่(ปุ่ม != 1); Serial.println("ไซอุ…"); ถ้า (ปุ่ม == 1 && (พิน-1) != SortNumber) { sendCommand (0x03, 0, 6); ล่าช้า (3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); ล่าช้า (3000); } // ตรวจสอบคำตอบ ถ้า (mp3.available ()) { Serial.println (decodeMP3Answer ()); } ล่าช้า (100); //Serial.println("Tocando musica…"); } /****************************************************** **************************************/ /*ฟังก์ชั่น sendMP3Command: ค้นหาคำสั่ง 'c' และส่งไปยัง MP3 */ /*พารามิเตอร์: ค. รหัสสำหรับคำสั่ง MP3 'h' เพื่อขอความช่วยเหลือ */ /* ส่งคืน: void */ void sendMP3Command (ถ่าน c) { สวิตช์ (c) { case '?': case 'h': Serial.println ("HELP"); Serial.println(" p = เล่น"); Serial.println (" P = หยุดชั่วคราว"); Serial.println(" > = ถัดไป"); Serial.println(" ': Serial.println("Next"); sendCommand(CMD_NEXT_SONG); sendCommand(CMD_PLAYING_N); // ขอจำนวนไฟล์ที่กำลังเล่นอยู่; case ' ใส่การ์ดหน่วยความจำแล้ว"; break; case 0x3D: decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC); //sendCommand(CMD_NEXT_SONG); //sendCommand(CMD_PLAYING_N); // ขอจำนวนไฟล์ที่กำลังเล่นอยู่ กรณี 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data recived right. "; break; case 0x42: decodedMP3Answer += " -> Status playing: " + String(ansbuf[6], ธ.ค.); break; case 0x48: decodedMP3Answer += " -> File count: " + String(ansbuf[6], DEC); break; case 0x4C: decodedMP3Answer += " -> Playing: " + String(ansbuf[6], ธ.ค.); break; case 0x4E: decodedMP3Answer += " -> Folder file count: " + String(ansbuf[6], DEC); break; case 0x4F: decodedMP3Answer += " -> Folder count: " + String(ansbuf) [6], ธันวาคม); แตก; } ส่งคืนถอดรหัสMP3Answer; } /*********************************** ************ ***************************************/ /*Function: ส่งคำสั่งไปยัง MP3 */ /*Parameter: byte คำสั่ง */ /*Parameter: byte dat1 พารามิเตอร์สำหรับคำสั่ง */ /*Parameter: byte dat2 พารามิเตอร์สำหรับคำสั่ง */ void sendCommand(byte command){ sendCommand(command, 0, 0); } เป็นโมฆะ sendCommand (คำสั่งไบต์, ไบต์ dat1, ไบต์ dat2){ ล่าช้า (20); Send_buf[0] = 0x7E; // Send_buf[1] = 0xFF; // Send_buf[2] = 0x06; // Len Send_buf[3] = คำสั่ง; // Send_buf[4] = 0x01; // 0x00 ไม่ใช่, 0x01 ข้อเสนอแนะ Send_buf[5] = dat1; // datah Send_buf[6] = dat2; // datal Send_buf[7] = 0xEF; // Serial.print("กำลังส่ง: "); สำหรับ (uint8_t i = 0; i < 8; i++) { mp3.write (Send_buf); Serial.print(sbyte2hex(ส่ง_buf)); } Serial.println(); } /****************************************************** **************************************/ /*ฟังก์ชัน: sbyte2hex. ส่งกลับข้อมูลไบต์ในรูปแบบ HEX */ /*พารามิเตอร์:- uint8_t b. ไบต์เพื่อแปลงเป็น HEX */ /* ส่งคืน: สตริง */ สตริง sbyte2hex (uint8_t b) { สตริง shex; เชก = "0X"; ถ้า (b < 16) shex += "0"; shex += สตริง (b, HEX); เชก += " "; ผลตอบแทน shex; } /****************************************************** **************************************/ /*ฟังก์ชัน: shex2int. ส่งกลับค่า int จากสตริง HEX */ /*พารามิเตอร์: s. ถ่าน *s เพื่อแปลงเป็น HEX */ /*พารามิเตอร์: น. ถ่าน * ความยาว */ /*กลับ: int */ int shex2int(ถ่าน *s, int n){ int r = 0; สำหรับ (int i=0; i='0' && s='A' && s<='F'){ r *= 16; r += (s - 'A') + 10; } } กลับ r; } /****************************************************** **************************************/ /*ฟังก์ชัน: sanswer. ส่งกลับสตริงคำตอบจากโมดูล UART mp3 */ /*พารามิเตอร์:- uint8_t b. เป็นโมฆะ */ /*ผลตอบแทน: สตริง ถ้าคำตอบมีรูปแบบที่ดี */ คำตอบสตริง (เป็นโมฆะ) { uint8_t i = 0; สตริง mp3answer = ""; // รับเพียง 10 ไบต์ในขณะที่ (mp3.available() && (i < 10)) { uint8_t b = mp3.read(); ansbuf = b; ผม++; mp3answer += sbyte2hex(b); } // หากรูปแบบคำตอบถูกต้อง if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return mp3answer; } return "???:" + mp3answer; }

ขั้นแรก เรากำหนดตัวแปรโปรแกรมทั้งหมดและที่อยู่การลงทะเบียนการเข้าถึงของโมดูล YX5300

#รวม

#define ARDUINO_RX 5 // ควรเชื่อมต่อกับ TX ของโมดูล Serial MP3 Player #define ARDUINO_TX 6 // เชื่อมต่อกับ RX ของโมดูล SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); คงที่ int8_t Send_buf[8] = {0}; // บัฟเฟอร์สำหรับคำสั่ง Send // ดีกว่าในเครื่อง uint8_t ansbuf[10] = {0}; //บัฟเฟอร์สำหรับคำตอบ // BETTER LOCALLY สตริง mp3Answer; // คำตอบจาก MP3 คำตอบสตริง(เป็นโมฆะ); สตริง sbyte2hex(uint8_t b); /************ ไบต์คำสั่ง **************************/ #define CMD_NEXT_SONG 0X01 // เล่นต่อไป เพลง. #define CMD_PREV_SONG 0X02 // เล่นเพลงก่อนหน้า #define CMD_PLAY_W_INDEX 0X03 #define CMD_VOLUME_UP 0X04 #define CMD_VOLUME_DOWN 0X05 #define CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // เล่นรอบเดียว #define CMD_SEL_DEV 0X09 #define CMD_SLEEP_MODE 0X0A #define CMD_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLDER_FILE CMD_ 0S // หยุดเล่นอย่างต่อเนื่อง #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // ตั้งค่ารอบเดียว #define CMD_SET_DAC 0X1A #define DAC_ON 0x00 #define DAC_OFF 0x01 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43 #define CMD_QUERY_FLDR_TRACKS 0x4E #define CMD_QUERY_TOT_TRACKS 0x48 #define CMD_QUERY_FLDR_COUNT 0x4f / ********* *** ความคิดเห็น **************************/ #define DEV_TF 0X02 /**************** ******************************************************** *****/ จำนวนเต็ม; ไบต์เอสตาโด; ไบต์ออด = 2; ไบต์พิน = 0; ไบต์ SortNumber = 0; ปุ่มบูล = 0;

ขั้นตอนที่ 8:

ที่อยู่การลงทะเบียนเหล่านี้ใช้เพื่อกำหนดค่าการทำงานของโมดูล ตัวอย่างเช่น ดูที่อยู่การลงทะเบียนด้านล่างนี้

#define CMD_PLAY_W_INDEX 0X03

ที่อยู่ 0x03 ถูกกำหนดด้วยชื่อ CMD_PLAY_W_INDEX ใช้เพื่อเรียกเพลงจากหมายเลข นั่นคือ คุณป้อนหมายเลขของเสียงและจะเล่น

เราจะใช้ค่าเหล่านี้และกำหนดค่าการทำงานของโครงการของเราด้วยค่าเหล่านี้

หลังจากที่คุณได้กำหนดที่อยู่ต่างๆ ที่จะใช้แล้ว เราจะเข้าสู่ฟังก์ชันการตั้งค่าและกำหนดค่าพินและการสื่อสารแบบอนุกรมสำหรับโครงการของเรา

ขั้นตอนที่ 9: ฟังก์ชันการตั้งค่าเป็นโมฆะ ()

ถัดไป ดูฟังก์ชันการตั้งค่าเป็นโมฆะ ฉันทำการตั้งค่าทั้งหมดของหมุดปุ่ม การสื่อสารแบบอนุกรมของโมดูล MP3 และการเริ่มต้นโมดูลการ์ดใน MP3

การตั้งค่าเป็นโมฆะ ()

{ Serial.begin(9600); mp3.begin(9600); ล่าช้า (500); สำหรับ (พิน = 8; พิน <13; พิน ++) {pinMode (พิน, INPUT); } sendCommand(CMD_SEL_DEV, 0, DEV_TF); ล่าช้า (500); }

ฉันเริ่มการสื่อสารซีเรียลเพื่อพิมพ์ข้อมูลบนซีเรียลของคอมพิวเตอร์ จากนั้นเราก็เริ่มการสื่อสารซีเรียลผ่านออบเจ็กต์ mp3

Serial.begin(9600);

mp3.begin(9600); ล่าช้า (500);

โมดูล mp3 ถูกควบคุมผ่านคำสั่งที่ได้รับจากอนุกรม Arduino ในกระบวนการนี้ เราใช้ไลบรารี SoftwareSerial และจำลองซีเรียลบนพินดิจิทัล Arduino

ดังนั้น คุณจะสามารถใช้ Arduino เพื่อควบคุมโมดูล MP3 ผ่านคำสั่งที่ส่งไป

นอกจากนี้เรายังทำการกำหนดค่าพินดิจิทัลและการเริ่มต้นโมดูลการ์ด MP3

สำหรับ (พิน = 8; พิน <13; พิน ++) {pinMode (พิน, INPUT); } sendCommand(CMD_SEL_DEV, 0, DEV_TF); ล่าช้า (500);

หลังจากทำการกำหนดค่าแล้ว เราต้องไปที่ตรรกะหลักในฟังก์ชันวนรอบเป็นโมฆะ

ขั้นตอนที่ 10: ฟังก์ชันหลัก Void Loop()

รหัสนั้นง่ายมากและโครงสร้างเชิงตรรกะทั้งหมดถูกนำเสนอด้านล่าง ต่อไปนี้ ฉันจะอธิบายตรรกะที่สมบูรณ์ของฟังก์ชันหลักให้คุณฟัง

วงเป็นโมฆะ ()

{ พิน = 8; randomSeed (อ่านแบบแอนะล็อก (A0)); ตัวเลข = สุ่ม (8, 12); SortNumber = ตัวเลข; ตัวเลข = ตัวเลข - 7; Serial.println(ตัวเลข); sendCommand(0x03, 0, ตัวเลข); ล่าช้า (1000); ทำ { ปุ่ม = digitalRead (พิน); Serial.println (ปุ่ม); พิน++; ถ้า (พิน > 13) { พิน = 8; } Serial.println("วาร์เรนโด…"); Serial.println (พิน); // ล่าช้า (1000); }ในขณะที่(ปุ่ม != 1); Serial.println("ไซอุ…"); ถ้า (ปุ่ม == 1 && (พิน-1) != SortNumber) { sendCommand (0x03, 0, 6); ล่าช้า (3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); ล่าช้า (3000); } // ตรวจสอบคำตอบ ถ้า (mp3.available ()) { Serial.println (decodeMP3Answer ()); } ล่าช้า (100); //Serial.println("Tocando musica…"); }

ในแต่ละรอบเริ่มต้นของวงจรฟังก์ชันลูป เราจะสร้างค่าใหม่ระหว่าง 8 ถึง 12 เพื่อสร้างเสียงสระ ค่าตั้งแต่ 8 ถึง 12 หมายถึงพินดิจิตอลของสระ

รหัสสำหรับสร้างค่าสุ่มแสดงอยู่ด้านล่าง

พิน = 8;

randomSeed(อ่านแบบแอนะล็อก(A0)); ตัวเลข = สุ่ม (8, 12); SortNumber = ตัวเลข;

นอกจากนี้เรายังลบ 7 จากจำนวนที่ดึงระหว่าง 8 ถึง 12 ซึ่งจะทำให้เราสามารถชี้ไปที่ตำแหน่ง 1 ถึง 5 ของเพลงที่บันทึกไว้ในการ์ดหน่วยความจำ

ตัวเลข = ตัวเลข - 7;

หลังจากนั้น ฉันก็ทำซ้ำเสียงสระตามบรรทัดด้านล่าง

sendCommand(0x03, 0, ตัวเลข);

ล่าช้า (1000);

ตอนนี้เวลาสำคัญมาถึงแล้ว ช่วงเวลาที่เรากำลังจะอ่านปุ่มที่เด็กกด ส่วนรหัสถูกนำเสนอด้านล่าง

ทำ

{ ปุ่ม = digitalRead (พิน); Serial.println (ปุ่ม); พิน++; ถ้า (พิน > 13) { พิน = 8; } Serial.println("วาร์เรนโด…"); Serial.println (พิน); // ล่าช้า (1000); }ในขณะที่(ปุ่ม != 1);

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

คุณจะทำการตรวจสอบโดยใช้รหัสด้านล่าง

if(button == 1 && (pin-1) != SortNumber)

{ sendCommand(0x03, 0, 6); ล่าช้า (3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); ล่าช้า (3000); }

เงื่อนไขแรกจะถูกดำเนินการเมื่อผู้ใช้ทำผิดพลาดเพราะมีการกดปุ่มและค่าที่ทริกเกอร์ของพินนั้นแตกต่างจากพินที่ดึงออกมา (SortNumber)

ณ จุดนี้ คุณต้องรันคำสั่งด้านล่าง

sendCommand(0x03, 0, 6);

ล่าช้า (3000);

คำสั่งนี้ใช้เพื่อทริกเกอร์เสียงตอบสนองที่ไม่ถูกต้อง สุดท้ายเรามีเงื่อนไขข้อที่สองที่จะใช้ในการตรวจสอบว่าลูกนั้นถูกต้องหรือไม่

ถ้า (ปุ่ม == 1 && (พิน-1) == SortNumber)

{ sendCommand(0x03, 0, 7); ล่าช้า (3000); }

ขั้นตอนที่ 11:

ภาพ
ภาพ

หากมีการกดปุ่มและพินดิจิตอลที่กดเหมือนกับพินที่ดึง ระบบจะส่งเสียงตอบรับที่ถูกต้อง

ตามที่ฉันอธิบายให้คุณฟัง โค้ดนี้ง่ายมาก และจะช่วยให้เด็กทุกคนพัฒนาความรู้เกี่ยวกับสระผ่านเกมด้วย Arduino

ในรูปด้านบน กล่องเสียงกำลังเล่นเพลงที่จัดเก็บไว้ในการ์ด SD ของโมดูล MP3 YX5300

ขั้นตอนที่ 12: บทสรุป

การศึกษาในห้องเรียนจำเป็นต้องเปลี่ยนแปลงอยู่เสมอ และ Arduino สามารถเป็นพันธมิตรที่ดีในการสร้างงานที่สนุกสนาน

โครงการนี้ทำให้สามารถพัฒนากิจกรรมง่ายๆ ที่สามารถพัฒนาทักษะของเด็กผ่านความรู้ด้านเสียงและการสะกดคำของสระแต่ละสระได้

ต่างจากวิธีการสอนแบบเดิมๆ เด็กๆ จะได้เรียนรู้ผ่านความสนุกสนานในห้องเรียนผ่านเกมและอุปกรณ์อิเล็กทรอนิกส์

ขั้นตอนที่ 13: รับทราบ

โครงการนี้ได้รับการพัฒนาด้วยการสนับสนุนและกำลังใจของบริษัท JLCPCB พวกเขาสนับสนุนการศึกษาและเชิญเราให้พัฒนาเกมสระเพื่อสอนเด็กในห้องเรียน

หากคุณต้องการซื้อแผ่นอิเล็กทรอนิกส์ของ Game of Vowels คุณสามารถเข้าถึงลิงก์นี้และซื้อ 10 หน่วยในราคา $ 2 ที่ JLCPCB

แนะนำ: