정보나눔

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

gps 값이 뜰때도 있고 아닐때도 있습니다.
판옵티콘 | 2019-06-24

센서들에서 값을 읽으면 gps신호를 받아서 출력해주는 기능을 만드는중인데 gps를 단독으로 쓰면 잘나오다가 센서들이랑 같이 쓰면 나올때도 있고 안나올때도 있는데 문제가 무엇일까요?

 

주로 처음엔 안나오다가 수십번이상 반복하면 출력되는것 같습니다.

 

#include <Adafruit_MLX90614.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>

SoftwareSerial GPS(2,3);

long lat,lon;
char Lat[20],Lon[20];
String calLat,calLon;
int starter=0;
int tempBody=0;
TinyGPS gps;
int tempWater=0;

Adafruit_MLX90614 mlx1=Adafruit_MLX90614();
Adafruit_MLX90614 mlx2=Adafruit_MLX90614();

void setup() {
  mlx1.begin();
  mlx2.begin();
  Serial.begin(9600);
  GPS.begin(9600);
  pinMode(A0,INPUT);
  pinMode(9,INPUT);
}

void loop() {
  starter=analogRead(A0);
  if(starter>50){
    Serial.println(starter);
    if(digitalRead(9)==LOW){
      tempWater=mlx1.readAmbientTempC();
      if(tempWater<=35){
        GPS.listen();
        while(GPS.available()){
          if(gps.encode(GPS.read())){
            gps.get_position(&lat,&lon);
            dtostrf(lat,9,4,Lat);
            dtostrf(lon,9,4,Lon);
            Lat[4]=Lat[3];
            Lat[3]=Lat[2];
            Lat[2]='.';
            calLat=String(Lat);
            calLat.remove(7);

            Lon[5]=Lon[4];
            Lon[4]=Lon[3];
            Lon[3]='.';
            calLon=String(Lon);
            calLon.remove(8);
           // Serial.println(calLat);
           // Serial.println(calLon);
          }
        }//gps end
      tempBody=mlx2.readAmbientTempC();
      Serial.println(calLat);
      Serial.println(calLon);
      Serial.println(tempWater);
      Serial.println(tempBody);
      Serial.println("Gold Time:10h");
      delay(1000);
    }else{
      delay(1000);
    }
  }else{
    delay(1000);
  }
}
}

프로필사진

Klant 2019-07-02 13:42:35

여러가지의 센서 및 라이브러리를 사용하실 때 주로 발생되는 이슈는

SPI 또는 I2C 통신 중복 또는 인터럽트, 타이머 중복입니다. 

 

해당 이슈를 검토해보시면 좋을 것 같습니다. 

이전글   |    아두이노 블루투스 질문드립니다 2019-06-24
다음글   |    아두이노 블루투스 HM-10 AT 무응답 2019-06-26