๋ชฉ๋ก์ ์ฒด ๊ธ (1005)
๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bzv831/btsz5n7G9DL/Agy7sI8Tr6eUQxkU5P0M5K/img.png)
โญ ์กฐ์ด์คํฑ x, y X์ถ์ ์ฝ๊ณ X์ถ์ ๊ฐ์ ๋ง์กฑํ๋ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ด ๊ฒฐ์ ๋๋ฉด์ Y์ถ์ ๋ฌด์ํ๊ณ ๋์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ X์ถ์ ๋ฐฉํฅํค๋ฅผ ๊ตฌํ๊ณ Y์ถ์ ๋ฐฉํฅํค๋ฅผ ๊ตฌํ๋ ์์ ๋ฐ๋ก if๋ฌธ์ ๋ถ๋ฆฌํด์ ์ฝ๋ฉํ ๊ฒ AXIS_X ๊ธฐ์ค ์ ํธ๋ก ๋ณด๋ฉด ๊ธฐ์ค ์ ํธ ๊ฐ์์ +, - ๊ฐ์ธ ๋์ค ํ๋์ํ๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ. ๋์ ์ค๋ฅธ์ชฝ, ์ผ์ชฝ์ด ๋์ฌ ์ ์์ต๋๋ค. ๊ทธ๋์ if~else if๋ฌธ์ ์ฌ์ฉ const int AXIS_X = A0; const int AXIS_Y = A1; const int SW_P = 3; void setup() { Serial.begin(9600); pinMode(SW_P,INPUT_PULLUP); } void loop() { //X์ถ ๋ฐฉํฅ๊ฐ if(analogRead(AXIS_X)=700){ Seri..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cHGgQ7/btsz52WvpGf/TVjQ0PBASeRyUF96BbhUJk/img.png)
โญ client ์์ ๋ฐ์ message ๋ฅผ serial ํต์ ํตํด arduino ๋ก ์ ์ก โญ server.c #include #include #include #include #include #include #define BUF_SIZE 16 void error_handling(char *message); int main(int argc, char *argv[]) { // ์๋ฒ, ํด๋ผ์ด์ธํธ ์์ผ ํ์ผ๋์คํฌ๋ฆฝํฐ ๋ณ์ ์ ์ธ int serv_sock, clnt_sock; char message[BUF_SIZE]; int str_len, i; // sockaddr_in ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ struct sockaddr_in serv_adr, clnt_adr; socklen_t clnt_adr_sz; if(argc ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bh0cwO/btsz3K3dTkQ/3U21gnEDu1Dg9AToikDB21/img.png)
โญ Joystick button ๋ง๋ค lcd ์ถ๋ ฅ โ Wire.h I2C ํต์ ์ ํ๋๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ๋ง์คํฐ ํ๋์ ์ฌ๋ ์ด๋ธ ์ฌ๋ฌ๋๋ฅผ ํต์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. SDA๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ก๊ณผ ์ก์ ์ ํ๋ ๋ฐ์ด์ค(์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ์ง๋ง ์ก์ ๊ณผ ์์ ์ค์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ค.) SCL์ ๊ธฐ์ค ํด๋ญ์ ์ฌ๋ ์ด๋ธ์๊ฒ ์ ๋ฌํ๋ค. ์ฌ๋ ์ด๋ธ์ ๊ตฌ๋ณ์ ์ฃผ์๋ก ํ๊ธฐ ๋๋ฌธ์ ๊ธด ๋ฐ์ดํฐ์ ๊ตํ์๋ ์ ํฉํ์ง ์๋ค. ํด๋ญ์ ๊ฐ์ง๊ณ ํต์ ํ๋ฏ๋ก ๋๊ธฐ์ ํต์ ์ด ๊ฐ๋ฅํ๋ค. arduino(uno๋ ์ ์ธ)์๋ I2C ํต์ ์ ํ ์ ์๋ ์นฉ์ด ๋ด์ฅ๋์ด์๋ค. // mytest.ino //#include "test2.h" // LiquidCrystal ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ #include #include #include "test2.h" // ์กฐ์ด์คํฑ ์ด๋์ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/deQH3C/btsz3cMoLky/GdDhoJlQXgEJw7lISBfAck/img.png)
โญ ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ ์๋ฆฌ์ผ ํต์ ํ๊ธฐ /dev/tty~ ๋ผ๋ ์ด๋ฆ์ ์ฅ์น๋ฅผ ์ ์์ค ํจ์๋ก ์ ์ด ์ค์ ์ฅ์น๊ฐ ์์ผ๋ฉด ์ปดํจํฐ์ ๊ฐ์ ํฌํธ๋ฅผ ์ค์นํ๋ฉด ๋๋ค ๋ฆฌ๋ ์ค์ c(์บ๋ฆญํฐ ์ฅ์น{1๋ฐ์ดํธ์ฉ ํต์ ๋ชฉ์ })์ธ tty~๊ฐ ํ์ผํํ๋ก ์์ฑ โญ struct termios ์๋ฆฌ์ผ ํฌํธ์ ์ ์ถ๋ ฅ์ ์ค์ ํ๋ ๊ตฌ์กฐ์ฒด ์์ผ ๋คํธ์ํฌ์์ ๋คํธ์ํฌ ์ ๋ณด๋ฅผ ์ค์ ํ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๊ฒ ์ฌ์ฉ๋จ POSIX๊ฐ ์ง์ ํ ํ์ค ์ธํฐํ์ด์ค ์ด์์ฒด์ ํ์ค์์ ๋ง์กฑํ๋ค ๊ตฌ์กฐ์ฒด ํญ๋ชฉ c_iflag: ํฐ๋ฏธ๋ ์ ๋ ฅ์ ๋ํด ์ค์ c_oflag: ํฐ๋ฏธ๋ ์ถ๋ ฅ์ ๋ํด ์ค์ c_cflag: ํฐ๋ฏธ๋ ์ ์ด์ ๋ํด ์ค์ (๋ฐ์ดํฐ ๋นํธ, ํจ๋ฆฌํฐ ๋ฑ) โญ ์๋ฆฌ์ผ ํต์ ๋ฐฉ์ 1) canonical ์ํฐ์ ๋ ฅ ๋๊ธฐ (ํฐ๋ฏธ๋ ์ ๋ ฅ์ ์์ค๋ฌธ์('\n'), EOF(End of file)..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cUu181/btsz5oZPwyF/mlnhXdfWDpz3dGJgAdjjDk/img.png)
โญ ์์ผ ๋ ํ๋ก๊ทธ๋จ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ก ํต์ ํ ์ ์๋๋ก ์์ชฝ์ ์์ฑ๋๋ ๋งํฌ์ ๋จ์ ์์ผ์ด ์ฐ๊ฒฐ๋๋ฉด ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ ๐ Server 1) socket() Socket discriptor ์์ฑ int socket(int domain, int type, int protocol); ์ฑ๊ณต ์ fd (ํ์ผ ๋์คํฌ๋ฆฝํฐ), ์คํจ ์ -1 domain : ์ฃผ์ ์์ญ ์ค์ (AF_INET(IPv4), AF_INET(IPv6)) type : ์์ผ์ ํต์ ํ์ ์ค์ protocol : ํต์ ์ ์ฌ์ฉํ ํ๋กํ ์ฝ ์ค์ memset ์ผ๋ก ์ฃผ์๋ฅผ ๋ถ์ฌ serv_sock์ bind๋ก ์ฃผ์ ๋ฃ๊ธฐ ์ํ ๋ฐ์์ memset(&serv_addr,0,sizeof(serv_addr)); serv_addr...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lwWek/btsz62V037K/zwhG5StPxO5Jselj1q8aG1/img.png)
โญ LCD 1) LCD(Liquid Cristal Display) ์ก์ (Liquid Crystal)์ด๋ผ๋ ์ ์ฒด์ด๋ฉด์ ๊ณ ์ฒด์ ๊ฐ์ ๊ดํ์ ์ฑ์ง์ ๊ฐ์ง๋ ๋ฌผ์ง ๊ณ ์ฒด ํ๋ฉด์ ์ ๊ธฐ์ ์ ํธ๋ฅผ ๋ณด๋ด์ด ์ก์ ์ด ํน์ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ๋๋ฉด ๋น์ ์ฐจ๋จํ๊ฑฐ๋ ํฌ๊ณผํ ์ ์์ 2) 16X2 LCD ๋ชจ๋ 16๊ฐ ๋ฌธ์๋ฅผ 2์ด๋ก ์ถ๋ ฅํ ์ ์๋ ๋ชจ๋ 8bit ๋ฐ์ดํฐ๋ฒ์ค์ 8๊ฐ์ ์ ์ด ์ ํธ๋ก ๊ตฌ์ฑ๋์ด ์์ด์ ์ด 16๊ฐ์ ํ์ด ํ์ํจ (I2C ๋ชจ๋์ ์ด์ฉ์ 2๊ฐ ํ๋ง ํ์) 3) ์์ง์ด๋ LCD ํ #include #include LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hellow..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dIhmuW/btszyIZpoK2/noeQhimbIWJkFf4JhtMeX0/img.png)
โ Wireshark ๋ก ์ด๋๋ท ์ดํด๋ณด๊ธฐ ์์ ์ค.. ^^