Как и в любой сфере деятельности начать лучше с проверенных "Академических" задач, расписанных в подробностях в литературе (в Тырнете). Выбрать одну - тут уж на свой вкус, и решить ее - т.е. пройти весь путь от задумки, задачи, до проекта, разработки и реализации. Т.о. на конкретной, давно всеми решенной задаче изучить и отработать порядок работы. Параллельно не забывать, и выполнять упражнения - микрозадачки.
я сделал пианино сначало из трёх кнопок потом добавил ещё две вот #define BUZZER_PIN 13 // пин с пищалкой (англ. «buzzer») #define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key») #define KEY_COUNT 5 // общее количество клавиш void setup() { pinMode(BUZZER_PIN, OUTPUT); } void loop() { // в цикле бежим по всем номерам кнопок от 0-го по 2-й for (int i = 0; i < KEY_COUNT; ++i) { // на основе номера кнопки вычисляем номер её пина int keyPin = i + FIRST_KEY_PIN; // считываем значение с кнопки. Возможны всего 2 варианта: // * высокий сигнал, 5 вольт, истина — кнопка отпущена // * низкий сигнал, земля, ложь — кнопка зажата boolean keyUp = digitalRead(keyPin); // проверяем условие «если не кнопка отпущена». Знак «!» // перед булевой переменной означает отрицание, т.е. «не». if (!keyUp) { // рассчитываем высоту ноты в герцах в зависимости от // клавиши, которую рассматриваем на данном этапе цикла. // Мы получим значение 3500, 4000 или 4500 int frequency = 3500 + i * 500; // Заставляем пищалку пищать с нужной частотой в течение // 20 миллисекунд. Если клавиша останется зажатой, пищалка // вновь зазвучит при следующем проходе loop, а мы услышим // непрерывный звук tone(BUZZER_PIN, frequency, 20); } } }
Сделай клавиатуру на одну октаву, включая диезы. Оптимизируй код, частоты в массив, номера пинов в массив. Потом сделай то же самое но через сдвиговый регистр. Вот тебе на первое время заданий.
Я кода не вижу! Код это так: Код (C++): #define BUZZER_PIN 13 // пин с пищалкой (англ. «buzzer») #define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key») #define KEY_COUNT 5 // общее количество клавиш void setup() { pinMode(BUZZER_PIN, OUTPUT); } void loop() { // в цикле бежим по всем номерам кнопок от 0-го по 2-й for (int i = 0; i < KEY_COUNT; ++i) { // на основе номера кнопки вычисляем номер её пина int keyPin = i + FIRST_KEY_PIN; // считываем значение с кнопки. Возможны всего 2 варианта: // * высокий сигнал, 5 вольт, истина — кнопка отпущена // * низкий сигнал, земля, ложь — кнопка зажата boolean keyUp = digitalRead(keyPin); // проверяем условие «если не кнопка отпущена». Знак «!» // перед булевой переменной означает отрицание, т.е. «не». if (!keyUp) { // рассчитываем высоту ноты в герцах в зависимости от // клавиши, которую рассматриваем на данном этапе цикла. // Мы получим значение 3500, 4000 или 4500 int frequency = 3500 + i * 500; // Заставляем пищалку пищать с нужной частотой в течение // 20 миллисекунд. Если клавиша останется зажатой, пищалка // вновь зазвучит при следующем проходе loop, а мы услышим // непрерывный звук tone(BUZZER_PIN, frequency, 20); } } }