Купил давно, да вот только руки дошли.
Под Arch Linux начать работать с ардуино проще простого:
- собрать из AUR пакет arduino, который представляет собой среду разработки с одноименным названием, и который предложит поставить все необходимые зависимости в системе.
- добавить пользователя в группу uucp, или какая назначается на устройства типа /dev/ttyUSB0
Ну вот собственно и все, дальше уже фантазия.
Для начала сделал первые пример с мигающим светодиодом. Радости не было предела :) потом написал генератор азбуки морзе, и этот светодиод начал вымигивать год моего рождения, вот код:
// Номер вывода, по которому работаем
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 != '<br/>0'; ch = *(++tmp))
{
// пауза между словами
if(ch == ' ')
{
delay(word_space);
continue;
}
code = get_code(ch);
if(code != NULL)
{
for(sign = *code; sign != '<br/>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 для загрузки коротких текстов и автоматического проигрывания, сиречь - для изучения азбуки морзе :) Собственно идея на это и направлена :)