diff --git a/RPI3/cctv.c b/RPI3/cctv.c
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c0e1457c79b0fc36c5eedb067378bb183c96c78c 100644
--- a/RPI3/cctv.c
+++ b/RPI3/cctv.c
@@ -0,0 +1,354 @@
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <time.h>
+#include <pthread.h>
+
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+
+
+
+#define BUFFER_MAX 3
+#define DIRECTION_MAX 45
+
+#define IN 0
+#define OUT 1
+#define LOW 0
+#define HIGH 1
+#define VALUE_MAX 256
+
+#define PIN    24
+#define POUT   23
+
+#define PIN2   27
+#define POUT2  17
+
+#define B_PIN  20    // 버튼 1
+#define B_PIN2 21    // 버튼 2
+#define I_PIN  26     // 적외선 센서
+#define LCDAddr 0x27
+
+double distance[2] = {0,};
+char msg[10];
+int fd;
+
+static int GPIOExport(int pin) {
+   
+   char buffer[BUFFER_MAX];
+   ssize_t bytes_written;
+   int fd;
+   
+   fd = open("/sys/class/gpio/export", O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open export for writing!\n");
+      return(-1);
+   }
+   
+   bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
+   write(fd, buffer, bytes_written);
+   close(fd);
+   return(0);
+}
+
+static int GPIOUnexport(int pin){
+   char buffer[BUFFER_MAX];
+   ssize_t bytes_written;
+   int fd;
+   
+   fd = open("/sys/class/gpio/unexport", O_WRONLY);
+   if (-1 == fd){
+      fprintf(stderr, "Failed to open unexport for writing! \n");
+      return(-1);
+   } bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
+   write(fd, buffer, bytes_written);
+   close(fd);
+   return(0);
+}
+
+static int GPIODirection(int pin, int dir){
+   static const char s_directions_str[] = "in\0out";
+   char path[DIRECTION_MAX] = "/sys/class/gpio/gpio%d/direction";
+   int fd;
+   
+   snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/direction", pin);
+   fd = open(path, O_WRONLY);
+   if(-1 == fd){
+      fprintf(stderr, "Failed to open gpio direction for writing! \n");
+      return(-1);
+   }
+   if(-1 == write(fd, &s_directions_str[IN == dir? 0 : 3], IN == dir ? 2 : 3)) {
+      fprintf(stderr, "Failed to set direction! \n");
+      return(-1);
+   }
+   close(fd);
+   return(0);
+}
+
+static int GPIORead(int pin) {
+   char path[VALUE_MAX];
+   char value_str[3];
+   int fd;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin);
+   fd = open(path, O_RDONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open gpio value for reading!\n");
+      return(-1);
+   }
+   
+   if (-1 == read(fd, value_str, 3)) {
+      fprintf(stderr, "Failed to read value!\n");
+      return(-1);
+   }
+   
+   close(fd);
+   
+   return(atoi(value_str));
+}
+
+static int GPIOWrite(int pin, int value) {
+   static const char s_values_str[] = "01";
+   char path[VALUE_MAX];
+   int fd;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin);
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open gpio value for writing!\n");
+      return(-1);
+   }
+   
+   if (1 != write(fd, &s_values_str[LOW == value ? 0 : 1], 1)) {
+      fprintf(stderr, "Failed to write value!\n");
+      return(-1);
+      
+   close(fd);
+   return(0);
+   }
+}
+
+int BLEN=1;
+ 
+void write_word(int data){
+    int temp = data;
+    if ( BLEN == 1 )
+        temp |= 0x08;
+    else
+        temp &= 0xF7;
+    wiringPiI2CWrite(fd, temp);
+}
+
+void send_command(int comm){
+    int buf;
+    // Send bit7-4 firstly
+    buf = comm & 0xF0;
+    buf |= 0x04;                    // RS = 0, RW = 0, EN = 1
+    write_word(buf);
+    delay(2);
+    buf &= 0xFB;                    // Make EN = 0
+    write_word(buf);
+
+    // Send bit3-0 secondly
+    buf = (comm & 0x0F) << 4;
+    buf |= 0x04;                    // RS = 0, RW = 0, EN = 1
+    write_word(buf);
+    delay(2);
+    buf &= 0xFB;                    // Make EN = 0
+    write_word(buf);
+}
+
+void send_data(int data){
+    int buf;
+    // Send bit7-4 firstly
+    buf = data & 0xF0;
+    buf |= 0x05;                    // RS = 1, RW = 0, EN = 1
+    write_word(buf);
+    delay(2);
+    buf &= 0xFB;                    // Make EN = 0
+    write_word(buf);
+
+    // Send bit3-0 secondly
+    buf = (data & 0x0F) << 4;
+    buf |= 0x05;                    // RS = 1, RW = 0, EN = 1
+    write_word(buf);
+    delay(2);
+    buf &= 0xFB;                    // Make EN = 0
+    write_word(buf);
+}
+
+void init(){
+    send_command(0x33);     // Must initialize to 8-line mode at first
+    delay(5);
+    send_command(0x32);     // Then initialize to 4-line mode
+    delay(5);
+    send_command(0x28);     // 2 Lines & 5*7 dots
+    delay(5);
+    send_command(0x0C);     // Enable display without cursor
+    delay(5);
+    send_command(0x01);     // Clear Screen
+    wiringPiI2CWrite(fd, 0x08);
+}
+
+void clear(){
+    send_command(0x01);     //clear Screen
+}
+
+
+void write_l(int x, int y, char data[]){
+    int addr, i;
+    int tmp;
+    if (x < 0)  x = 0;
+    if (x > 15) x = 15;
+    if (y < 0)  y = 0;
+    if (y > 1)  y = 1;
+
+    // Move cursor
+    addr = 0x80 + 0x40 * y + x;
+    send_command(addr);
+
+    tmp = strlen(data);
+    for (i = 0; i < tmp; i++){
+        send_data(data[i]);
+    }
+}
+
+void *lcd_thd(){
+	char s[10];
+	
+    fd = wiringPiI2CSetup(LCDAddr);
+    init();
+
+
+	
+	write_l(0, 0, "Don't worry!");
+	write_l(1, 1, "CCTV is on.");
+    delay(15000);
+    clear();
+    
+    pthread_exit(0);
+}
+
+
+void *infraRed_thd(){
+   
+   if(-1 == GPIODirection(I_PIN,IN))
+      pthread_exit(0);
+   
+   while(1){
+      // snprintf(msg,4,"%d %d",GPIORead(I_PIN)==1?3:0,GPIORead(I_PIN)==1?3:0);
+      if(GPIORead(I_PIN) == 1){
+         int thr_id;
+         int status;
+         pthread_t p_thread;
+         
+         thr_id = pthread_create(&p_thread,NULL,lcd_thd,NULL);
+         pthread_join(p_thread, (void**)&status);
+
+         system("raspivid -t 20000 -o vidio.h264");
+      }
+      usleep(1000*1000);
+   }  
+      
+   pthread_exit(0);
+}
+
+void *button_thd(void* arg){
+   int clnt_sock =(int)arg;
+   char buf[BUFFER_MAX];
+   
+   if(-1 == GPIODirection(B_PIN,IN))
+      pthread_exit(0);
+   
+   while(1){
+      
+         
+      snprintf(msg,4,"%d",GPIORead(B_PIN));
+      write(clnt_sock,msg,sizeof(msg));
+
+      printf("msg = %s\n",msg);
+      usleep(1000*1000);
+   }  
+      
+   close(clnt_sock);
+   pthread_exit(0);
+}
+
+
+
+void error_handling(char *message){
+   fputs(message,stderr);
+   fputc('\n',stderr);
+   exit(1);
+}
+
+
+
+
+int main(int argc, char *argv[]) {
+   char* buffer;
+   int size;
+   int count;
+   int sock;
+   int serv_sock,clnt_sock=-1;
+   int status;
+   struct sockaddr_in serv_addr,clnt_addr;
+   socklen_t clnt_addr_size;
+   
+   pthread_t t_id;
+   pthread_t b_id;
+   int thr_id;
+
+    
+
+   if (-1 == GPIOExport(B_PIN) || -1 == GPIOExport(B_PIN2) || GPIOExport(I_PIN))
+		return(1);
+   
+   if (-1 == GPIOExport(POUT) || -1 == GPIOExport(PIN))
+		return(1);
+   
+   if (-1 == GPIOExport(POUT2) || -1 == GPIOExport(PIN2))
+		return(1);
+
+    //클라이언트 소켓 세팅
+    sock = socket(PF_INET, SOCK_STREAM, 0);
+    if(sock == -1)
+        error_handling("socket() error");
+
+    //서버로 보낼준비하고 서버로 연결 시도    
+    memset(&serv_addr, 0, sizeof(serv_addr));
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
+    serv_addr.sin_port = htons(atoi(argv[2]));  
+        
+    if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)
+        error_handling("connect() error");
+
+   pthread_create(&t_id,NULL,infraRed_thd,NULL);
+   pthread_create(&b_id,NULL,button_thd,(void*)sock);
+   pthread_join(b_id, (void **)status);
+   pthread_join(t_id, (void **)&status);
+
+   
+
+
+   if(-1 == GPIOUnexport(POUT) || GPIOUnexport(PIN) || GPIOUnexport(B_PIN) || GPIOUnexport(I_PIN))
+      return 4;
+   if(-1 == GPIOUnexport(POUT2) || GPIOUnexport(PIN2) || GPIOUnexport(B_PIN2))
+      return 4;
+
+
+    // 전송 완료 후 소켓 종료
+   close(sock);
+
+   printf("파일 전송 완료\n");
+   return 0;
+}
diff --git a/RPI4/situationServer.c b/RPI4/situationServer.c
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..62ea044ddef7e254f1262dfc6f39847ec1c622d6 100644
--- a/RPI4/situationServer.c
+++ b/RPI4/situationServer.c
@@ -0,0 +1,552 @@
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <time.h>
+#include <pthread.h>
+
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+
+#define BUFFER_MAX 3
+#define DIRECTION_MAX 45
+
+#define IN 0
+#define OUT 1
+#define LOW 0
+#define HIGH 1
+#define VALUE_MAX 256
+
+#define B_PIN  20    // 버튼
+
+#define L_PIN  16    // led
+
+#define C 131
+#define D 147
+#define E 165
+#define F 175
+#define G 196
+#define A 220
+#define B 247
+
+#define C2 267
+#define D2 294
+#define E2 330
+#define F2 349
+#define G2 392
+#define A2 440
+#define B2 494
+
+
+
+char msg[10];
+int button[2]={0,};
+int song = 0;
+
+
+static int PWMExport(int pwmnum) {
+   char buffer[BUFFER_MAX];
+   int bytes_written;
+   int fd;
+   
+   fd = open("/sys/class/pwm/pwmchip0/export", O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in export!\n");
+      return(-1);
+   }
+   bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pwmnum);
+   write(fd, buffer, bytes_written);
+   close(fd);
+   sleep(1);
+   return(0);
+}
+
+static int PWMUnexport(int pwmnum) {
+   char buffer[BUFFER_MAX];
+   ssize_t bytes_written;
+   int fd;
+   
+   fd = open("/sys/class/pwm/pwmchip0/unexport", O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in unexport!\n");
+      return(-1);
+   }
+   
+   bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pwmnum);
+   write(fd, buffer, bytes_written);
+   close(fd);
+   
+   sleep(1);
+   
+   return(0);
+}
+
+static int PWMEnable(int pwmnum) {
+   static const char s_unenable_str[] = "0";
+   static const char s_enable_str[] = "1";
+   
+   char path[DIRECTION_MAX];
+   int fd;
+   
+   snprintf(path, DIRECTION_MAX, "/sys/class/pwm/pwmchip0/pwm%d/enable", pwmnum);
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in enable!\n");
+      return -1;
+   }
+   
+   write(fd, s_unenable_str, strlen(s_unenable_str));
+   close(fd);
+   
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in enable!\n");
+      return -1;
+   }
+   
+   write(fd, s_enable_str, strlen(s_enable_str));
+   close(fd);
+   return(0);
+}
+
+static int PWMUnable(int pwmnum) {
+   static const char s_unable_str[] = "0";
+   char path[DIRECTION_MAX];
+   int fd;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/pwm/pwmchip0/pwm%d/enable", pwmnum);
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in enable!\n");
+      return(-1);
+   }
+   
+   write(fd, s_unable_str, strlen(s_unable_str));
+   close(fd);
+   
+   return(0);
+}
+
+static int PWMWritePeriod(int pwmnum, int value) {
+   char s_values_str[VALUE_MAX];
+   char path[VALUE_MAX];
+   int fd, byte;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/pwm/pwmchip0/pwm%d/period", pwmnum);
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in period!\n");
+      return(-1);
+   }
+   
+   byte = snprintf(s_values_str, 10, "%d", value);
+   
+   if (-1 == write(fd, s_values_str, byte)) {
+      fprintf(stderr, "Failed to wirte value in period!\n");
+      close(fd);
+      return(-1);
+   }
+   
+   close(fd);
+   return(0);
+}
+
+static int PWMWriteDutyCycle(int pwmnum, int value) {
+   char s_values_str[VALUE_MAX];
+   char path[VALUE_MAX];
+   int fd, byte;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/pwm/pwmchip0/pwm%d/duty_cycle", pwmnum);
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open in duty_cycle!\n");
+      return(-1);
+   }
+   
+   byte = snprintf(s_values_str, 10, "%d", value);
+   
+   if (-1 == write(fd, s_values_str, byte)) {
+      fprintf(stderr, "Failed to write value in duty_cycle!\n");
+      close(fd);
+      return(-1);
+   }
+   
+   close(fd);
+   return(0);
+}
+
+
+static int GPIOExport(int pin) {
+   
+   char buffer[BUFFER_MAX];
+   ssize_t bytes_written;
+   int fd;
+   
+   fd = open("/sys/class/gpio/export", O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open export for writing!\n");
+      return(-1);
+   }
+   
+   bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
+   write(fd, buffer, bytes_written);
+   close(fd);
+   return(0);
+}
+
+static int GPIOUnexport(int pin){
+   char buffer[BUFFER_MAX];
+   ssize_t bytes_written;
+   int fd;
+   
+   fd = open("/sys/class/gpio/unexport", O_WRONLY);
+   if (-1 == fd){
+      fprintf(stderr, "Failed to open unexport for writing! \n");
+      return(-1);
+   } bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
+   write(fd, buffer, bytes_written);
+   close(fd);
+   return(0);
+}
+
+static int GPIODirection(int pin, int dir){
+   static const char s_directions_str[] = "in\0out";
+   char path[DIRECTION_MAX] = "/sys/class/gpio/gpio%d/direction";
+   int fd;
+   
+   snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/direction", pin);
+   fd = open(path, O_WRONLY);
+   if(-1 == fd){
+      fprintf(stderr, "Failed to open gpio direction for writing! \n");
+      return(-1);
+   }
+   if(-1 == write(fd, &s_directions_str[IN == dir? 0 : 3], IN == dir ? 2 : 3)) {
+      fprintf(stderr, "Failed to set direction! \n");
+      return(-1);
+   }
+   close(fd);
+   return(0);
+}
+
+static int GPIORead(int pin) {
+   char path[VALUE_MAX];
+   char value_str[3];
+   int fd;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin);
+   fd = open(path, O_RDONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open gpio value for reading!\n");
+      return(-1);
+   }
+   
+   if (-1 == read(fd, value_str, 3)) {
+      fprintf(stderr, "Failed to read value!\n");
+      return(-1);
+   }
+   
+   close(fd);
+   
+   return(atoi(value_str));
+}
+
+static int GPIOWrite(int pin, int value) {
+   static const char s_values_str[] = "01";
+   char path[VALUE_MAX];
+   int fd;
+   
+   snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin);
+   fd = open(path, O_WRONLY);
+   if (-1 == fd) {
+      fprintf(stderr, "Failed to open gpio value for writing!\n");
+      return(-1);
+   }
+   
+   if (1 != write(fd, &s_values_str[LOW == value ? 0 : 1], 1)) {
+      fprintf(stderr, "Failed to write value!\n");
+      return(-1);
+      
+   close(fd);
+   return(0);
+   }
+}
+
+
+void *button_thd(void* arg){
+   int clnt_sock =(int)arg;
+   char buf[BUFFER_MAX];
+   
+   if(-1 == GPIODirection(B_PIN,IN))
+      pthread_exit(0);
+   
+   while(1){
+      
+         
+         snprintf(msg,4,"%d",GPIORead(B_PIN));
+         write(clnt_sock,msg,sizeof(msg));
+
+         printf("msg = %s\n",msg);
+         usleep(1000*1000);
+      }  
+      
+   close(clnt_sock);
+   pthread_exit(0);
+}
+
+void *led_thd(void* arg){
+   int clnt_sock =(int)arg;
+   char buf[BUFFER_MAX];
+   
+   if(-1 == GPIODirection(L_PIN, OUT))
+      pthread_exit(0);
+   
+  
+   
+				
+      
+   close(clnt_sock);
+   pthread_exit(0);
+}
+
+
+
+
+
+int ftoT(int f){
+	int T;
+	T=((float)1/f)*1000000000;
+	return T;
+}
+
+void *howls_moving_castle(void* a){
+
+   int PWM = (int)a;
+   printf("%d\n" ,PWM);
+
+   PWMExport(PWM); // pwm0 is gpio18
+   PWMWriteDutyCycle(PWM, 1700000);
+   PWMEnable(PWM);
+   
+   PWMWritePeriod(PWM, ftoT(E));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(A));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(C2));
+   usleep(500000);
+   
+   PWMWritePeriod(PWM, ftoT(E2));
+   usleep(800000);
+   PWMWritePeriod(PWM, ftoT(E2));
+   usleep(800000);
+   
+   PWMWritePeriod(PWM, ftoT(D2));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(C2));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(B));
+   usleep(500000);
+   
+   PWMWritePeriod(PWM, ftoT(C2));
+   usleep(1600000);
+   
+   PWMWritePeriod(PWM, ftoT(A));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(C2));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(E2));
+   usleep(500000);
+   
+   PWMWritePeriod(PWM, ftoT(A2));
+   usleep(800000);
+   
+   PWMWritePeriod(PWM, ftoT(A2));
+   usleep(600000);
+   
+   PWMWritePeriod(PWM, ftoT(A2));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(B2));
+   usleep(500000);
+   PWMWritePeriod(PWM, ftoT(G2));
+   usleep(250000);
+   PWMWritePeriod(PWM, ftoT(F2));
+   usleep(250000);
+   
+   PWMWritePeriod(PWM, ftoT(G2));
+   usleep(1200000);
+   
+   PWMUnexport(PWM);
+
+   song = 0;
+
+   pthread_exit(0);
+	
+}
+
+
+
+void error_handling(char *message){
+   fputs(message,stderr);
+   fputc('\n',stderr);
+   exit(1);
+}
+
+
+int main(int argc, char *argv[]) {
+   int serv_sock,clnt_sock=-1;
+   int status;
+   struct sockaddr_in serv_addr,clnt_addr;
+   socklen_t clnt_addr_size;
+   
+   pthread_t p_thread[2],t_id;
+   int thr_id;
+
+   
+   if (-1 == GPIOExport(B_PIN) || GPIOExport(L_PIN))
+		return(1);
+   if(-1 == GPIODirection(L_PIN, OUT))
+      return 2;
+   
+   if(argc!=3){
+      printf("Usage : %s <IP> <port>\n",argv[0]);
+   }
+
+   serv_sock = socket(PF_INET, SOCK_STREAM, 0);
+   if(serv_sock == -1)
+      error_handling("socket() error");
+
+   memset(&serv_addr, 0 , sizeof(serv_addr));
+   serv_addr.sin_family = AF_INET;
+   serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    serv_addr.sin_port = htons(atoi("8888"));
+   
+   if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)
+      error_handling("bind() error");
+
+   if(listen(serv_sock,5) == -1)
+      error_handling("listen() error");
+   
+   while(1){
+   
+      if(clnt_sock<0){
+         clnt_addr_size = sizeof(clnt_addr);
+         clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
+
+         if(clnt_sock == -1)
+            error_handling("accept() error");
+      }
+      char clnt_msg[3];
+      
+      read(clnt_sock,clnt_msg,sizeof(clnt_msg));
+      
+
+      if(!strcmp(clnt_msg,"1")){
+         printf("긴급상황!!!!");
+         GPIOWrite(L_PIN, 1);
+         usleep(3000000);
+         GPIOWrite(L_PIN, 0);
+         int PWM = 0;
+         PWMExport(PWM); // pwm0 is gpio18
+         PWMWriteDutyCycle(PWM, 1700000);
+         PWMEnable(PWM);
+         PWMWritePeriod(PWM, ftoT(E));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(A));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(E));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(A));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(E));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(A));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(E));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(A));
+         usleep(500000);
+         PWMUnexport(PWM);
+      }
+      
+      else if(!strcmp(clnt_msg,"0")){
+         //printf("GPIORead(F_PIN): %d\n", !GPIORead(F_PIN));
+         printf("강제개방");
+         int PWM = 0;
+         PWMExport(PWM); // pwm0 is gpio18
+         PWMWriteDutyCycle(PWM, 1700000);
+         PWMEnable(PWM);
+         
+         PWMWritePeriod(PWM, ftoT(E));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(A));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(C2));
+         usleep(500000);
+         
+         PWMWritePeriod(PWM, ftoT(E2));
+         usleep(800000);
+         PWMWritePeriod(PWM, ftoT(E2));
+         usleep(800000);
+         
+         PWMWritePeriod(PWM, ftoT(D2));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(C2));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(B));
+         usleep(500000);
+         
+         PWMWritePeriod(PWM, ftoT(C2));
+         usleep(1600000);
+         
+         PWMWritePeriod(PWM, ftoT(A));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(C2));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(E2));
+         usleep(500000);
+         
+         PWMWritePeriod(PWM, ftoT(A2));
+         usleep(800000);
+         
+         PWMWritePeriod(PWM, ftoT(A2));
+         usleep(600000);
+         
+         PWMWritePeriod(PWM, ftoT(A2));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(B2));
+         usleep(500000);
+         PWMWritePeriod(PWM, ftoT(G2));
+         usleep(250000);
+         PWMWritePeriod(PWM, ftoT(F2));
+         usleep(250000);
+         
+         PWMWritePeriod(PWM, ftoT(G2));
+         usleep(1200000);
+         
+         PWMUnexport(PWM);
+         while(1) {
+            if(GPIORead(B_PIN) == 1) {
+               // write(clnt_sock, msg, 4);
+               printf("강제개방 해결\n");
+               clnt_msg[0]='2';
+               write(clnt_sock,clnt_msg,sizeof(clnt_msg));
+               break;
+         }
+         }
+         
+      }
+      clnt_sock=-1;
+      close(clnt_sock);
+   }
+   
+   if(-1 == GPIOUnexport(B_PIN) || GPIOUnexport(L_PIN))
+      return 4;
+    
+   close(serv_sock);
+
+   return(0);
+}