![]() |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Поделиться |
![]()
Сообщение
#1
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: ![]() ![]() ![]() |
Наконец-то собрался и купил Arduino Uno и к нему разных шилдов
![]() Теперь можно всласть напаяться и напрограммироваться ( естественно под ALT Linux ) Кому интересно пишем в эту тему. Несколько полезных ссылок : Для начала : http://arduino.ru./ http://f1p.ucoz.ru/publ/9-1-0-34 Простой примерчик : http://www.freeduino.ru/arduino/sample_PhysicalPixel.html - проверил , работает при помощи встроенного в программу arduino монитора порта: ![]() Паяльник как всегда рулит : http://cxem.net/arduino/arduino.php PS Все это безобразие напоминает мне старые добрые времена ![]() Сообщение отредактировал kostyalamer - 11.4.2014, 20:15 |
|
|
![]() |
![]()
Сообщение
#2
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: ![]() ![]() ![]() |
Небольшой отчет о проделанной работе :
![]() Синтезатор из arduino , старой не нужной клавы ps/2 , дешевых китайских колонок и зарядника от давно умершего телефона. А , чуть не забыл парочку RС фильтров для улучшения звука. Вполне себе приличный звук для такой балалайки на четырех октавах ( октавы переключаются по 2 ). Сейчас добавил SD -шильд и учу его играть сэмплы от синтезаторов прямо с карты памяти, в виду того что код усложнится в разы, могу если кому надо скинуть код простого не SD - шного варианта синтезатора, пока я еще его не затер ( надерган из разных мест с добавлением большого количества разных костылей от меня ) PS кто сказал что arduino не компьютер : ![]() Сообщение отредактировал kostyalamer - 12.6.2014, 23:15 |
|
|
![]()
Сообщение
#3
|
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Активный Пользователь Сообщений: 1668 Регистрация: 12.10.2010 Вставить ник Цитата Пользователь №: 1950 Страна: Россия Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
могу если кому надо скинуть код простого не SD - шного варианта синтезатора, пока я еще его не затер ( надерган из разных мест с добавлением большого количества разных костылей от меня ) Прикольно! Закидывай код ![]() Для простого ничего более самого не надо? А то у меня уже "Типа Nano" пришло ![]() Вот второй компонент пока нет, но думаю на днях должен ![]()
Прикрепленные файлы
![]() |
|
|
![]()
Сообщение
#4
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: ![]() ![]() ![]() |
Прикольно! Закидывай код ![]() Для простого ничего более самого не надо? Держи : Код #include <ps2.h> float note_len = 500000; #define play_C4 3821 // До (4 октава) #define play_Cis4 3607 // До диез #define play_D4 3404 // Ре #define play_Dis4 3213 // Ре диез #define play_E4 3033 // Ми #define play_F4 2862 // Фа #define play_Fis4 2702 // Фа диез #define play_G4 2550 // Соль #define play_Gis4 2407 // Соль диез #define play_A4 2272 // Ля #define play_Ais4 2144 // Ля диез #define play_B4 2024 // Си #define play_C5 1910 // До (5 октава) #define play_Cis5 1803 // До диез #define play_D5 1702 // Ре #define play_Dis5 1606 // Ре диез #define play_E5 1516 // Ми #define play_F5 1431 // Фа #define play_Fis5 1350 // Фа диез #define play_G5 1275 // Соль #define play_Gis5 1203 // Соль диез #define play_A5 1135 // Ля #define play_Ais5 1072 // Ля диез #define play_B5 1011 // Си // #define play_C6 955 // До (6 октава) #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 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 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_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #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_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 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 NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #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 1047 int pin = 8; int len = 500; int sint = 1; unsigned char code; PS2 kbd(6, 5); void playTone(int note ) { long elapsed_time = 0; while (elapsed_time < note_len) { digitalWrite(pin,HIGH); delayMicroseconds(note / 2); digitalWrite(pin, LOW); delayMicroseconds(note / 2); elapsed_time += (note); } } void kbd_init() { char ack; kbd.write(0xff); ack = kbd.read(); ack = kbd.read(); } void sintez() /* играет ноты длительностью len , можно нажать несколько клавиш подряд и спокойно ждать пока синтезатор все это проиграет, используется 9 цифровой выход Arduino с RC фильтром */ { Serial.println(code, HEX); pin = 9; if (code==0xE) { tone(pin,NOTE_C4,len); } // До (4 октава) else if (code==0x76) { tone(pin,NOTE_CS4,len); } // До диез else if (code==0x16) { tone(pin,NOTE_D4,len); } // Ре else if (code==0x05) { tone(pin,NOTE_DS4,len); } // Ре диез else if (code==0x1E) { tone(pin,NOTE_E4,len); } // Ми else if (code==0x26) { tone(pin,NOTE_F4,len); } // Фа else if (code==0x06) { tone(pin,NOTE_FS4,len); } // Фа диез else if (code==0x25) { tone(pin,NOTE_G4,len); } // Соль else if (code==0x04) { tone(pin,NOTE_GS4,len); } // Соль диез else if (code==0x2E) { tone(pin,NOTE_A4,len); } // Ля else if (code==0x0C) { tone(pin,NOTE_AS4,len); } // Ля диез else if (code==0x36) { tone(pin,NOTE_B4,len); } // Си else if (code==0x3D) { tone(pin,NOTE_C5,len); } // До (5 октава) else if (code==0x0B) { tone(pin,NOTE_CS5,len); } // До диез else if (code==0x3E) { tone(pin,NOTE_D5,len); } // Ре else if (code==0x83) { tone(pin,NOTE_DS5,len); } // Ре диез else if (code==0x46) { tone(pin,NOTE_E5,len); } // Ми else if (code==0x45) { tone(pin,NOTE_F5,len); } // Фа else if (code==0x01) { tone(pin,NOTE_FS5,len); } // Фа диез else if (code==0x4E) { tone(pin,NOTE_G5,len); } // Соль else if (code==0x09) { tone(pin,NOTE_GS5,len); } // Соль диез else if (code==0x55) { tone(pin,NOTE_A5,len); } // Ля else if (code==0x78) { tone(pin,NOTE_AS5,len); } // Ля диез else if (code==0x5D) { tone(pin,NOTE_B5,len); } // Си else if (code==0x66) { tone(pin,NOTE_C6,len); } // До (6 октава) else if (code==0x75) { if ( len < 1000) len= len + 100; } else if (code==0x72) { if ( len > 100 ) len= len - 100; } else if (code==0x29) { noTone(pin);} // стоп else if (code==0x70) { sint = 1; kbd.write(0xED); kbd.write(0x04); // вкл Caps Led } else if (code==0x7C) { noTone(pin); sint = 0; kbd.write(0xED); kbd.write(0x02); // вкл Num Lock Led } else if (code==0x71) { sint = 3; kbd.write(0xED); kbd.write(0x01); // вкл Scroll Led } Serial.println(code, HEX); } void sintez1() /* играет 4 и 5-ую октаву при нажатии следующей клавиши предыдущая нота перестает звучать ! используется 9 цифровой выход Arduino с RC фильтром */ { Serial.println(code, HEX); pin = 9; if (code==0xE) { playTone(play_C4); } // До (4 октава) else if (code==0x76) { playTone(play_Cis4); } // До диез else if (code==0x16) { playTone(play_D4); } // Ре else if (code==0x05) { playTone(play_Dis4); } // Ре диез else if (code==0x1E) { playTone(play_E4); } // Ми else if (code==0x26) { playTone(play_F4); } // Фа else if (code==0x06) { playTone(play_Fis4); } // Фа диез else if (code==0x25) { playTone(play_G4); } // Соль else if (code==0x04) { playTone(play_Gis4); } // Соль диез else if (code==0x2E) { playTone(play_A4); } // Ля else if (code==0x0C) { playTone(play_Ais4); } // Ля диез else if (code==0x36) { playTone(play_B4); } // Си else if (code==0x3D) { playTone(play_C5); } // До (5 октава) else if (code==0x0B) { playTone(play_Cis5); } // До диез else if (code==0x3E) { playTone(play_D5); } // Ре else if (code==0x83) { playTone(play_Dis5); } // Ре диез else if (code==0x46) { playTone(play_E5); } // Ми else if (code==0x45) { playTone(play_F5); } // Фа else if (code==0x01) { playTone(play_Fis5); } // Фа диез else if (code==0x4E) { playTone(play_G5); } // Соль else if (code==0x09) { playTone(play_Gis5); } // Соль диез else if (code==0x55) { playTone(play_A5); } // Ля else if (code==0x78) { playTone(play_Ais5); } // Ля диез else if (code==0x5D) { playTone(play_B5); } // Си else if (code==0x66) { playTone(play_C6); } // До (6 октава) else if (code==0x75) { if ( note_len < 500000) note_len= note_len + 100000; } else if (code==0x72) { if ( note_len > 100000 ) note_len= note_len - 100000; } else if (code==0x70) { sint = 1; kbd.write(0xED); kbd.write(0x04); // вкл Caps Led } else if (code==0x7C) { noTone(pin); sint = 0; kbd.write(0xED); kbd.write(0x02); // вкл Num Lock Led } else if (code==0x71) { sint = 3; kbd.write(0xED); kbd.write(0x01); // вкл Scroll Led } Serial.println(code, HEX); } void sintez2() /* играет басы , при нажатии следующей клавиши предыдущая нота перестает звучать ! используется 8 цифровой выход Arduino с RC фильтром */ { Serial.println(code, HEX); pin = 8; if (code==0xE) { tone(pin,NOTE_C2,len); } // До (2 октава) else if (code==0x76) { tone(pin,NOTE_CS2,len); } // До диез else if (code==0x16) { tone(pin,NOTE_D2,len); } // Ре else if (code==0x05) { tone(pin,NOTE_DS2,len); } // Ре диез else if (code==0x1E) { tone(pin,NOTE_E2,len); } // Ми else if (code==0x26) { tone(pin,NOTE_F2,len); } // Фа else if (code==0x06) { tone(pin,NOTE_FS2,len); } // Фа диез else if (code==0x25) { tone(pin,NOTE_G2,len); } // Соль else if (code==0x04) { tone(pin,NOTE_GS2,len); } // Соль диез else if (code==0x2E) { tone(pin,NOTE_A2,len); } // Ля else if (code==0x0C) { tone(pin,NOTE_AS2,len); } // Ля диез else if (code==0x36) { tone(pin,NOTE_B2,len); } // Си else if (code==0x3D) { tone(pin,NOTE_C3,len); } // До (3 октава) else if (code==0x0B) { tone(pin,NOTE_CS3,len); } // До диез else if (code==0x3E) { tone(pin,NOTE_D3,len); } // Ре else if (code==0x83) { tone(pin,NOTE_DS3,len); } // Ре диез else if (code==0x46) { tone(pin,NOTE_E3,len); } // Ми else if (code==0x45) { tone(pin,NOTE_F3,len); } // Фа else if (code==0x01) { tone(pin,NOTE_FS3,len); } // Фа диез else if (code==0x4E) { tone(pin,NOTE_G3,len); } // Соль else if (code==0x09) { tone(pin,NOTE_GS3,len); } // Соль диез else if (code==0x55) { tone(pin,NOTE_A3,len); } // Ля else if (code==0x78) { tone(pin,NOTE_AS3,len); } // Ля диез else if (code==0x5D) { tone(pin,NOTE_B3,len); } // Си else if (code==0x66) { tone(pin,NOTE_C4,len); } // До (4 октава) else if (code==0x75) { if ( len < 1000) len= len + 100; } else if (code==0x72) { if ( len > 100 ) len= len - 100; } else if (code==0x29) { noTone(pin);} // стоп else if (code==0x70) { sint = 1; kbd.write(0xED); kbd.write(0x04); // вкл Caps Led } else if (code==0x7C) { sint = 1; kbd.write(0xED); kbd.write(0x02); // вкл Caps Led } else if (code==0x71) { sint = 3; kbd.write(0xED); kbd.write(0x01); // вкл Ssroll Led } Serial.println(code, HEX); } void key() { code = kbd.read(); if (code==0xF0) { code = kbd.read(); code=0; } Serial.println(code, HEX); } void setup(){ // myOS.begin(); Serial.begin(9600); pinMode(9,OUTPUT); pinMode(8,OUTPUT); kbd_init(); sint = 0; kbd.write(0xED); kbd.write(0x02); // вкл Num Lock Led //myOS.addTask(key, 1000); } void loop() { //note_len = len*10000; key(); if ( sint == 0 ) { sintez1 ();} else if ( sint == 1 ) { sintez(); } else if ( sint == 3 ) { sintez2(); } } Собственно внутри этой проги 2 синтезатора - один простой на две октавы, второй сложнее и интереснее на 4 , переключение между ними по нажатию клавиш Home , Insert , Delete на клавиатуре. Код получился достаточно корявый , но работает ![]() Больше ничего не надо , я правда еще доставал из кладовки осциллограф для настройки фильтров ( считать их было лень ), но можно и на слух или вообще их не ставить ( правда звучек тогда будет еще тот ). У меня 2 фильтра на 8 и 9 пинах , если ставить один то либо басы хрюкают, либо 4-ую и 5-ую октаву сильно режет . Сообщение отредактировал kostyalamer - 13.6.2014, 10:00 |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 7.9.2025, 16:00 |