2015/06/29 - [IT / Development/mbed] - mbed로 auto LED 만들어 보자. - 1
이전글에서 완성 했던 auto LED에 Ethernet Shield를 연결해서 Ethernet을 연결해 보았다.
위 사진과 같이 보드를 결합하고 코딩을 시작했다.
auto_LED_Ethernet 이라는 새로운 프로그램을 생성하고 main.cpp를 생성하고, mbed 라이브러리를 import 했다.
그리고 추가로 WIZnet_Library도 추가를 해야한다.
"Import"에서 WIZnet으로 검색을 해서 WIZnet_Library를 선택하고 Import를 클릭한다.
Import 경로를 확인하고 Update를 체크하고 OK를 클릭한다.
auto_LED_Ethernet안에 WIZnet_Library가 추가 된것을 확인 할수 있다.
이제 코딩을 해보았다. 현재의 상태를 Server로 전송하는 Client를 구현해 보았다.
LED의 상태, 움직임 상태, 주위의 밝기 를 Sever로 전송한다.
[코드]
#include "mbed.h" #include "WIZnetInterface.h" #define USE_DHCP 0 #define PORT 5000 const char * IP_Addr = "192.168.11.194"; const char * IP_Subnet = "255.255.255.0"; const char * IP_Gateway = "192.168.11.1"; const char * Target_IP = "192.168.11.227"; unsigned char MAC_Addr[6] = {0x00,0x08,0xDC,0x12,0x34,0x56}; Serial pc(USBTX, USBRX); //#ifdef TARGET_FRDM-KL25Z SPI spi(D11,D12,D13); WIZnetInterface ethernet(&spi,D10,D2); //#endif Timer t; DigitalOut ledR0(LED_RED); DigitalOut ledG0(LED_GREEN); //DigitalOut ledB0(LED_BLUE); DigitalOut led0(D5); DigitalOut led1(D6); DigitalIn PIR(D8); AnalogIn CDS(A0); #define PLED_ON led0 = led1 = 1 #define PLED_OFF led0 = led1 = 0 int CDS_data; int PIR_sensor; int CDS_check() { CDS_data = CDS.read()*1000; return CDS_data; } int PIR_check() { PIR_sensor = PIR; return PIR_sensor; } int main() { ledR0 = ledG0 = 1; PLED_OFF; //PIR.mode(PullDown); unsigned char flag = 1; int csd_int = 2; int pir_int0 = 2; int pir_int1 = 2; int pir_status = 0; pc.baud(115200); wait(0.5f); pc.printf("Hello mbed!\n\r"); pc.printf("===========================================\n\r"); #if USE_DHCP int ret = ethernet.init(MAC_Addr); #else int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway); #endif if (!ret) { pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress()); ret = ethernet.connect(); if (!ret) { pc.printf("IP: %s, MASK: %s, GW: %s\r\n", ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway()); } else { pc.printf("Error ethernet.connect() - ret = %d\r\n", ret); exit(0); } } else { pc.printf("Error ethernet.init() - ret = %d\r\n", ret); exit(0); } //TCPSocketServer server; // server.bind(PORT); // server.listen(); //pc.printf("\nWait for new connection...\r\n"); TCPSocketConnection client; //server.accept(client); //client.set_blocking(false, 0); // Timeout=0. //pc.printf("Connection from: %s\r\n", client.get_address()); client.connect(Target_IP,5000); if(client.is_connected() == 1){ pc.printf("Connected success : %s\r\n", client.get_address()); client.send("Hello server!\r\n", 15); PLED_ON; wait(0.2f); PLED_OFF; wait(0.2f); PLED_ON; wait(0.2f); PLED_OFF; } else { pc.printf("Connected fail : %s\r\n", client.get_address()); PLED_ON; wait(0.4f); PLED_OFF; } while (true) { //printf("%d\r\n",CDS_check()); if(CDS_check() > 600){ if(csd_int != 0){ pc.printf("Now is dark.\r\n"); client.send("Now is dark.\r\n", 14); csd_int = 0; } ledG0 = 0; flag = 1; while(flag){ if(PIR_check()){ if(pir_int0 != 0){ pc.printf("The movement is detected.\r\n"); pc.printf("Power LED is turned on.\r\n"); client.send("The movement is detected.\r\n", 27); client.send("Power LED is turned on.\r\n", 25); pir_int0 = 0; } t.stop(); t.reset(); t.start(); pir_status = 1; ledR0 = 0; PLED_ON; } if(pir_status == 0) { flag = 0; } if(t.read_ms() > 5000 && pir_status == 1){ if(pir_int0 != 1){ pc.printf("The movement is not detected.\r\n"); pc.printf("Power LED is turned off.\r\n"); client.send("The movement is not detected.\r\n", 31); client.send("Power LED is turned off.\r\n", 26); pir_int0 = 1; } t.stop(); t.reset(); pir_status = 0; ledR0 = 1; PLED_OFF; flag = 0; wait(0.1f); } } } else{ if(csd_int != 1){ pc.printf("Now is brighter.\r\n"); client.send("Now is brighter.\r\n", 18); csd_int = 1; } ledG0 = 1; if(PIR_check()){ if(pir_int1 != 0){ pc.printf("The movement is detected.\r\n"); client.send("The movement is detected.\r\n", 27); pir_int1 = 0; } ledR0 = 0; } else{ if(pir_int1 != 1){ pc.printf("The movement is not detected.\r\n"); client.send("The movement is not detected.\r\n", 31); pir_int1 = 1; } ledR0 = 1; } } //pc.printf("===========================================\n\r"); //ledB0 = !ledB0; //wait(1); } }
위와 같이 코딩을 완료 했다. 내가 원했던 동작은 양호하게 동작을 한다.
공유한 URL : https://developer.mbed.org/users/nanjsk/code/auto_LED_Ethernet/
아래 영상은 동작이 되는 영상이다. Server는 임시로 PC로 설정을 하고 터미널 창에서 auto_LED_Ethernet에서 보내온 메세지를 확인 할수 있다.
'IT / Development > mbed & ARM' 카테고리의 다른 글
[mbed] WIZwiki-W7500을 이용해서 Smart LED를 만들어보자. (0) | 2015.06.29 |
---|---|
[mbed] WIZwiki-W7500으로 PIR motion sensor 값 받기. (0) | 2015.06.29 |
[mbed] WIZwiki-W7500으로 CDS센서 값 읽기. (0) | 2015.06.29 |
mbed로 auto LED 만들어 보자. - 1 (0) | 2015.06.29 |
ARM프로세서의 디버거인 ULINK2에 대한 관련자료 (0) | 2014.11.07 |