Ovládání hlasitosti jinak než na reproduktorech či v systému? Není problém. V tomto článku si ukážeme, jak je snadné zacházet z arduinem, ukážeme si jednu z možností sériové komunikace - pomocí linux tty, vše budeme psáv klasicky v Javě a budeme regulovat hlasitost v přehrávači amaroK. Ohledně arduina a potřebných součástek - budeme potřebovat jen arduino samotné a jeden potenciometr (osobně jsem volil 10k).
Toto je pouze demonstrační video, na kterém můžete vidět také generovaný graf reagující na pohyb potenciometru. Třídu s grafem a návodem k použití naleznete zde.
Začneme zapojením arduina. Aktuální hodnotu potenciometru budeme číst z nultého analogového pinu. Nemá zde asi smysl popisovat zapojení potenciometru do arduina. Kdyby náhodou někdo opravdu nevěděl, jak potenciometr zapojit, tak by mu měl pomoci následující obrázek.

Nyní nám stačí napsat velice jednoduchý program pro arduino, který bude hodnotu potenciometru na nultém pinu číst a následně posílat přečtená data.
const int potenciometrPin = 0; //pin potenciometru
int hodnotaPotenciometru; //aktualni hodnota potenciometru
void setup() {
Serial.begin(9600); //zapnuti zapisovaciho zarizeni
}
void loop() {
hodnotaPotenciometru = analogRead(potenciometrPin);
Serial.println(hodnotaPotenciometru);
delay(200);
}
Předchozí kód jen skompilujeme a nahrajeme do arduina - tímto krokem je arduino připravené, tedy zapojené a má v sobě nahraný potřebný program.
Jak jsem zmínil na začátku článku, tak data z arduina budeme číst pomocí Linux TTY.
Jestli vše funguje jak má, můžete jednoduše zjistit příkazem - tail -f /dev/ttyUSB0 - pokud je vše v pořádku, tak se vám budou vypisovat aktuální hodnoty potenciometru v terminálu.
K ovládání zvuku amaroku jsem použil DCOP, což je desktopový komunikační protokol, díky kterému můžeme pomocí příkazů ovládat různé desktopové GUI aplikace - tedy i náš amaroK. Následující kód je jen ukázka a jedna z možností, jak lze data z /dev/ttyUSB0 číst a jak předávat data dalším programům. Každý si ho může přepsat tak, jak a na co se mu to zrovna hodí - možností je opravdu mnoho.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
//variables
int actualPercent = 0;
int testChange = 0;
float onePercent = (float) (100.0 / 1023);
String line = "";
String commandDcop = "dcop amarok player setVolume ";
try {
//creation process
Process proc = Runtime.getRuntime().exec("tail -f /dev/ttyUSB0");
//reading output from process
InputStream input = proc.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(input));
//before exist output from process repeate
while((line = reader.readLine()) != null) {
//actual percent
actualPercent = (int) (onePercent * Integer.parseInt(line));
if(actualPercent != testChange) {
//exec command
Runtime.getRuntime().exec(commandDcop + actualPercent);
//load new testChange
testChange = actualPercent;
}
//sleep thread
Thread.sleep(100);
}
} catch(IOException ex) {
ex.printStackTrace();
} catch(InterruptedException ex) {
ex.printStackTrace();
}
}
}
Pokud nyní máte arduino připojené k PC, stačí kód skompilovat a spustit. Jestliže máte DCOP, amaroK a funční Linux tty, tak by vše mělo fungovat jako na demonstračním videu na začátku článku.
