2013-04-04 17 views
5

Niedawno dostałem w swoje ręce Arduino (Uno) i zastanawiałem się nad czymś.Użyj sygnałów Arduino jako wejścia na PC?

Nie mam zewnętrznej zmieniarki woluminu dla moich głośników, więc pomyślałem, że może podłączę potencjometr do Arduino, a następnie użyję go do sterowania głośnością (w Windowsie). Ale czy to możliwe?

Aby odczytać wartość pinów Arduino za pomocą być może Visual C, C++ (lub jakiegoś bardziej "wieloplatformowego" języka)? A następnie za pomocą tego, aby ustawić poziom głośności w systemie Windows (i jeśli jest to możliwe również w systemie Linux).

Pomyślałem, że może to być możliwe, ponieważ jeśli używasz:

Serial.println(analogRead([pin with potentiometer])); 

można uzyskać wartości potencjometru do komputera (przez USB). Czy istnieje sposób na odczytanie tych wartości w C lub C++?

W jaki sposób ustawić głośność w systemie Windows za pomocą C lub C++, muszę tylko wiedzieć, czy istnieje sposób na odczytanie wartości potencjometru w skrypcie (Visual) C lub C++.

+1

Możesz otworzyć odpowiedni port COM i użyć komunikacji szeregowej między komputerem a Arduino. – helloworld922

Odpowiedz

6

Zdecydowanie. I używając dokładnie tej samej metody: komunikacji szeregowej. Ponieważ nie jestem świetnym ekspertem od Windowsa, nie mogę napisać ci kompletnego przykładu Windowsa, ale oto kilka fragmentów, które mogą Ci pomóc w uruchamianiu Uniksa (Linux, OS X, itp.):

Kod na Arduino:

#define POT_PIN 1 

void setup() 
{ 
    Serial.begin(9600); // 9600 baud is more than enough 
} 

void loop() 
{ 
    int pot = analogRead(POT_PIN); 
    unsigned char byte = (pot + 2) >> 2; // round and divide by 4 
    Serial.write(pot); 
    delay(100); // or do something useful 
} 

kod na komputerze:

#include <termios.h> 

struct termios tio; 
memset(&tio, 0, sizeof(tio)); 

// Open serial port in mode `8N1', non-blocking 
tio.c_cflag = CS8 | CREAD | CLOCAL; 
tio.c_cc[VMIN] = 1; 
tio.c_cc[VTIME] = 5; 

int fd = open(device, O_RDONLY); 

cfsetospeed(&tio, B9600); 
cfsetispeed(&tio, B9600); 
tcsetattr(fd, TCSANOW, &tio); 

while (1) { 
    unsigned char byte; 
    read(fd, &byte, 1); 
    use_some_library_to_set_volume(byte); 
} 
+0

Dzięki! Kod działa, ale nie mogę znaleźć sposobu na uzyskanie właściwej wartości. Mój Arduino używa teraz polecenia 'Serial.println()', aby wysłać zmienną od 0 do 100 z powrotem do komputera.Ale z jakiegoś powodu, drukowanie zmiennej na ekranie z 'std :: cout << byte;' działa dobrze, ale jak mogę to zrobić w zmiennej, której mogę użyć do ustawienia głośności? Próbowałem wielu rzeczy, ale nic nie działa do tej pory ... (Mój kod Arduino: http://pastebin.com/JXetGJvh, mój kod C++: http://pastebin.com/95K4R1jQ) – Jers

+0

@brickmasterj I "Jestem pewien, że Windows API udostępnia funkcje do ustawiania głośności systemu. –

+0

Wiem, i na Linuksie jest też API, ale nie o to mi chodzi; Chodzi mi o to, że nie mogę pobrać drukowanej zmiennej do zmiennej, którą mogę następnie użyć do ustawienia głośności. Ponieważ zmienna 'byte' w kodzie zawiera większość czasu nic lub podział wiersza. Ale nie wiem, jak sobie z tym poradzić, poza drukowaniem. – Jers

0

jest kilka rzeczy do rozważenia.

  • Chcesz, aby komputer słuchał tylko Twojego "potencjometru Arduino". Nie chcesz, aby słuchał losowych danych USB przychodzących z dowolnego portu. Istnieje potrzeba utworzenia protokołu danych, który jest nieco unikalny dla twojego urządzenia. Jeśli po prostu spamujesz odczyty analogowe, otrzymasz surowe dane, takie jak "123 128 133 145", które mogą oznaczać wszystko i pochodzić z dowolnego urządzenia.

  • Po wpisaniu Serial.whatever, Arduino prawdopodobnie wypluje sygnał UART. Nie wiem nic na temat Arduino, ale mam nadzieję, że ma na pokładzie RS-232 lub USB. Będziesz potrzebował pasującego portu na PC, tradycyjne złącze RS-232 9-pin d-sub staje się coraz rzadsze na nowoczesnych komputerach. Możesz potrzebować konwertera RS-232 na USB.

  • Potrzebujesz środka, aby określić, do którego portu COM jest podłączone urządzenie. Porty USB i tradycyjne porty RS-232 działają tak samo, jeśli chodzi o komputer. Pozwól użytkownikowi wybrać port ręcznie lub zaprojektuj bardziej inteligentny algorytm, aby znaleźć port, do którego podłączone jest twoje urządzenie.

  • Badanie interfejsu API systemu Windows dla wszystkich procedur portów szeregowych. Dokumentacja i przykłady pod adresem MSDN.