산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

프리셋 곡이 포함된 전자 피아노 키보드

구성품 및 소모품

Arduino UNO
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
× 1
SparkFun 푸시버튼 스위치 12mm
× 8
저항 220옴
× 4
저항 560옴
× 1
저항 1k 옴
× 1
저항 4.7K 옴
× 1
저항 10k 옴
× 3
저항 1M 옴
× 1
부저
× 1
LED(일반)
× 1
단일 회전 전위차계 - 10k 옴
× 1
점퍼 와이어(일반)
× 1
브레드보드(일반)
× 1

이 프로젝트 정보

소개

시작하려면 전자 제품의 세계에 완전히 새로운 사람이라는 점을 입력해야 합니다. 저는 코딩에 대한 배경 지식이 있어서 도움이 되지만, 제가 만든 프로젝트에 대한 새로운 아이디어와 제안에 항상 열려 있습니다.

최근에, 나는 Piezo Buzzer와 관련된 코딩에 대해 더 많이 배우고 있는데, 이것은 내가 지금까지 배운 것을 바탕으로 만든 것입니다. 새로운 기능이나 스위치로 확장할 여지가 충분합니다. 나중에 하려고 하지만 지금은 다음 도전 과제입니다!

아래는 사전 설정 노래 메뉴를 포함하여 장치 작동 방식에 대한 비디오입니다. 엄밀히 말하면 4번과 5번 곡은 같다는 것을 인정합니다. 하지만 제가 말할 수 있는 것은, 더 크고 더 나은 것을 만들고 싶은 충동이 있고 더 많은 곡을 위한 음악 코드를 작성하는 것은 그 중 하나가 아니라는 것입니다! 메인 루프와 개별 노래 루프 모두에 대한 기본 코딩은 자신의 아이디어에 쉽게 적용할 수 있으므로 원하는 대로 자유롭게 변경할 수 있습니다.

실제로 확인해보세요!

하드웨어 설정 방법

피아노 건반...

피아노 건반 스위치는 저항 사다리를 사용하여 연결되었습니다. 저항은 순차적으로 배치되어 각 스위치를 전원에 연결합니다. 내 프로젝트에서는 1M, 10k, 4.7K, 1K, 560, 220(옴)을 사용하기로 결정했습니다. 첫 번째 피아노 스위치(왼쪽)는 전원에 연결되고 회로의 다음 스위치에도 연결됩니다. 두 번째 스위치는 가장 작은 저항에 연결되고 그 다음의 각 스위치는 직렬에서 다음으로 큰 저항에 연결됩니다. 마지막 스위치는 10k 옴 저항을 통해 연결을 접지하고 모든 7개 스위치를 Arduino의 "아날로그 입력" 핀 A0에 연결합니다. 기본 스케치는 각 피아노 건반과 연결된 음표 주파수를 정의합니다. 이 프로젝트에서는 C4, D4, E4, F4, G4, A4, B4를 사용했으며 C4는 맨 왼쪽 스위치입니다. 주파수 값을 변경하거나 추가 스위치를 추가하여 자신의 프로젝트를 완전히 사용자 정의하십시오!

LCD 화면...

아래 회로도에 따라 LCD 핀을 연결합니다. 화면의 대비 제어를 위해 LCD 핀 3을 전위차계에 연결합니다. 전위차계의 외부 핀은 이 회로를 완성하기 위해 전원 및 접지에 연결됩니다. LCD 핀 15는 220옴 저항을 통해 전원에 연결됩니다. 자신의 프로젝트에서 이러한 핀이 변경되면 그에 따라 코드를 업데이트하십시오.

메뉴 스위치...

메뉴 스위치를 전원에 연결하고 10K 옴 저항을 통해 접지합니다. 이 스위치는 Arduino의 핀 7에도 연결해야 코딩을 통해 제어할 수 있습니다.

LED...

LED는 "메뉴 모드"에 있고 피아노 건반이 비활성화되었을 때 표시하는 데 사용됩니다. 메뉴 스위치를 누르면 LED 표시등이 켜집니다. LED의 양극(양극)을 Arduino의 6번 핀에 연결하고 220옴 저항을 통해 LED를 접지합니다.

피에조 부저...

