정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

날씨 무드등 제작 질문이요 :)! 기상청에서 파싱후 동작
김별 | 2017-05-11

현재 제가 생각하고 있는 무드등은

 

1. 오늘의 날씨 정보만을 이용하여

2. 지금 시간을 기준으로

3. 조명 색깔은 그날 비가 온다면 무조건 비에 해당하는 색으로(지금은 맑더라도 오후에 비가 온다면 비에 해당하는 색으로)

4. 계속 빛나도록

 

인데요. 제가 생각이 조금 짧아서(ㅠㅅㅠ)  loop코드를 저렇게 단순하게 짜니까 시간 상관없이 오늘 날씨 정보가 전부 출력되고(0시부터 24시까지 3시간 간격으로 기상청 xml에 나타납니다!), 오늘에 대한 정보가 끝나버리면 타임아웃이 발생해 그냥 동작이 아예 끝나버리더라구요.

 

지금은 led가 빛나는 부분까지만 했지만, 이후 7세그먼트를 이용해 각 시간에 해당하는 온도와 습도까지 출력해줄 생각이라 led는 하루 전체를 기준으로, 온도와 습도는 해당 시간을 기준으로 정보가 필요합니다.

 

제가 원하는대로 동작하게 하려면 어떻게 수정을 해줘야 할까요?

 

void loop() {
  // if there's incoming data from the net connection send it out the serial port
  // this is for debugging purposes only

  if (getIsConnected) { // 연결이 되었다면 다음 코드 진행
    while (client.available()) {
      //라인을 기준으로 문자열을 저장한다.
      String line = client.readStringUntil('\n');
      //Serial.println(line); // xml문서 내용 출력

      //날짜 확인
      int day = line.indexOf("");
      if (day > 0) {
        String tmp_str = "";
        today = line.substring(line.indexOf(tmp_str) + tmp_str.length(), day); // 부터 사이의 값 읽어와 today에 저장
        //Serial.println("day is " + today);
      }

      if (today.equals("0")) { // 오늘 날짜라면(xml 오늘 : 0, 내일 : 1, 모레 : 2) 이후 코드 진행

        //온도
        int temp = line.indexOf("");
        if (temp > 0) {
          String tmp_str = "";
          String wt_temp = line.substring(line.indexOf(tmp_str) + tmp_str.length(), temp);
          Serial.println("===================================");
          Serial.print("temperature is ");
          Serial.println(wt_temp);
        }

        //날씨 정보
        int pty = line.indexOf("");
        if (pty > 0) {
          String tmp_str = "";
          String wt_pty = line.substring(line.indexOf(tmp_str) + tmp_str.length(), pty);

          if (wt_pty.equals("0")) { // 없음
            wt_pty = "맑음";
            theaterChase(strip.Color(250, 237, 125), 50); //노란색 출력
          }
          else if (wt_pty.equals("1")) { // 비
            wt_pty = "비";
            theaterChase(strip.Color(67, 116, 217), 50); //파란색 출력
          }
          else if (wt_pty.equals("2")) { // 비/눈
            wt_pty = "진눈깨비";
            theaterChase(strip.Color(142, 138, 137), 50); //밝은 회색 출력
          }
          else { // 눈
            wt_pty = "눈";
            theaterChase(strip.Color(127, 127, 127), 50); //흰색 출력
          }
          Serial.print("weather is ");
          Serial.println(wt_pty);
        }

        //습도
        int reh = line.indexOf("");
        if (reh > 0) {
          String tmp_str = "";
          String wt_reh = line.substring(line.indexOf(tmp_str) + tmp_str.length(), reh);
          Serial.print("Humidity is ");
          Serial.println(wt_reh);
        }
      }
      else {
        break;
      }
    }
  }

}

이전글   |    아두이노에서 시리얼데이터를 지속적으로 확인하는 방법 질문드립니다.... 2017-05-11
다음글   |    아두이노에서 블루투스를 통한 와이파이 연결 관련 문의... 2017-05-11