2015년 9월 12일 토요일

아두이노 Blink


아두이노IDE에서는 많은 예제프로그램이 포함되어 있습니다.

BLINK를 해보기로 합니다.

메뉴에서

파일-->예제-->01.Basics-->Blink를 선택합니다.




선택하면 다음과 같은 소스가 새로운 창에서 보입니다.


/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://www.arduino.cc
  This example code is in the public domain.
  modified 8 May 2014
  by Scott Fitzgerald
 */

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}


C언어입니다.

미리 알아두어야 할 것만 간단히 설명하겠습니다.

주석 : 모든 프로그래밍 언어들이 주석문을 가지는데 C,C++,C#에서는 동일합니다.

기타 다른 언어들은 잘모릅니다...

위 예제이서는 주석문이 2가지가 있습니다.

1. /* ~ */ 형태

   /*
      주석내용들은 여러줄에 걸쳐
       기술 가능합니다.
        1
        2
    */
2.  // 의 형태
    //주석은 1라인으로 사용합니다.
    code...... ; //주석의 형태로 코드 뒤에도 사용가능합니다.

그래서 위의 예제에서는 /* ~ */ 와 //이외의 내용

setup 과 loop만 아두이노를 컨트롤하는 코드입니다.

setup과 loop는 아두이노에서 반드시 들어가야 하는 필수입니다.

이 둘중 하나라도 없으면 오류가 납니다.

실행을 하면

다음과 같이  13번 LED가 깜박이게 됩니다.


초록불이 꺼진 상태
초록불이 켜진상태

빨간색LED는 전원이 들어가가면 항상켜지는 녀석입니다.....



이제 위의 코드를 설명하겠습니다.

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

위 코드를 주석문을 빼고 한줄로 바꾸면 다음과 같습니다.

void setup(){pinMode(13,OUTPUT);}

c언어에서 void는 반환값이 없다는 뜻입니다.

c언어에서 모든 처리를 함수에서 실행하는데

setup도 함수 입니다.

이 seup은 아무것도 반환하지 않는다는 말입니다.
(잘 모르겠으면 그러려니 하고 지나서 나중에 보면 알 수 있을겁니다....)

setup합수는 아두이노보드의 초기화를 하는 함수입니다.

여기서는 13번 pin을 output으로 초기화하였네요...(주석문에 그런 내용들을 기재합니다.)

