{"id":168,"date":"2024-10-15T14:37:53","date_gmt":"2024-10-15T18:37:53","guid":{"rendered":"https:\/\/wp.stgeorges.bc.ca\/felixh\/?p=168"},"modified":"2024-11-30T17:43:21","modified_gmt":"2024-11-30T22:43:21","slug":"mini-arduino-piano","status":"publish","type":"post","link":"https:\/\/wp.stgeorges.bc.ca\/felixh\/2024\/10\/15\/mini-arduino-piano\/","title":{"rendered":"how I cured my lack of musical prowess"},"content":{"rendered":"\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-da9a0268 wp-block-columns-is-layout-flex\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:var(--wp--preset--spacing--20);padding-bottom:0;padding-left:var(--wp--preset--spacing--20)\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p style=\"margin-top:0;margin-right:0px;margin-bottom:0;margin-left:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">Hello all! Have you ever wanted to create musical tunes on the fly? If you have, then look no further. This is my first Arduino project for the year and it is a simple Arduino Piano.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized is-style-rounded wp-container-content-9cfa9a5a is-style-rounded--1\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"800\" src=\"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano-2.png\" alt=\"\" class=\"wp-image-171\" style=\"width:480px;height:auto\" srcset=\"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano-2.png 727w, https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano-2-273x300.png 273w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-rounded wp-container-content-9cfa9a5a is-style-rounded--2\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"541\" src=\"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano.png\" alt=\"\" class=\"wp-image-172\" style=\"width:782px;height:auto\" srcset=\"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano.png 800w, https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano-300x203.png 300w, https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-content\/uploads\/sites\/11\/2024\/10\/Arduino-Piano-768x519.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p><\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading alignwide\">Components and Supplies<\/h3>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<ul style=\"padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\" class=\"wp-block-list is-style-default has-medium-font-size\">\n<li style=\"padding-right:0;padding-left:0;font-size:clamp(0.929rem, 0.929rem + ((1vw - 0.2rem) * 0.785), 1.4rem);\"><a href=\"https:\/\/www.amazon.ca\/s?k=breadboard&amp;crid=1YW8KGS8GNC01&amp;sprefix=breadboard+%2Caps%2C194&amp;ref=nb_sb_noss_2\" data-type=\"link\" data-id=\"https:\/\/www.amazon.ca\/s?k=breadboard&amp;crid=1YW8KGS8GNC01&amp;sprefix=breadboard+%2Caps%2C194&amp;ref=nb_sb_noss_2\" target=\"_blank\" rel=\"noreferrer noopener\">Breadboard<\/a><\/li>\n\n\n\n<li style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-size:clamp(0.929rem, 0.929rem + ((1vw - 0.2rem) * 0.785), 1.4rem);\"><a href=\"https:\/\/www.amazon.ca\/s?k=jumper+wires&amp;crid=3K9CGG2RA6NSK&amp;sprefix=jumper+wires%2Caps%2C224&amp;ref=nb_sb_noss_1\" target=\"_blank\" rel=\"noreferrer noopener\">Jumper Wires<\/a><\/li>\n\n\n\n<li style=\"padding-right:0;padding-left:0;font-size:clamp(0.929rem, 0.929rem + ((1vw - 0.2rem) * 0.785), 1.4rem);\"><a href=\"https:\/\/www.amazon.ca\/s?k=arduino+uno&amp;crid=34A6D0LTEQPZ6&amp;sprefix=arduino+uno%2Caps%2C197&amp;ref=nb_sb_noss_1\" data-type=\"link\" data-id=\"https:\/\/www.amazon.ca\/s?k=breadboard&amp;crid=1YW8KGS8GNC01&amp;sprefix=breadboard+%2Caps%2C194&amp;ref=nb_sb_noss_2\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino UNO<\/a><\/li>\n\n\n\n<li style=\"padding-right:0;padding-left:0;font-size:clamp(0.929rem, 0.929rem + ((1vw - 0.2rem) * 0.785), 1.4rem);\">Buzzer (I use the <a href=\"https:\/\/www.ebay.ca\/sch\/i.html?_from=R40&amp;_trksid=p2332490.m570.l1313&amp;_nkw=pkm22epp-40&amp;_sacat=0\" target=\"_blank\" rel=\"noreferrer noopener\">Murata PKM22EPP-40<\/a>)<\/li>\n\n\n\n<li style=\"padding-right:0;padding-left:0;font-size:clamp(0.929rem, 0.929rem + ((1vw - 0.2rem) * 0.785), 1.4rem);\"><a href=\"https:\/\/www.amazon.ca\/s?k=daoki+arduino+push+buttons&amp;i=tools&amp;crid=A5YVJTBJF81&amp;sprefix=daoki+arduino+push+buttons%2Ctools%2C144&amp;ref=nb_sb_noss\" data-type=\"link\" data-id=\"https:\/\/www.amazon.ca\/s?k=daoki+arduino+push+buttons&amp;i=tools&amp;crid=A5YVJTBJF81&amp;sprefix=daoki+arduino+push+buttons%2Ctools%2C144&amp;ref=nb_sb_noss\" target=\"_blank\" rel=\"noreferrer noopener\">Buttons<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator alignwide has-alpha-channel-opacity is-style-wide\" style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--20)\" \/>\n\n\n\n<h3 class=\"wp-block-heading alignwide\">Wiring<\/h3>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-f1061711 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">The wiring for this contraption is very simple. The buttons are connected to D5 to D10 and the piezo buzzer goes into D11 of the Arduino. They also all go into GND.<\/p>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator alignwide has-alpha-channel-opacity is-style-wide\" style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--20)\" \/>\n\n\n\n<h3 class=\"wp-block-heading alignwide\">Coding<\/h3>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p style=\"padding-right:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30);font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">The coding for the piano is unfortunately a little more complicated than the wiring, although still relatively simple.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide is-horizontal is-content-justification-space-between is-nowrap is-layout-flex wp-container-core-group-is-layout-1e313b3d wp-block-group-is-layout-flex\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-left\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30);font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">I first defined the musical note frequencies as constants. These frequencies represent different pitches in Hertz. You can use any notes you want, but I have used the notes C &#8211; A from the fourth octave in this code.<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10)\">\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-8374a12d wp-block-group-is-layout-constrained\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:0;padding-bottom:var(--wp--preset--spacing--30);padding-left:0\">\n<p style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">Then, I created two arrays and a <code>buzz<\/code> variable to make the process easier:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"padding-top:0;padding-bottom:0\"><code>notes[]<\/code>, which contain the pin numbers for the input buttons (10, 9, 8, 7, 6, 5).<\/li>\n\n\n\n<li><code>tones[]<\/code>, which contain the corresponding frequencies (C, D, E, F, G, A) that are played when the corresponding button is pressed.<\/li>\n\n\n\n<li><code>buzz<\/code> contains the pin number for the buzzer that plays the tones (11).<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p style=\"padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--30);font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">In the <code>setup()<\/code> function, I used a loop to iterate through the <code>notes[]<\/code> array to initialize each button as an input with an internal pull-up resistor using <code>pinmode()<\/code>. The pull-up resistor ensures that the input pin reads HIGH(no button pressed) by default and reads <code>LOW<\/code> when the button is pressed.<\/p>\n\n\n\n<p style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--30);font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">The <code>loop()<\/code> function continuously checks the state of each button using multiple if statements. The program checks each button in sequence using digitalRead(). If a button is pressed(LOW), the corresponding note is played using the tone() function, which sends the frequency to the buzzer connected to pin 11. If no button is pressed, <code>noTone(buzz)<\/code> is called to stop the sound.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<pre class=\"wp-block-code has-medium-font-size\"><code>#define C 262\n#define D 294\n#define E 330\n#define F 349\n#define G 392\n#define A 440\n\n\nconst int notes&#091;] = {10, 9, 8, 7, 6, 5};\nconst int tones&#091;] = {C, D, E, F, G, A};\nconst int buzz = 11;\n\n\n\n\nvoid setup() {\n  for (int i = 0; i &lt; 6; i++) {\n    pinMode(notes&#091;i], INPUT);\n    digitalWrite(notes&#091;i], HIGH); \n  }\n}\n\n\n\nvoid loop() {\n  while(1){\n    if(digitalRead(notes&#091;0]) == LOW){\n      tone(buzz, tones&#091;0]);\n    } else if (digitalRead(notes&#091;1]) == LOW){\n      tone(buzz, tones&#091;1]);\n    } else if (digitalRead(notes&#091;2]) == LOW){\n      tone(buzz, tones&#091;2]);\n    } else if (digitalRead(notes&#091;3]) == LOW){\n      tone(buzz, tones&#091;3]);\n    } else if (digitalRead(notes&#091;4]) == LOW){\n      tone(buzz, tones&#091;4]);\n    } else if (digitalRead(notes&#091;5]) == LOW){\n      tone(buzz, tones&#091;5]);\n    } else {\n      noTone(buzz);\n    }\n  }\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">Here is how it should look and work at the end:<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Mini Arduino Piano\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/sIpdH3KfOp0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.542), 1.2rem);\">Thank you for reading this blog post. I hope you have a nice day!<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-buttons alignwide is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-25 has-custom-font-size has-medium-font-size\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/wp.stgeorges.bc.ca\/felixh\/\">Back to Home<\/a><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator alignfull has-alpha-channel-opacity is-style-dots\" \/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello all! Have you ever wanted to create musical tunes on the fly? If you have, then look no further. This is my first Arduino project for the year and it is a simple Arduino Piano. Components and Supplies Wiring The wiring for this contraption is very simple. The buttons are connected to D5 to [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-168","post","type-post","status-publish","format-standard","hentry","category-beginner-projects"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/posts\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/comments?post=168"}],"version-history":[{"count":41,"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/posts\/168\/revisions"}],"predecessor-version":[{"id":276,"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/posts\/168\/revisions\/276"}],"wp:attachment":[{"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/media?parent=168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/categories?post=168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.stgeorges.bc.ca\/felixh\/wp-json\/wp\/v2\/tags?post=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}