Купил давно, да вот только руки дошли.
Под Arch Linux начать работать с ардуино проще простого:
Ну вот собственно и все, дальше уже фантазия.
Для начала сделал первые пример с мигающим светодиодом. Радости не было предела :) потом написал генератор азбуки морзе, и этот светодиод начал вымигивать год моего рождения, вот код:
// Номер вывода, по которому работаем const int pin = 13; // фраза, которую нужно произнести //char *txt = "hello world"; char *txt = "08 01 1984"; //char *txt = "a a aa aa"; #define dot (100) #define tire ((dot)*3) #define letter_space ((dot)*3 - (dot)) #define word_space ((dot)*7 - (letter_space)) char *get_code(char letter) { char *code = NULL; switch(letter) { case 'a': code = ".-"; break; case 'b': code = "-..."; break; case 'c': code = "-.-."; break; case 'd': code = "-.."; break; case 'e': code = "."; break; case 'f': code = "..-."; break; case 'g': code = "--."; break; case 'h': code = "...."; break; case 'i': code = ".."; break; case 'j': code = ".---"; break; case 'k': code = "-.-"; break; case 'l': code = ".-.."; break; case 'm': code = "--"; break; case 'n': code = "-."; break; case 'o': code = "---"; break; case 'p': code = ".--."; break; case 'q': code = "--.-"; break; case 'r': code = ".-."; break; case 's': code = "..."; break; case 't': code = "-"; break; case 'u': code = "..-"; break; case 'v': code = "...-"; break; case 'w': code = ".--"; break; case 'x': code = "-..-"; break; case 'y': code = "-.--"; break; case 'z': code = "--.."; break; case '1': code = ".----"; break; case '2': code = "..---"; break; case '3': code = "...--"; break; case '4': code = "....-"; break; case '5': code = "....."; break; case '6': code = "-...."; break; case '7': code = "--..."; break; case '8': code = "---.."; break; case '9': code = "----."; break; case '0': code = "-----"; break; } return code; } void beep(char on_off) { if(on_off) { digitalWrite(pin, HIGH); } else { digitalWrite(pin, LOW); } } void setup() { pinMode(pin, OUTPUT); } void loop() { char ch; char *tmp = txt; char *code; char sign; for(ch = *tmp; ch != '\0'; ch = *(++tmp)) { // пауза между словами if(ch == ' ') { delay(word_space); continue; } code = get_code(ch); if(code != NULL) { for(sign = *code; sign != '\0'; sign = *(++code)) { beep(1); switch(sign) { case '.': delay(dot); break; // звучит точка case '-': delay(tire); break; // звучти тире } beep(0); delay(dot); // пауза между элементами одного знака } delay(letter_space); // пауза после знака } } delay(word_space*4); // пауза до следующей итерации }
#define вместе const .. позволили несколько уменьшить объем кода. Да, это далеко не оптимальный вариант, но главное что работае.
Далее решил это озвучить, можно сделать тон и генарацией прямоугольных импульсов, на одном цифровом выходе и выдачей управления на другом, но решил пока не усложнять программу, а вспомнить пайку :)
Пока консруктивно получилась такая страшная штука:
Вот такая страхообразиа :)
Схему и более-менее финальную (потому что сделаю без разводки, на небольшой макетке) кострукцию покажу в последующих постах, как и описание подробное :)
А краткое описание такое: на макетке собран генератор прямоугольных импульсов на двух транзисторах (КТ315 и КТ361), сигнал подается на капсуль низкоомного головного телефона (ТА-56М, 50 Ом), питание подается с разъема 5V платы Arduino через ключ на биполярном транзисторе КТ315, управляющий сигнал подается на ключ (базу транзитора) с цифрового выхода 13 платы Arduino. Запитывал плату от USB, питания хватало и на генератор.
На текущий момент практическая польза от устройства стремиться к нулю, но как вариант, доделывается взаимодействие с PC через USB для загрузки коротких текстов и автоматического проигрывания, сиречь - для изучения азбуки морзе :) Собственно идея на это и направлена :)
Дискуссия