누군가와 같이 가는길.txt

|



(사진출처 : https://twitter.com/RheaStrike)


인생은 앞이 잘 보이지 않는 험난한길을 걸어 가는것과 같다.

밤처럼 어둡고 낮처럼 피곤하며 겨울처럼 춥다.

그럴때 누군가 함께 가지고 손을내민다.

때론 그손길을따라 길을 걷기도 하지만 이내 더욱어둡고 추운 인생의 구렁텅이로 가는길이라는 걸알게된다.

그사람이 나쁜게 아니라 생각없이 따라간 내가 나쁜것이다.

그동안 수업료는 많이 냈다.

앞으론 정말 정신줄놓지말자...

그리고

내가 본 빛을 향해 좀 더 어른처럼 꿋꿋이 걸어가자





And

dunio 사용법

|

듀이노는 아두이노를 노드로 제어하기 위한 클라이언트 프래임웍입니다.


https://github.com/ecto/duino



듀이노에는 가상머신 코드가 구현 되어 있습니다. 사실 노드용 라이브러리를 사용하는것보다는 이 코드 체계만 그대로 사용하는편이 더 낫습니다.

시리얼포트로 직접 명령코드를 날려 사용하면 됩니다.


다운로드 받은후 src/du.ino 파일을 아두이노에 올려 사용합니다.


코드 정리

명령어는 다음과 같습니다.

  • 00 pinMode
  • 01 digitalWrite
  • 02 digitalRead
  • 03 analogWrite
  • 04 analogRead
  • 97 ping
  • 98 servo
  • 99 debug


한번에 9~11바이트 단위로 명령어가 전달됩니다.


!로 시작 하고 그다음 2바이트는 명령어코드 그다음 2바이트는 핀번호 다음 3바이트는 입력값(0~255)입니다.

디지털의 경우는 0이면 low, 0이상이면 high입니다.

마지막은 마침표로 명령어가 끝났다는것을 알립니다.



void loop() {
  while(Serial.available() > 0) {
    char x = Serial.read();
    if (x == '!') index = 0; // start
    else if (x == '.') process(); // end
    else messageBuffer[index++] = x;
  }
}



.표 까지 씨리얼포트에서 값을 얻어온 다음 process() 에서 전송받은 문자열을 해석합니다.


다음은 가장 핵심이 되는 process함수의 소스 부분입니다.


-------------------

/*
* Deal with a full message and determine function to call
*/
void process() {
  index = 0;

  strncpy(cmd, messageBuffer, 2);
  cmd[2] = '\0';
  strncpy(pin, messageBuffer + 2, 2);
  pin[2] = '\0';

  if (atoi(cmd) > 90) {
    strncpy(val, messageBuffer + 4, 2);
    val[2] = '\0';
    strncpy(aux, messageBuffer + 6, 3);
    aux[3] = '\0';
  } else {
    strncpy(val, messageBuffer + 4, 3);
    val[3] = '\0';
    strncpy(aux, messageBuffer + 7, 3);
    aux[3] = '\0';
  }

  if (debug) {
    Serial.println(messageBuffer);
  }
  int cmdid = atoi(cmd);

  // Serial.println(cmd);
  // Serial.println(pin);
  // Serial.println(val);
  // Serial.println(aux);

  switch(cmdid) {
    case 0: sm(pin,val); break;
    case 1: dw(pin,val); break;
    case 2: dr(pin,val); break;
    case 3: aw(pin,val); break;
    case 4: ar(pin,val); break;
    case 97: handlePing(pin,val,aux); break;
    case 98: handleServo(pin,val,aux); break;
    case 99: toggleDebug(val); break;
    default: break;
  }
}

------------------


98 서보의 경우 val 값은 서보 명령어가 되고 aux 값이 데이터 값이 됩니다.


서보를 포함 핑,디버그 등 90번대 이상명령어의 경우는 

cmd(2)pin(2)val(2)aux(3)

9 바이트 명령어가 됩니다.


서보의 val 값의 종류는 아래와 같습니다.

00: detach

01: attach

02:write

03:read


서보 다루기 예>

9번 포트 제어

!980901000. 포트 깨우기(attach)

!980902045. 45 각도로 이동

!980900000. 포트 잠자기(detach)



99 디버거는 처음명령어코드 중간 val(빨간 배경) 값만 사용됩니다.

디버거 켜기 !990011000.

디버거 끄기 !990000000.



pinMode 의 경우는 0이면 OUTPUT, 0이 아니면 INPUT 입니다.

구현 함수는 다음과 같습니다.


/*
* Set pin mode
*/
void sm(char *pin, char *val) {
  if (debug) Serial.println("sm");
  int p = getPin(pin);
  if(p == -1) { if(debug) Serial.println("badpin"); return; }
  if (atoi(val) == 0) {
    pinMode(p, OUTPUT);
  } else {
    pinMode(p, INPUT);
  }
}





예>

!0113001.


! : 시작

01 : digitalWrite

13 : 핀번호

001 : high

. : 명령 종료 








And

웹스톰 우석대학교 라이센스키

| 2013. 10. 26. 15:21
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.