오유인페이지
개인차단 상태
오렌지쥬스P님의 개인페이지입니다
회원가입 : 15-01-14
방문횟수 : 806회
닉네임 변경이력
일반
베스트
베오베
댓글
154 2016-10-03 22:21:36 0
gps 수신기를 이용해서 들어오는 데이터를 c프로그램으로 받을수있나요?? [새창]
2016/10/03 17:27:30
recv_length = inputStream.read(buf, last_offset, BUF_SIZE-last_offset) + last_offset;

     strfrom = 0;
     totaldata = new String(buf, 0, recv_length);
     while((strto = totaldata.indexOf("rn", strfrom)) != -1){
      data = totaldata.substring(strfrom, strto);
      data_length = data.length();
      strfrom = strto + 2;
      
      if((pchksum = data.lastIndexOf('*')) != -1){
       chksum_recv = ByteHelper.fromHexToByte(data.substring(pchksum+1, data_length));
       chksum_calc = getNmeaChecksum(data.getBytes(), 1, pchksum-1);
      }else{
       continue;
      }
      
      //chk checksum and start code
      if((data.indexOf('$') != 0) || (chksum_recv != chksum_calc))
       continue;
      
      params = data.substring(1, pchksum).split(",", -1);
      
      try{
       
       if("GPGGA".equals(params[0]) && params.length > 11){
        
        double oldlat = Double.parseDouble(params[2]);
        double oldlon = Double.parseDouble(params[4]);
        
        latitude = (int)(oldlat / 100) + ((oldlat % 100.0f) / 60.0f);
        longitude = (int)(oldlon / 100) + ((oldlon % 100.0f) / 60.0f);
        
        geoid_separation = Double.parseDouble(params[11]);
        altitude_msl = Double.parseDouble(params[9]);
        altitude_ellipsoid = altitude_msl + geoid_separation;
        
       double[] geo = new double[3];
        double[] ecef = new double[3];
       geo[0] = latitude;
       geo[1] = longitude;
       geo[2] = altitude_ellipsoid;
       Coord.geo_to_ecef(geo, ecef);
       ecefX = ecef[0];
        ecefY = ecef[1];
        ecefZ = ecef[2];
        
       }else if("GPVTG".equals(params[0])){
        heading_degree = Double.parseDouble(params[1]);
        horizonal_speed_knots = Double.parseDouble(params[5]);
        horizonal_speed_kmh = Double.parseDouble(params[7]);
        
        double radLat = latitude * Math.PI / 180.0;
        double radLon = longitude * Math.PI / 180.0;
        double sinLat = Math.sin(radLat);
        double cosLat = Math.cos(radLat);
        double sinLon = Math.sin(radLon);
        double cosLon = Math.cos(radLon);
        
        double radHead = heading_degree * Math.PI / 180.0;
        
        double x = 0.0;
        double y = Math.sin(radHead) * horizonal_speed_kmh;
        double z = Math.cos(radHead) * horizonal_speed_kmh;
        
        //Rotate by asix Y
        x = x * cosLat + z * sinLat;
        z = x *-sinLat + z * cosLat;
        
        //Rotate by asix Z
        x = x * cosLon + y *-sinLon;
        y = x * sinLon + y * cosLon;

        ecefXV = x;
        ecefYV = y;
        ecefZV = z;

        velN = Math.cos(radHead) * horizonal_speed_kmh;
        velE = Math.sin(radHead) * horizonal_speed_kmh;
        velD = -vertical_speed_kmh;
        
       }else if("GPRMC".equals(params[0])){
        isVaild = "A".equals(params[2]);
        rawtime = Double.parseDouble(params[1]);
        rawdate = Integer.parseInt(params[9]);

        int year, month, day, hour, min, sec, mill, dayofweek;
        year = 2000 + (rawdate / 10000);
        month = (rawdate / 100) % 100;
        day = rawdate % 100;
        hour = (int) (rawtime / 10000.0f);
        min = (int) (rawtime / 100.0f) % 100;
        sec = (int) (rawtime) % 100;
        mill = (int) (rawtime * 1000) % 1000;
        
        //CalcDate;
        Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        c.set(Calendar.YEAR, year );
        c.set(Calendar.MONTH, month );
        c.set(Calendar.DAY_OF_MONTH, day );
        c.set(Calendar.HOUR_OF_DAY, hour );
        c.set(Calendar.MINUTE, min );
        c.set(Calendar.SECOND, sec );
        c.set(Calendar.MILLISECOND, mill );
        
        dayofweek = c.get(Calendar.DAY_OF_WEEK);
        
        iTOW = (float)(dayofweek * 24 * 60 * 60
            + hour * 60 * 60
            + min * 60
            + sec) + mill / 1000.0f;
        
       }else if("GPGSA".equals(params[0])){
        for(int i=0; i<12; i++){
         String val = params[i+3];
         if(val.isEmpty())
          break;
         
         sat_used[i] = Integer.parseInt(val);
         sat_used_len = i+1;
        }
        
        pdop = Double.parseDouble(params[15]);
        hdop = Double.parseDouble(params[16]);
        vdop = Double.parseDouble(params[17]);
        
       }else if("GPGSV".equals(params[0])){
        sat_inview_len = Integer.parseInt(params[3]);
        
        int totpage = Integer.parseInt(params[1]);
        int curpage = Integer.parseInt(params[2]);
        int id = (curpage - 1) * 4;
        int len = 4;
        if(totpage == curpage)
         len = sat_inview_len - (totpage-1) * 4;
        for(int i=0; i<len; i++, id++){
         sat_inview_visible[id] = !params[i*4 + 7].isEmpty();
         sat_inview_id[id] = Integer.parseInt(params[i*4 + 4]);
         sat_inview_ele[id] = Integer.parseInt(params[i*4 + 5]);
         sat_inview_azi[id] = Integer.parseInt(params[i*4 + 6]);
         if(sat_inview_visible[id])
          sat_inview_snr[id] = Integer.parseInt(params[i*4 + 7]);
         else
          sat_inview_snr[id] = 0;
        }

       }else{
        System.out.println("NOT_DEF>" + data);
       }
      }catch(NumberFormatException e){}
     }
