에듀이노-코딩교육 전문 쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰

학교, 공공기관이라면 후불결제하세요!

 
현재 위치
  1. 게시판
  2. 묻고답하기

묻고답하기

기술문의 게시판입니다.

게시판 상세
제목 우노 gps쉴드 결합시 DHT 센서 값 오류
작성자 최중혁 (ip:)
  • 작성일 2019-11-22
  • 추천 추천하기
  • 조회수 139


기본 우노에서는 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;

}

게시글 신고하기

신고사유

신고해주신 내용은 쇼핑몰 운영자의 검토 후 내부 운영 정책에 의해 처리가 진행됩니다.

평점 0점
첨부파일 KakaoTalk_20191122_120336647.jpg , KakaoTalk_20191122_124027841.jpg
비밀번호 수정 및 삭제하려면 비밀번호를 입력하세요.
댓글 수정

비밀번호 :

수정 취소

/ byte

비밀번호 : 확인 취소

댓글 입력

댓글달기이름 :비밀번호 : 관리자답변보기

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

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

댓글 입력

댓글달기이름 :비밀번호 :

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

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

«
»