pinMode도 함수입니다.(아두이노 내부함수ㅒ

OUYPUT은 아두이노에서 정의한 상수입니다. 아마 0,1,2과 같은 것들일 것입니다.

13은 디지탈핀번호입니다.


 // the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

이제 loop함수입니다.

loop함수는 setup함수에서 초기화한 후 전원이 들어있는 동안 무한 반복합니다.

  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
 digitalWrite함수는 13번 에 HIGH 또는 LOW를 설정하는 것 처럼
                                원하는 pin에  전원을 컨트롤합니다.

   delay(1000);              // wait for a second
   delay함수는 밀리세컨드 만큼 아무일도 안하는 일을 합니다.
   아두이노보드 또는 각종 센서들은 아무일도 안하는 일이 상당히 중요합니다.

즉, loop함수는 13번에 HIGH전원을 넣고 1초
                          13번에 LOW전원을 넣고 1초
만 합니다.

이제 코드를 아두이노로 업로드하여야 합니다.



오른쪽 화살표 아이콘을 누르면 코드를 컴파일하고

보드로 명령을 업로드 합니다.

그러면 즉시 실행됩니다.


p.s.

아두이노는 모든것이 오픈소스입니다.

아두이노 우노 보드 또한 오픈소스라 변종(?)보드가 상당히 많습니다.

여기 사용한 보드는 DCcduino uno입니다.

알리익스프레스로 주문한지 한달만에 받은 것입니다.

정품(오리지날제품)보다 상당히 저렴한 편이라 배송시간을 감당할 자신이 있다면

물건너 멀리 대륙제품을 써볼만 합니다.



2015년 9월 9일 수요일

mySQL 시간의 합

시간의 함을 구할 때

그냥 SUM만 하면 원하는 값이 나오지 않는다.

이때는  초로 변환하여 second의 합을 구하고, 시간으로 바꾸는 것이 좋더라....

select  SEC_TO_TIME(sum(TIME_TO_SEC( A.TimeColumn )))
  from Table A
  where ....
group by



mySQL 에서 union

mySQL에서의  union(http://dev.mysql.com/doc/refman/5.7/en/union.html)은

mysql.com에 설명이 가장 잘 되어 있습니다.


union은 각각 다른 테이블을 query했을 때의 결과를 한번에 보여주는 효과가 있다.

performance와 별개로 편합니다.performance도 적절한 index가 있다면 문제 없어 보입니다.

오랜만에 union했는데 어렵습니다.

그래서 나처럼 오랜만에 한다거나 또는 처음하시는 분들은 , 거저 참조로만 보시기 바랍니다.

select A.Key, A.Column1, A.Column2
  from Table1 A
  where A.Key = 'itjlife' 
  group by A.Key
union [all]      -- <------all을 넣으면 DISTINCT를 하지 않습니다.
select B.Key, B.Column1, B.Column2
  from Table2 B
  where B.Key = 'itjlife'
  group by B.Key

나의 경우 A에는 Column1이 있고,
                  B에는 Column2가 있습니다.

그런데 이둘 각각의  합이 나오게 하고 싶어서 다음과 같이 시도합니다.

select key, sum(c1) cc1, sum(c2) cc2
from
(
select A.Key key, A.Column1 c1, 0 c2
  from Table1 A
  where A.Key = 'itjlife' 
  group by A.Key
union
select B.Key key, 0 c1, B.Column2 c2
  from Table2 B
  where B.Key = 'itjlife'
  group by B.Key
) T1
group by T1.key

2015년 9월 8일 화요일

아두이노 IDE설치





얼마전에 windows10으로 업그레이드하고 내친김에 아두이노를 설치 하였습니다.

설치전에 아두이노를 연결하니 다음과 같이 포트가 잡히고 있네요....



이제 아두이노를 다운로드 해야겠습니다.

https://www.arduino.cc/ 에서 아두이노의 모든 것을 배우고, 다운로드까지 가능합니다.


Download를 선택하면 각자의 OS(windows, Mac,Linux)에 따라 다운로드를 할 수 있습니다.
(필요에 따라 Source까지도....)

나는 windows버전으로 다운로드합니다(windows10에서도 될까여?)


Contribute도 하고 다운로드로 하고 버턴이 Deault선택되어 있습니다.

과감히  Just Dowunload를 선택하고 맙니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
(신용카드도 가능합니다만.)

다운로드된 설치파일로 설치를 시작 하겠습니다.


GNU 라이센스에 동의하여야 설치가 가능합니다.

꼼꼼히 읽어보시고 동의시길 바랍니다. ㅠ

언제 한번 GNU에 대해서 설명가능하도록 공부하겠습니다.

I Agree를 하면




옵션을 선택합니다.

Install USB driver도 있습니다.

처음에 괜히 port확인을 했나 봅니다.

하여간, usb드라이버도 체크한상태로 설치하겠습니다.



친절하게 설치할 폴더까지 확인합니다.

그대로 설치하기로 합니다.




열심히 설치하고 있습니다.
그러다가 물어 봅니다.




usb driver를 설치 하겠는냐고!!!!!

하지 말까 하다가 그냥 설치 하기로 합니다.

잠시후






설치가 끝났습니다.


이녀석은  아무 말도 안하고 이대로 있습니다.

(아!, 초록색 글이 끝났다는 말이네요....ㅠㅠ)

Close하면






 바탕화면에 아두이노 아이콘이 생겨 있습니다.


이제 아두이이노 소프트웨어 프로그램을 할 수 있습니다.

좀 있다가 테스트 프로그램을 하겠습니다.....





2015년 9월 2일 수요일

mySQL insert not exists

mysql에서 insert하기전에 중복 체크하고 없으면 insert 할 수 있다.
의외로 귀찮다.

체크는 where절에 넣으면 된다.

insert into testTable (ColumnPK, Column1, Column2)
select  'PKData','data1', 'data2' from testTable
where not exists
(
    select  ColumnPKfrom testTable
    where ColumnPK= 'PKData'
)
LIMIT 1;

vsftpd FTP 서버 접속은 성공하였으나, "디렉토리 목록 조회 실패" 현상 발생시

FTP Passive 모드를 활성화 필요. 1. vsftpd 설정 변경 /etc/vsftpd/vsftpd.conf 상에 아래 내용 추가 기입 #passive modpasv_enable=YES pasv_min_port=5001 pasv...