SW 배움터/앱인벤터2

앱인벤터2 강좌 12: 아두이노 보드로 교통 신호등 제어하기

kusson 2017. 5. 23. 20:49
반응형
728x170

 앱인벤터로 작성한 앱에서 버튼을 누르면 아두이노 보드의 신호등이 점등하는 프로그램을 제작해 보겠다.

앱인벤터와 아두이노 보드사이에 통신을 하기 위해서는 프로세싱 프로그램의 매개가 필요하다. 앱인벤터와 프로세싱프로그램 그리고 아두이노 보드사이에 서로 통신을 주고 받으며 프로그램을 실행한다.  다음과 같이 앱인벤터 프로그램을 작성하자.

 

 

앱인벤터의 디자이너 에디터에 위와 같이 버튼2개와 Web1을 배치시킨다.

 

 

 

 Web1 Url에 내 컴퓨터의 Ip 주소와 포터 번호를 적어준다. 이것은 지난번 강좌에서 설명했기 때문에 여기서는

설명하지 않는다. 잘 모르시는 분은 http://kusson.tistory.com/93 을 참고하기 바란다.

Traffic Light On버튼을 누르면 프로세싱 서버로 '1'을 보내고 버튼의 색깔을 붉은색으로 바꾼다. Traffic Light Off버튼을 누르면 서버에 '0'를 보내고 버튼의 색깔을 파란색으로 바꾼다.

 

 아두이노 스케치에는 다음과 같이 입력한다. 핀 2번에서 6번까지를 출력으로 설정하고 입력은 앱인벤터에서 들어오는 신호를 이용하기 때문에 따로 설정하지 않아도 상관없다. 먼저 아두이노 프로그램을 컴파일 하고 우노보드에 업로드한다.

 

void setup() {
  Serial.begin(9600);                      // 아두이노 우노보드와 서버의 통신 보레이트 설정.
  for(int j=2; j<=6; j=j+1) {             // 2, 3, 4, 5, 6 번핀을 출력으로 설정.   

       pinMode(j,OUTPUT);
    }
}

void loop(){
  if(Serial.available()){
    byte b= Serial.read();
       if(b == '1') {                         //앱인벤터에서 Traffic Light On 버튼을 누르면 작동시작.        
            digitalWrite(2, HIGH); 
            digitalWrite(5, LOW);  
            digitalWrite(6, LOW);
            delay(3000);           
            digitalWrite(2, LOW);
            digitalWrite(3, HIGH);
            delay(1000);
            digitalWrite(3, LOW);
            digitalWrite(4, HIGH);
            digitalWrite(5, HIGH);
            digitalWrite(6, HIGH);
            delay(3000);
            digitalWrite(4, LOW);
         }
    }
}

 

 

 

 

이제 프로세싱 스케치를 열어 다음과 같이 입력한다.

 

//processing: arduinoTrafficLightTest;WifiServer

import processing.serial.*;

import processing.net.*;

Serial p;

Server s;

Client c;

void setup(){

println(Serial.list());

textSize(32);

p = new Serial(this, Serial.list()[1],9600); // 시리얼 포트를 1로 설정한다. 9600은 통신 rate(보레이트)이다.

s = new Server(this, 123);                      // 포트번호 123은 앱인벤터에서 설정한 번호와 동일해야 한다.

}

 

String input;

void draw() {

c = s.available();

if(c!=null){

input = c.readString();

if(input.length()>237){

println(input.charAt(237));

background(127);

if(input.charAt(237)=='1'){

p.write('1');fill(255, 0, 0);                         //시리얼 포트로 1을 보낸다.

text("On", 20, 40);

}

if(input.charAt(237)=='0'){

p.write('0');fill(0, 0, 0);                            //시리얼 포트로 0을 보낸다.

text("Off", 20, 40);

}

ellipse(50,70,80,50);

}

}

}

 

 

 

 

 

 

 

내가 의도한 대로 신호등이 잘 작동하는 것을 볼 수 있다.


 


 

 

반응형
그리드형