Piezo Buzzer를 통합하려면 한쪽 끝을 Arduino 핀 8에 연결하고 다른 쪽 끝을 220옴 저항을 통해 접지에 연결하기만 하면 됩니다. 코드의 "tone" 기능은 호출된 음을 연주하기 위해 이 핀을 찾습니다.

코드 작동 방식

설정...

<울>
  • 스케치는 나중에 코드에서 다양한 항목을 참조할 수 있도록 "LiquidCrystal.h" 및 "pitches.h" 라이브러리를 가져오는 것으로 시작됩니다.
  • <울>
  • 다음으로, 메뉴 스위치의 이름을 정의하고, 입력 대 출력 핀을 결정하고, 7개의 피아노 건반 각각에 대한 주파수 값을 설정하여 코드를 설정합니다.
  • <울>
  • 내 코드를 좀 더 체계적이고 이해하기 쉽게 유지하고 나중에 확장하기 위해 각 개별 노래에 대해 새 탭을 만들었습니다. 노래를 삭제하거나 추가하려면 기본 "전자 키보드" 스케치에서도 코드를 변경해야 합니다.
  • 메인 루프...

    <울>
  • LED가 꺼지고 모든 피아노 건반이 활성화된 상태에서 키보드가 시작됩니다.
  • <울>
  • 루프가 메뉴 버튼을 눌렀음을 감지하면 피아노 건반이 비활성화되고 LED가 켜져 사용자가 "메뉴 모드"에 있음을 나타냅니다.
  • 메뉴에 액세스하는 중...

    <울>
  • 메뉴 버튼을 눌러 현재 노래를 순환하고 피아노 건반을 눌러 LCD 화면에 표시된 노래 재생을 시작합니다.
  • <울>
  • LCD 화면에 현재 재생 중인 노래가 표시되고 노래 재생이 끝나면 메뉴의 동일한 지점으로 돌아갑니다. 여기에서 사용 가능한 노래 목록에서 재생하거나 계속할 수 있습니다.
  • <울>
  • 메뉴 버튼을 두 번 클릭하면 메뉴가 처음부터 다시 시작됩니다.
  • <울>
  • 피아노 건반 사용으로 돌아가려면 메뉴에서 나머지 곡을 순환합니다. LCD 화면이 비어 있고 LED가 꺼지면 피아노 건반이 다시 작동합니다.
  • <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 전자 키보드
  • 노래1
  • 노래2
  • 노래3
  • 노래4
  • 노래 5
  • 피치스.h
  • 전자 키보드Arduino
    메인 코드
    // LCD 화면, 스위치 및 LED 설정#include #include "pitches.h"LiquidCrystal lcd(12, 11, 5, 4, 3, 2);const int LCDswitchPin =7; // 메뉴/LCD 스위치 이름 정의int LCDswitchState =0; // 메뉴/LCD 스위치 상태를 off/lowint로 설정 prevLCDswitchState =0;int blueLED =6;int LCDswitchCounter =0; // 메뉴 버튼 누름 횟수에 대한 카운터 // (이 코드는 메뉴 버튼 누름 수를 계산하여 컴퓨터에 표시하고, // "메뉴 모드"를 종료한 후 0부터 시작합니다. 현재 이 스케치에는 // 다른 영향이 없습니다. , 그러나 나중에 새로운 기능으로 프로젝트를 확장하기 위한 좋은 시작점입니다. // Music Note Keys - 주파수 값 설정int notes[] ={262, 294, 330, 349, 392, 440, 494}; // 설정 노트 C, D, E, F, G, A, B///////////////////////////////////// //////////void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode(LCDswitchPin, INPUT); pinMode(blueLED, OUTPUT); digitalWrite(blueLED, LOW ); // 피아노 건반이 켜져 있는 동안 LED는 꺼진 상태를 유지합니다. } // 설정 종료///////////////////////////////// /////////////void 루프() { LCDswitchState =digitalRead(LCDswitchPin); int keyVal =analogRead(A0); Serial.println(keyVal); lcd.noDisplay(); digitalWrite(blueLED, LOW); // 메인 루프가 시작될 때마다 LED를 다시 끕니다. // ************** 메뉴 버튼을 누르면 "LCDstart" 시작 ******** *** if (LCDswitchState ==HIGH) { digitalWrite(blueLED, HIGH); // LED를 켜서 피아노 건반이 비활성화되고 장치가 "메뉴 모드"에 있음을 나타냅니다. lcd.display(); lcd.clear(); LCD 시작(); } // *********************************************** ************************ ////// 키보드 메모 및 주파수 설명 //////// 생성한 저항 래더를 사용하여 각 피아노 건반 버튼의 전압 변경// 220 ohm =C5 // 560 ohm =D5 // 1K ohm =E5 // etc... if(keyVal ==1023) { tone(8, notes[0]); // C } // else if(keyVal>=990 &keyVal <=1010) { tone(8, notes[1]); // D } // else if(keyVal>=960 &&keyVal <=980) { tone(8, notes[2]); // E } // else if else if(keyVal>=900 &&keyVal <=945) { tone(8, notes[3]); // F } // else if else if(keyVal>=650 &&keyVal <=710) { tone(8, notes[4]); // G } // else if(keyVal>=500 &&keyVal <=550) { tone(8, notes[5]); // A } // else if(keyVal>=5 &&keyVal <=10) { tone(8, notes[6]); // B } // else if else if(keyVal <=1) { // 스위치를 누르지 않으면 톤을 재생하지 않음 noTone(8); } // end else if} // 주파수 톤 루프 종료////////////////////////////////////// //////////////// 무효 LCDstart() { int keyVal =analogRead(A0); LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태 확인 while (LCDswitchState ==LOW) { // 메뉴 버튼이 눌리지 않은 동안 루프 계속 LCDswitchState =digitalRead(LCDswitchPin); // 루프가 시작될 때마다 메뉴 버튼의 상태를 확인 //**************** START SONG 1 TITLE LOOP ******************* * if (LCDswitchState ==HIGH) { // 메뉴 버튼을 누르면... LCDswitchCounter++; // 버튼 수를 1로 설정 Serial.print("버튼 누름 횟수:"); Serial.println(LCD스위치 카운터); 지연(300); // 분. 카운트가 1개 더 추가될 때까지의 시간 Song1title(); lcd.clear(); 부서지다; } //**************** ELSE SHOW MENU **************** else { // 메뉴 버튼을 누르지 않으면... LCD스위치 카운터=0; // 메뉴 버튼 수를 0으로 설정 lcd.clear(); lcd.setCursor(0, 0); lcd.print("어떤 노래가 좋을까"); lcd.setCursor(0, 1); lcd.print("당신은 게임을 좋아합니다"); 지연(50); // 메인으로 돌아가기 } } // end while } // LCDstart 루프 종료 // ************* SONG 1 LOOP STARTS HERE ************* * 무효 Song1title() { int keyVal =analogRead(A0); LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 while (LCDswitchState ==LOW) { // 메뉴 버튼을 누르지 않은 상태에서 루프를 계속합니다. LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 //**************** START SONG 2 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) { // 메뉴 버튼을 누르면... LCDswitchCounter++; // 버튼 수를 2로 설정합니다. Serial.print("버튼 누름 횟수:"); Serial.println(LCD스위치 카운터); 지연(300); // 분. 카운트가 1개 더 추가될 때까지의 시간 Song2title(); lcd.clear(); 부서지다; } else { // 메뉴 버튼을 누르지 않은 경우 int keyVal =analogRead(A0); Serial.println(keyVal); if(keyVal>=2) { digitalWrite(blueLED, LOW); 노래1(); 부서지다; } // 종료되면 lcd.clear(); lcd.setCursor(0, 0); lcd.print("슈퍼마리오 브라더스"); lcd.setCursor(0, 1); lcd.print("테마송"); 지연(50); } } // 노래 1 -> 2 동안 종료 } // Song1title 루프 종료// ************* SONG 2 LOOP STARTS HERE ************* * 무효 Song2title() { int keyVal =analogRead(A0); LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 while (LCDswitchState ==LOW) { // 메뉴 버튼을 누르지 않은 상태에서 루프를 계속합니다. LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 //**************** START SONG 3 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) { // 메뉴 버튼을 누르면... LCDswitchCounter++; // 버튼 수를 3으로 설정합니다. Serial.print("버튼 누름 횟수:"); Serial.println(LCD스위치 카운터); 지연(300); // 분. 카운트가 1개 더 추가될 때까지의 시간 Song3title(); lcd.clear(); 부서지다; } else { // 메뉴 버튼을 누르지 않은 경우 int keyVal =analogRead(A0); Serial.println(keyVal); if(keyVal>=2) { digitalWrite(blueLED, LOW); 노래2(); 부서지다; } // 종료되면 lcd.clear(); lcd.setCursor(0, 0); lcd.print("슈퍼마리오 브라더스"); lcd.setCursor(0, 1); lcd.print("언더월드"); 지연(50); } } // 노래 2 -> 3 동안 종료 } // Song2title 루프 종료// ************* SONG 3 LOOP STARTS HERE ************* * 무효 Song3title() { int keyVal =analogRead(A0); LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 while (LCDswitchState ==LOW) { // 메뉴 버튼을 누르지 않은 상태에서 루프를 계속합니다. LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 //**************** START SONG 4 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) { // 메뉴 버튼을 누르면... LCDswitchCounter++; // 버튼 수를 4로 설정합니다. Serial.print("버튼 누름 횟수:"); Serial.println(LCD스위치 카운터); 지연(300); // 분. 카운트가 1개 더 추가될 때까지의 시간 Song4title(); lcd.clear(); 부서지다; } else { // 메뉴 버튼을 누르지 않은 경우 int keyVal =analogRead(A0); Serial.println(keyVal); if(keyVal>=2) { digitalWrite(blueLED, LOW); 노래3(); 부서지다; } // 종료되면 lcd.clear(); lcd.setCursor(0, 0); lcd.print("위험"); lcd.setCursor(0, 1); lcd.print("테마송"); 지연(50); } } // 노래 3 -> 4 중에 종료 } // Song3title 루프 종료// ************* SONG 4 LOOP STARTS HERE ************* * 무효 Song4title() { int keyVal =analogRead(A0); LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 while (LCDswitchState ==LOW) { // 메뉴 버튼을 누르지 않은 상태에서 루프를 계속합니다. LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 //**************** START SONG 5 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) { // 메뉴 버튼을 누르면... LCDswitchCounter++; // 버튼 수를 5로 설정합니다. Serial.print("버튼 누름 횟수:"); Serial.println(LCD스위치 카운터); 지연(300); // 분. 카운트가 1개 더 추가될 때까지의 시간 Song5title(); lcd.clear(); 부서지다; } else { // 메뉴 버튼을 누르지 않은 경우 int keyVal =analogRead(A0); Serial.println(keyVal); if(keyVal>=2) { digitalWrite(blueLED, LOW); 노래4(); 부서지다; } // 종료되면 lcd.clear(); lcd.setCursor(0, 0); lcd.print("노래 4"); lcd.setCursor(0, 1); lcd.print("여기에 제목"); 지연(50); } } // 노래 4 -> 5 동안 종료 } // Song4title 루프 종료// ************* SONG 5 LOOP STARTS HERE ************* * 무효 Song5title() { int keyVal =analogRead(A0); LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 while (LCDswitchState ==LOW) { // 메뉴 버튼을 누르지 않은 상태에서 루프를 계속합니다. LCDswitchState =digitalRead(LCDswitchPin); // 메뉴 버튼의 상태를 다시 확인 //**************** START SONG 4 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) { // 메뉴 버튼을 누르면... LCDswitchCounter=0; // 버튼 수를 0으로 설정 Serial.print("버튼 누름 횟수:"); Serial.println(LCD스위치 카운터); 지연(300); // 분. 카운트가 1개 더 추가될 때까지의 시간 lcd.clear(); } else { // 메뉴 버튼을 누르지 않은 경우 int keyVal =analogRead(A0); Serial.println(keyVal); if(keyVal>=2) { digitalWrite(blueLED, LOW); 노래5(); 부서지다; } // 종료되면 lcd.clear(); lcd.setCursor(0, 0); lcd.print("노래 5"); lcd.setCursor(0, 1); lcd.print("여기에 제목"); 지연(50); } } // 노래 4 -> 5 동안 종료 } // Song5title 루프 종료
    노래1아두이노
    첫 번째 곡의 코드입니다. 현재 Mario Bros 테마송이 로드되었습니다.
    //******************** SONG 1 NOTES HERE *************** ***********////////////////////////////////////////// ////////////////////////////////////////////////////// /////////////////////// 마리오 노래를 만드는 방법에 대한 전체 자습서는 여기에서 찾을 수 있습니다. ///////////// //////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -피에조 부저/ ///////////////////////////////////////////// ////////////////////////////////////////////////////// ////////void Song1() { lcd.clear();// 멜로디의 음표:int 멜로디[] ={ NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, NOTE_G6, 0, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7 , NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0};// 음표 길이:4 =4분 음표, 8 =8분 음표 등:int noteDurations[] ={ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,}; lcd.setCursor(1, 0); lcd.print("지금 재생 중입니다..."); lcd.setCursor(0, 1); lcd.print("마리오 테마송"); int 크기 =sizeof(멜로디) / sizeof(int); for (int thisNote =0; thisNote  
    Song2아두이노
    2번째 곡의 코드입니다. 현재 Mario Bros Underworld Song이 로드되었습니다.
    //******************** SONG 2 NOTES HERE *************** ***********////////////////////////////////////////// ////////////////////////////////////////////////////// /////////////////////// 마리오 노래를 만드는 방법에 대한 전체 자습서는 여기에서 찾을 수 있습니다. ///////////// //////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -피에조 부저/ ///////////////////////////////////////////// ////////////////////////////////////////////////////// ////////void Song2() { lcd.clear();// 멜로디의 음표:int 멜로디[] ={ NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS0, NOTE_D4, NOTE_CS4, NOTE_DS4, NOTE_DS4, NOTE_GS3, NOTE_G3, NOTE_CS4, NOTE_C4, NOTE_FS4, NOTE_F4, NOTE_E3, NOTE_AS4, NOTE_A4, NOTE_GS4, NOTE_DS4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_GS3, 0, 0, 0};// 음표 길이:4 =4분 음표, 8 =8분 음표 등:int noteDurations[] ={ 12, 12, 12, 12, 12 , 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12 , 6, 6, 18, 18, 18, 6, 6, 6, 6, 6, 6, 18, 18, 18, 18, 18, 18, 10, 10, 10, 10, 10, 10, 3, 3 , 삼}; lcd.setCursor(1, 0); lcd.print("지금 재생 중입니다..."); lcd.setCursor(0, 1); lcd.print("마리오 언더월드"); int 크기 =sizeof(멜로디) / sizeof(int); for (int thisNote =0; thisNote  
    Song3아두이노
    3번째 곡의 코드입니다. 현재 Jeopardy 테마송이 로드되었습니다.
    //******************** SONG 3 NOTES HERE **************** **********void Song3() { lcd.clear();// 멜로디의 음표:int 멜로디[] ={ NOTE_C2, NOTE_F3, NOTE_C3, NOTE_A2, NOTE_A2, NOTE_C3, NOTE_F3, NOTE_C3, NOTE_C3, NOTE_F3, NOTE_C3, NOTE_F3, NOTE_AS3, NOTE_G3, NOTE_F3, NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C2, NOTE_F3, NOTE_C3, NOTE_A2, NOTE_A2, // 라인 1과 2를 반복합니다 NOTE_C3, NOTE_F3, NOTE_3, NOTE_C3, NOTE_F3, NOTEAS_C3 , NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C3};// 음 길이:4 =4분 음표, 8 =8분 음표 등:int noteDurations[] ={ 4, 4, 4, 8, 8, 4, 4, 2, 4, 4, 4, 4, 3, 8, 8, 8, 8, 8, 4, 4, 4, 8, 8, // 라인 1과 2를 반복 4, 4, 2, 4, 8, 8, 4 , 4, 4, 4, 4, 4, 0}; lcd.setCursor(1, 0); lcd.print("지금 재생 중입니다..."); lcd.setCursor(0, 1); lcd.print("위험"); for (int thisNote =0; noteDurations[thisNote] !=0; thisNote++) { // 음표 지속 시간을 계산하려면 1초를 // 음표 유형으로 나눈다. //예:4분음표 =1000/4, 8분음표 =1000/8 등 int noteDuration =2000/noteDurations[thisNote]; tone(8, 멜로디[thisNote],noteDuration * 0.9); // 음표를 구별하려면 음표 사이의 최소 시간을 설정합니다. // 메모의 지속 시간 + 30%가 잘 작동하는 것 같습니다. //int pauseBetweenNotes =noteDuration * 1.30; //지연(pauseBetweenNotes); 지연(noteDuration); }노래3제목(); } // Song3 루프 종료
    Song4아두이노
    4번째 곡의 코드입니다. 현재 짧고 일반적인 멜로디가 로드되었습니다.
    //******************** SONG 4 NOTES HERE *************** ***********void Song4() { lcd.clear();// 멜로디의 음표:int 멜로디[] ={ NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 };// 음표 길이:4 =4분 음표, 8 =8분 음표 등:int noteDurations[] ={ 4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor(1, 0); lcd.print("지금 재생 중입니다..."); lcd.setCursor(0, 1); lcd.print("노래 4 제목"); int thisNote =0; // 음표 지속 시간을 계산하려면 1초가 걸립니다. // 음표 유형으로 나눕니다. //예:4분 음표 =1000 / 4, 8분 음표 =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote++) { // 음표 지속 시간을 계산하려면 // 1초를 음표 유형으로 나눈다. //예:4분음표 =1000 / 4, 8분음표 =1000/8 등 int noteDuration =1000 / noteDurations[thisNote]; tone(8, 멜로디[thisNote], noteDuration); // 음표를 구별하려면 음표 사이의 최소 시간을 설정합니다. // 메모의 지속 시간 + 30%가 잘 작동하는 것 같습니다. int pauseBetweenNotes =noteDuration * 1.30; 지연(pauseBetweenNotes); 노톤(8); // 톤 재생 중지:} // 종료 forSong4title(); } // Song4 루프 종료
    Song5아두이노
    다섯 번째 곡의 코드입니다. 현재 짧고 일반적인 멜로디가 로드되어 있습니다.
    //******************** SONG 5 NOTES HERE *************** ***********void Song5() { lcd.clear();// 멜로디의 음표:int 멜로디[] ={ NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 };// 음표 길이:4 =4분 음표, 8 =8분 음표 등:int noteDurations[] ={ 4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor(1, 0); lcd.print("지금 재생 중입니다..."); lcd.setCursor(0, 1); lcd.print("노래 5 제목"); int thisNote =0; // 음표 지속 시간을 계산하려면 1초가 걸립니다. // 음표 유형으로 나눕니다. //예:4분 음표 =1000 / 4, 8분 음표 =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote++) { // 음표 지속 시간을 계산하려면 // 1초를 음표 유형으로 나눈다. //예:4분음표 =1000 / 4, 8분음표 =1000/8 등 int noteDuration =1000 / noteDurations[thisNote]; tone(8, 멜로디[thisNote], noteDuration); // 음표를 구별하려면 음표 사이의 최소 시간을 설정합니다. // 메모의 지속 시간 + 30%가 잘 작동하는 것 같습니다. int pauseBetweenNotes =noteDuration * 1.30; 지연(pauseBetweenNotes); 노톤(8); // 톤 재생 중지:} // 종료 forSong5title(); } // Song5 루프 종료
    pitch.h아두이노
    노래에 대한 음악 노트 라이브러리. 다른 키보드/곡 스케치와 동일한 폴더에 저장합니다.
    //******************************** *****************//** 음악 노트 정의//************************ *************************#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41# define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2#define NOTE_C2 65#define NOTE_CS2 #define NOTE_D8_define NOTE_D2#7 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS31_define_339#define NOTE_CS3 139#define NOTE_DS3#D3 define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277_define NOTE_CS4 277#define NOTE_D4 NOTE_1#DS 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE556#define NOTE_C5 523#define_5_define NOTE_CS5 554#NOTE5_E7define define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 6F3_define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_CS6 1109#define 1480 개 # 2637 #이 NOTE_F7 2794 #을 정의 NOTE_E7을 정의 NOTE_FS7 2960 #을 정의 2217 #이 2349 #이 NOTE_DS7 2489 #을 정의 NOTE_D7을 정의 NOTE_CS7을 정의 1865 #이 NOTE_B6 1976 #이 NOTE_C7 2093 #을 정의 정의 NOTE_AS6을 정의 NOTE_G6 1568 #이 NOTE_GS6 1661 #이 NOTE_A6 1760 #을 정의 정의 정의  

    회로도


    제조공정

    1. TJBot 시작하기
    2. 갈증 경보 식물 알람
    3. 이탈리아어 단어 시계
    4. Arduino + LED + MIDI 키보드 + MuseScore =피아노 교사
    5. Arduino를 사용한 간단한 장애물 센서
    6. Sigfox kWh 미터
    7. 블루투스 온도 모니터
    8. RDA5807이 있는 미니 스테레오 라디오
    9. 제스처 제어 잠금
    10. 반응 시간 측정