1. 시리얼이란?
시리얼은 거의 모든 PC에서 표준으로 사용되는 디바이스 통신 프로토콜입니다. 시리얼의 개념을 USB의 개념과 잘 구분하십시오. 대부분의 컴퓨터에는 2개의 RS232 기반 시리얼 포트가 있습니다. 시리얼은 또한 여러가지 디바이스에서 계측을 위한 일반 통신 프로토콜이며, 여러 GPIB 호환 디바이스에는 RS232 포트가 장착되어 있습니다. 뿐만 아니라, 원격 샘플링 디바이스로 데이터 수집을 하는 경우에도 시리얼 통신을 사용할 수 있습니다.
시리얼 통신의 개념은 간단합니다. 시리얼 포트는 정보의 바이트를 한번에 한 비트씩 순차적으로 송수신합니다. 한번에 전체 바이트를 동시에 전달하는 병렬 통신과 비교하면 시리얼 통신은 속도가 느리지만 훨씬 간단하며 장거리에도 사용할 수 있습니다. 예를 들어, 병렬 통신용 IEEE 488 스펙을 보면 기기간 케이블링은 총 20 m 미만이어야 하며, 두 개의 디바이스간은 2 m 미만이어야 합니다. 반면 시리얼 통신은 최대 1.2 Km의 통신거리를 보장합니다.
통상 엔지니어들은 ASCII 데이터를 전송할 때 시리얼 통신을 사용합니다. 이 때 송신용 (Tx), 수신용 (Rx), 그라운드용 (GND)의 세 가지의 전송 라인을 사용하여 통신합니다. 시리얼은 비동기식이므로 포트는 한 라인에서 데이터를 전송하고 다른 라인에서 데이터를 수신합니다. 핸드쉐이킹용 라인도 사용 가능하지만 필수 요구사항은 아닙니다. 시리얼 통신의 가장 중요한 특징에는 보드 속도 (baud rate), 데이터 비트, 정지 비트, 패리티가 있습니다. 두 개의 포트가 통신하기 위해서는 이러한 파라미터가 반드시 적절하게 맞춰져야 합니다.
1 2 3 4 5 6 7 8 9 10 11 | void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Serial.println("Hello world"); delay(1000); } | cs |
시리얼 모니터
아두이노에는 특별한 디버깅할만한 수단이 마땅치 않은데, 시리얼 모니터를 안드로이드 로그캣처럼 사용
1 2 3 4 5 6 7 8 9 10 11 12 | SoftwareSerial mySerial(10,11); void setup() { // put your setup code here, to run once: Serial.begin(9600); mySerial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Serial.write(1); delay(1000); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 7 segment에 시그널로 입력받은 숫자 출력하기 int signal[10][7] = { { 0,0,0,0,0,0,1 }, //0 { 1,0,0,1,1,1,1 }, //1 { 0,0,1,0,0,1,0 }, //2 { 0,0,0,0,1,1,0 }, //3 { 1,0,0,1,1,0,0 }, { 0,1,0,0,1,0,0 }, { 0,1,0,0,0,0,0 }, { 0,0,0,1,1,1,1 }, { 0,0,0,0,0,0,0 }, { 0,0,0,1,1,0,0 } }; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); } void showNum(int num){ int pin = 2; int index = 0; for( pin = 2; pin <9; pin++,index++){ digitalWrite(pin, signal[num][index]); } } void loop() { if(Serial.available()){ showNum(Serial.parseInt()); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | void setup() { // put your setup code here, to run once: pinMode(11,OUTPUT); 불이 천천히 밝아졌다가, 천천히 어두워지기 } void loop() { // put your main code here, to run repeatedly: int i = 0; for( i = 0; i <255; i++) { analogWrite(11,i); delay(10); } for(i = 255; i >0; i--) { analogWrite(11,i); delay(10); } digitalWrite(11,0); } | cs |
서보모터
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <Servo.h> Servo myServo; //서보 기능덩어리를 선언(객체레가 보셔도됨) void setup() { // put your setup code here, to run once: myServo.attach(10); //servo모터가 사용할 핀번호를 attach메소드에 전달 } void loop() { // put your main code here, to run repeatedly: int angle; //각도 변수 선언 //0 -> 180도로 서보모터 움직임 for (angle = 0; angle < 180; angle++) { myServo.write(angle); //angle(각도)값으로 서보모터 제어 delay(15); //delay로 각도의 변화 속도를 조절 } //180 -> 0도로 서보모터 움직임 for (angle = 180; angle > 0; angle--) { myServo.write(angle); //angle(각도)값으로 서보모터 제어 delay(15); //delay로 각도의 변화 속도를 조절 } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 피에조 부저를 이용한 도레미파솔라시도 int speakerpin = 12; //스피커가 연결된 디지털핀 설정 int note[] = {2093,2349,2637,2793,3136,3520,3951,4186}; //도레미파솔라시도 void setup() { int elementCount = sizeof(note) / sizeof(int); for (int i=0; i < elementCount; i++) //note를 play { tone(speakerpin,note[i],300); delay(750); } } void loop() { } | cs |
' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글
Day115 아두이노 (0) | 2016.09.06 |
---|---|
Day112 아두이노 LCD // 안드로이드 스튜디오 - 그래들 //안드로이드 뷰페이저 (0) | 2016.09.01 |
Day109 아두이노 (0) | 2016.08.29 |
Day107 안드로이드 브로드캐스트리시버 (0) | 2016.08.25 |
Day105 안드로이드 웹뷰 (0) | 2016.08.19 |