153 2016-10-03 22:18:07 0
gps 수신기를 이용해서 들어오는 데이터를 c프로그램으로 받을수있나요?? [새창]
2016/10/03 17:27:30
http://mnlt.tistory.com/119
여기서 시리얼포트를 읽어주는 코드가있군요
152 2016-08-23 07:49:26 0
진정한 신세계를 보았습니다.. [새창]
2016/08/23 03:56:01
183은 탄속도.....
151 2016-08-03 22:58:40 0
오토바이 제로의 영역 [새창]
2016/08/03 00:33:48
저기 검은색 영역이 나오는 이유는 흔들림보정을 해서 그런것같네요
150 2016-06-21 09:52:17 1
B-C 25t 마스터 획득!!! [새창]
2016/06/19 02:07:27
야이백탄을 어떻게 튕겨낸거지.. 절대도탄각이라도 나온걸까요?ㅎ
149 2016-06-21 09:48:06 0
[새창]
감사합니다 :) 막상 질문하려니 생각나는게 없지만 대댓 달아주신 것들만해도 많은 도움이되네요!ㅎ
148 2016-06-21 07:27:55 12
선배..거기 살색 아니에요.jpg [새창]
2016/06/20 20:30:46

핫!
147 2016-06-03 08:00:24 0
[T110E5]Master/5520DMG/이구역의 헐다운은 나야! [새창]
2016/06/03 00:18:06
교과서 잘보고갑니다ㅎ..
146 2016-06-01 02:56:10 0
그릴레 15 상대할 때 [새창]
2016/05/28 19:05:45
한발 맞을때마다 모듈 한두개씩 날라가겠다ㅋㅋ
145 2016-05-27 11:02:11 0
초보자가 일주일 동안 할수 있는 안드로이드 프로젝트가 뭐가 있을까요?? [새창]
2016/05/27 10:54:51
질문이 어렵군요
1. 아는 언어가 없다 => 교과서에 있는 프로젝트를 똑같이 따라해보기...

개발자인데 안드로이드 초보자라는 가정하에..
2. 다른 언어를 접해봤다(C, C#, JAVA 등) => 계산기정도?
3. 다른 UI(MFC, 스윙, VB 등)을 만져봤다 => 두세페이지의 홍보용 앱정도
144 2016-05-27 09:07:14 6
[새창]
괜찮은데요?ㅋㅋ
143 2016-05-20 14:41:01 0
엥? 컨커러 그거 완전 하체부실 저격중전 아니냐? [새창]
2016/05/19 11:18:58
마우스도 저렇게많이 튕겨내긴 힘들텐데 ㄷㄷ..
142 2016-05-02 08:33:39 0
15테섭/아가씨 포각죽이네 외 [새창]
2016/05/02 01:56:09
결국 바이백이 사라지는군요ㄷㄷ..
140 2016-03-27 23:17:43 1
IOT를 이용해서 졸업작품을 하나 만들려고 생각중입니다. [새창]
2016/03/27 19:48:15
그것만있으면 충분할겁니다

이제 여기서 쓸수있는 여러가지 센서와 움직여주게 하는 서보/스텝/DC 모터들에 대해서 공부하시고

그 조합으로 뭘 만들것인지 생각해보시면 될것같네요
< 이전페이지 다음페이지 >
1 2 3 4 5 >
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호