สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: พัฒนาเกมสระด้วย Arduino
- ขั้นตอนที่ 2:
- ขั้นตอนที่ 3:
- ขั้นตอนที่ 4: แนวคิดโครงการ
- ขั้นตอนที่ 5:
- ขั้นตอนที่ 6: สร้างลอจิกการเขียนโปรแกรมของเกม
- ขั้นตอนที่ 7:
- ขั้นตอนที่ 8:
- ขั้นตอนที่ 9: ฟังก์ชันการตั้งค่าเป็นโมฆะ ()
- ขั้นตอนที่ 10: ฟังก์ชันหลัก Void Loop()
- ขั้นตอนที่ 11:
- ขั้นตอนที่ 12: บทสรุป
- ขั้นตอนที่ 13: รับทราบ
วีดีโอ: เกมสระด้วย Arduino และ YX5300 MP3 โมดูล Catalex: 13 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
คุณสามารถอ่านคำถามนี้ได้หรือไม่? มันแปลก! ฉันถามคำถามนี้โดยตั้งใจ หากคุณสามารถอ่านข้อความนี้ได้ นั่นก็เพราะว่าคุณรู้จักตัวอักษรทั้งหมดและแน่นอนว่าได้เรียนรู้เกี่ยวกับสระทั้งหมด
สระมีอยู่ในทุกคำ เป็นไปไม่ได้ที่จะหลบหนีจากพวกเขาแต่ละคน ตอนนี้ให้ฉันถามคำถามคุณ วัยเด็กของคุณการเรียนรู้สนุกและเกี่ยวข้องกับทรัพยากรทางเทคโนโลยีหรือไม่?
ฉันแน่ใจว่าทรัพยากรการเรียนรู้มีน้อย และคุณใช้วิธีการแบบเดิมเพื่อเรียนรู้สระและตัวอักษร
เป็นไปได้ไหมที่จะใช้แหล่งข้อมูลทางเทคโนโลยีเพื่อเรียนรู้สระ?
ในบทความนี้ ฉันจะสอนวิธีสอนนักเรียนและสระเด็กของคุณผ่านเกม
ฉันจะสอนวิธีสร้างระบบด้วยเสียง โดยที่บุตรหลาน/นักเรียนของคุณจะได้ยินเสียงตัวอักษรและต้องกดปุ่มเพื่อระบุตัวอักษรที่ถูกต้อง
ดังนั้นพวกเขาจะเรียนรู้ในขณะที่เล่นและจะมีแรงจูงใจในการเรียนเสมอ
ตอนนี้ ผมจะแสดงให้คุณเห็นถึงขั้นตอนทีละขั้นตอนในการสร้างเกมของคุณเอง และสอนสระให้เด็กๆ
เสบียง
แผงวงจรพิมพ์ JLCPCB
Arduino Uno
สวิตช์ปุ่มกด
ตัวต้านทาน 10kR
หัวชาย 2, 54mm 1x7
ขั้นตอนที่ 1: พัฒนาเกมสระด้วย 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
แนะนำ:
กำลังส่ง SMS ด้วย Arduino -- โมดูล TC35 GSM: 5 ขั้นตอน
กำลังส่ง SMS ด้วย Arduino || โมดูล TC35 GSM: ในโครงการขนาดเล็กนี้ ฉันจะแสดงให้คุณเห็นถึงวิธีใช้โมดูล TC35 GSM อย่างถูกต้อง และวิธีใช้งานกับ Arduino Uno เพื่อส่ง SMS ด้วย
ระบบเตือนภัย GSM ส่วนบุคคล - โมดูล SMS SIM900A, Arduino: 3 ขั้นตอน
ระบบเตือนภัย GSM ส่วนบุคคล - โมดูล SMS SIM900A, Arduino: สองสามครั้งต่อเดือนฉันพาป้าเก่าของฉันไปที่คริสตจักรท้องถิ่น บางครั้งการรับใช้ในโบสถ์ใช้เวลานานกว่านั้นมาก และเวลาสิ้นสุดก็คาดเดาได้ยาก ดังนั้นหลังจากรอประมาณครึ่งชั่วโมง ฉันคิดว่ามันคงจะดีกว่าถ้าเธอสามารถเตือนฉันว่าบริการมี
HowTo - Esp-12F โมดูล WiFi ขนาดเล็ก ESP8266 18650 Nodemcu Batterie 0.96” OLED DEMO ผ่าน Arduino GUI: 4 ขั้นตอน
HowTo - Esp-12F โมดูล WiFi ขนาดเล็ก ESP8266 18650 Nodemcu Batterie 0.96” OLED DEMO ผ่าน Arduino GUI: Hallo, hier mà ichte ich Euch zeigen wie Ihr das mit auf der Hauptplatine verbaute OLED Display benutzen/ansteuern k & nnt. ใช้งานไม่ได้ einfach zu halten, benutze ich die ARDUINO GUI zum schreiben des CODEs und zum hochladen der Firmwa
การตรวจจับระยะทางด้วย Micro:bit และ Sonar (โมดูล HC-SR04): 3 ขั้นตอน (พร้อมรูปภาพ)
การตรวจจับระยะทางด้วย Micro:bit และ Sonar (โมดูล HC-SR04): สัปดาห์นี้ ฉันได้ใช้เวลาเล่นกับ BBC micro:bit ที่ยอดเยี่ยมและโซนิคเซ็นเซอร์ ฉันได้ลองใช้โมดูลต่างๆ สองสามตัว (รวมแล้วมากกว่า 50 รายการ) และคิดว่ามันน่าจะดี ดังนั้นโปรดแชร์ผลลัพธ์บางส่วน โมดูลที่ดีที่สุดที่ฉันพบจนถึงตอนนี้คือ Spar
โมดูล GPS Ublox LEA 6h 02 พร้อม Arduino และ Python: 4 ขั้นตอน
โมดูล GPS Ublox LEA 6h 02 พร้อม Arduino และ Python: การเชื่อมต่อโมดูล GPS โดยใช้ Arduino UNO (หรืออุปกรณ์ Arduino อื่น ๆ ) และคำนวณละติจูดและลองจิจูดเพื่อแสดงบนหน้าต่างแอปพลิเคชันที่เขียนด้วย Python