에듀이노-아두이노 전문 교육쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰
뒤로가기

묻고답하기

제목

우노 gps쉴드 결합시 DHT 센서 값 오류

작성자 최중혁(ip:)

작성일 2019-11-22

조회 139

평점 0점  

추천 추천하기

내용


기본 우노에서는 DHT22 센서에서 값이 제대로 표시되는 반면 GPS 쉴드를 장착하고 난 후 4초에 단위로  온/습도 값이 0으로 표기 4초 정도 후 정상표기를 반복합니다.


그리고 30분 이상을 측정하면 모두 0으로 표기가 됩니다.

코드는 다음과 같습니다.
#include <SoftwareSerial.h>

#include <TinyGPS.h>

 

 

TinyGPS gps;

SoftwareSerial nss(4, 3);

 

static void gpsdump(TinyGPS &gps);

static bool feedgps();

static void print_float(float val, float invalid, int len, int prec);

static void print_int(unsigned long val, unsigned long invalid, int len);

static void print_date(TinyGPS &gps);

static void print_str(const char *str, int len);

 

void setup()

{

  Serial.begin(9600);

  nss.begin(9600);

 

  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());

  Serial.println("by Mikal Hart");

  Serial.println();

  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));

  Serial.println();

  Serial.println("Sats HDOP Latitude Longitude Fix  Date       Time       Date Alt     Course Speed Card  Distance Course Card  Chars Sentences Checksum");

  Serial.println("          (deg)    (deg)     Age                        Age  (m)     --- from GPS ----  ---- to London  ----  RX    RX        Fail");

  Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");

}

 

void loop()

{

  bool newdata = false;

  unsigned long start = millis();

 

  // Every second we print an update

  while (millis() - start < 1000)

  {

    if (feedgps())

      newdata = true;

  }

 

  gpsdump(gps);

}

 

static void gpsdump(TinyGPS &gps)

{

  float flat, flon;

  unsigned long age, date, time, chars = 0;

  unsigned short sentences = 0, failed = 0;

  static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

 

  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);

  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);

  gps.f_get_position(&flat, &flon, &age);

  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);

  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);

  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

 

  print_date(gps);

 

  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);

  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);

  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);

  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);

  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);

  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);

  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

 

  gps.stats(&chars, &sentences, &failed);

  print_int(chars, 0xFFFFFFFF, 6);

  print_int(sentences, 0xFFFFFFFF, 10);

  print_int(failed, 0xFFFFFFFF, 9);

  Serial.println();

}

 

static void print_int(unsigned long val, unsigned long invalid, int len)

{

  char sz[32];

  if (val == invalid)

    strcpy(sz, "*******");

  else

    sprintf(sz, "%ld", val);

  sz[len] = 0;

  for (int i=strlen(sz); i<len; ++i)

    sz[i] = ' ';

  if (len > 0)

    sz[len-1] = ' ';

  Serial.print(sz);

  feedgps();

}

 

static void print_float(float val, float invalid, int len, int prec)

{

  char sz[32];

  if (val == invalid)

  {

    strcpy(sz, "*******");

    sz[len] = 0;

        if (len > 0)

          sz[len-1] = ' ';

    for (int i=7; i<len; ++i)

        sz[i] = ' ';

    Serial.print(sz);

  }

  else

  {

    Serial.print(val, prec);

    int vi = abs((int)val);

    int flen = prec + (val < 0.0 ? 2 : 1);

    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;

    for (int i=flen; i<len; ++i)

      Serial.print(" ");

  }

  feedgps();

}

 

static void print_date(TinyGPS &gps)

{

  int year;

  byte month, day, hour, minute, second, hundredths;

  unsigned long age;

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);

  if (age == TinyGPS::GPS_INVALID_AGE)

    Serial.print("*******    *******    ");

  else

  {

    char sz[32];

    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d   ",

        month, day, year, hour, minute, second);

    Serial.print(sz);

  }

  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

  feedgps();

}

 

static void print_str(const char *str, int len)

{

  int slen = strlen(str);

  for (int i=0; i<len; ++i)

    Serial.print(i<slen ? str[i] : ' ');

  feedgps();

}

 

static bool feedgps()

{

  while (nss.available())

  {

    if (gps.encode(nss.read()))

      return true;

  }

  return false;

}

첨부파일 KakaoTalk_20191122_120336647.jpg , KakaoTalk_20191122_124027841.jpg

비밀번호
수정

비밀번호 입력후 수정 혹은 삭제해주세요.

댓글목록

등록된 댓글이 없습니다.

댓글 수정

이름

비밀번호

내용

/ byte

수정 취소

비밀번호 :

확인 취소

댓글 입력

이름

비밀번호

내용

/ byte

평점

왼쪽의 문자를 공백없이 입력하세요.

에게만 댓글 작성 권한이 있습니다.

댓글 입력

이름

비밀번호

내용

/ byte

왼쪽의 문자를 공백없이 입력하세요.

에게만 댓글 작성 권한이 있습니다.

관련 글 보기

고객센터

    1670-9626

  • 팩스.063-902-6678
  • 이메일.eduino@robodyne.co.kr
  • Kakao. 에듀이노
  • 운영시간 : AM 10:00 ~ PM 16:30
  • 점심시간 : PM 12:00 - PM 13:00 토/일/공휴일 휴무
  • 고객센터 연결하기
입금계좌
  • 예금주: (주)로보다인시스템
  • 국민. 754801-01-760296
  • 농협. 301-0234-1423-01
  • IBK기업은행. 506-080015-01-016
배송 안내
  • 배송 방법 : 택배
  • 배송 지역 : 전국지역
  • 배송 비용 : 조건부 무료 : 주문 금액 100,000원 미만일 때 배송비 3,000원을 추가합니다.
  • 배송 기간 : 1일 ~ 2일
  • 배송 안내 :
    - 제주도, 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.
    고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.
교환/반품 안내
교환 및 반품이 가능한 경우
- 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의
  경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.
- 공급받으신 상품 및 용역의 내용이 표시.광고 내용과
  다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우
- 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여
  포장 등을 훼손한 경우는 제외
- 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우
  (예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에
  따른 반품/교환은 제조사 기준에 따릅니다.)
- 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을
  제공한 경우에 한 합니다.
- 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품등의 포장을 훼손한 경우
  (자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.
  (색상 교환, 사이즈 교환 등 포함)
«
»