Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

здравей
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14633
Страница 1 от 2

Автор:  mirandy [ Вто Юни 14, 2016 9:18 am ]
Заглавие:  здравей

Здравейте. От скоро се занимавам с ардуино, опитвам се да си направя един седем сегментен часовник с температура и срещтнах проблем - за часовника използвам гпс и срещтнах проблем, че когато ми отпадне гпс-а програмата ми забива. Искам да го направя така че когато нямам гпс да ми изписва само температура, но и да мери а не да забива и да ми изписва последната измерена температура както прави сега, а когато се появи гпс-а пак да започне да изписва час и температура. Опитах се с if (uart_gps.available) но не се получава така както аз искам. Благодаря предварително за съдействието!

Автор:  radolin [ Вто Юни 14, 2016 11:33 am ]
Заглавие:  Re: здравей

Пусни кода за да се види какво прави.

Автор:  ike [ Вто Юни 14, 2016 12:53 pm ]
Заглавие:  Re: здравей

Преди да почнеш големите проекти, трябва да започнеш първо с малките.
Например направи си първо само часовник: http://playground.arduino.cc/Code/Time след това въведи функция примерно на всеки 1 час да се пусна GPS-а докато не получи точно време и това време ъпдейтва с setTime(); Когато и това подкараш, тогава добави и да показва температурата.

Автор:  mirandy [ Вто Юни 14, 2016 1:48 pm ]
Заглавие:  Re: здравей

Код:
// INCLUDES
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <SPI.h>
#include "TPIC6B595.h"
#include <TimeLib.h>
#define RXPIN 4
#define TXPIN 3
#define GPSBAUD 9600

TinyGPS gps;
SoftwareSerial uart_gps(RXPIN, TXPIN);

//Pin Assignments (You should change these)
const int clockPin       = 9;           //Connected to TPIC pin 13: SRCLK (aka Clock)
const int latchPin     = 10;          //Connected to TPIC pin 12: RCLK (aka Latch/load/CS/SS...)
const int dataPin      = 12;          //Connected to TPIC pin 3: SER (aka MOSI)

byte IC1[] = {
  B11111100,
  B01100000,
  B11011010,
  B11110010,
  B01100110,
  B10110110,
  B10111110,
  B11100000,
  B11111110,
  B11110110
};



// VARIABLES
int seconds;
int timeoffset = +3; // User must change the one to an appropiate number. I am one hour after GMT.
int temps;
void setup()
{
  sensors.begin();

  uart_gps.begin(GPSBAUD);  // Start the GPS receiver UART
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  delay(1000);
  Serial.begin(9600);
}


void loop()
{

  if (uart_gps.available())
  {
    int c = uart_gps.read();
    if (gps.encode(c))
    {
      getgps(gps);
    }
  }
  else
  {
    temp();
  }
}


void getgps(TinyGPS &gps)
//void loop()
{
  int year;
  float latitude, longitude;
  byte month, day, hour, minute, second, hundredths;
  int deschas, edchas, chas1, chas2;
  int desmin, edmin, minut1, minut2;
  // gps.f_get_position(&latitude, &longitude);
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
  //hour = 15;
  hour = hour + timeoffset;
  chas1 = hour % 10;
  chas2 = hour / 10;
  edchas = IC1[chas1];
  deschas = IC1[chas2];

  //minute = 32;
  minut1 = minute % 10;
  minut2 = minute / 10;
  edmin = IC1[minut1];
  desmin = IC1[minut2];


  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, edmin);
  shiftOut(dataPin, clockPin, LSBFIRST, desmin);
  shiftOut(dataPin, clockPin, LSBFIRST, edchas);
  shiftOut(dataPin, clockPin, LSBFIRST, deschas);
  digitalWrite(latchPin, HIGH);
  Serial.print("hour = ");
  Serial.println(hour);
  Serial.print("min = ");
  Serial.println(minute);
  delay(5000);

  int temp, destemp, edtemp, temp1, temp2;
  sensors.requestTemperatures(); // Send the command to get temperatures
  temp = sensors.getTempCByIndex(0);
  // temp = -5;
  if (temp < 0) {
    temp = abs(temp);
    temp1 = temp % 10;
    temp2 = temp / 10;
    edtemp = IC1[temp1];
    destemp = IC1[temp2];
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, B11000110);
    shiftOut(dataPin, clockPin, LSBFIRST, edtemp);
    shiftOut(dataPin, clockPin, LSBFIRST, destemp);
    shiftOut(dataPin, clockPin, LSBFIRST, B00000010);
    digitalWrite(latchPin, HIGH);
  }
  else {
    temp1 = temp % 10;
    temp2 = temp / 10;
    edtemp = IC1[temp1];
    destemp = IC1[temp2];
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, B10011100);
    shiftOut(dataPin, clockPin, LSBFIRST, B11000110);
    shiftOut(dataPin, clockPin, LSBFIRST, edtemp);
    shiftOut(dataPin, clockPin, LSBFIRST, destemp);
    digitalWrite(latchPin, HIGH);
  }
  Serial.print( " temp = ");
  Serial.println(temp);
  delay(5000);
}


void temp()
{

  int temp, destemp, edtemp, temp1, temp2;
  sensors.requestTemperatures(); // Send the command to get temperatures
  temp = sensors.getTempCByIndex(0);
  // temp = -5;
  if (temp < 0) {
    temp = abs(temp);
    temp1 = temp % 10;
    temp2 = temp / 10;
    edtemp = IC1[temp1];
    destemp = IC1[temp2];
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, B11000110);
    shiftOut(dataPin, clockPin, LSBFIRST, edtemp);
    shiftOut(dataPin, clockPin, LSBFIRST, destemp);
    shiftOut(dataPin, clockPin, LSBFIRST, B00000010);
    digitalWrite(latchPin, HIGH);
  }
  else {
    temp1 = temp % 10;
    temp2 = temp / 10;
    edtemp = IC1[temp1];
    destemp = IC1[temp2];
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, B10011100);
    shiftOut(dataPin, clockPin, LSBFIRST, B11000110);
    shiftOut(dataPin, clockPin, LSBFIRST, edtemp);
    shiftOut(dataPin, clockPin, LSBFIRST, destemp);
    digitalWrite(latchPin, HIGH);
  }

  Serial.println( " no gps ");
  Serial.print(" temp = ");
  Serial.println(temp);
  delay(2000);
}

ето това е кода, просто ми се искаше само с гпс да го направя без RTC и когато отпадне гпс-а да си изписва само температура

Автор:  Ники [ Вто Юни 14, 2016 2:23 pm ]
Заглавие:  Re: здравей

не съм пускал ардуино и/или гпс.
от справката с гугъл "if (uart_gps.available())" не дава отговор дали гпс е отпаднал, а дали има получени данни от гпс, т.е. той може и да не е в обхват, но да връща нещо.
Може да си направиш елементарен дебъг, с мигане на светодиод от платката или друг сигнал по твое желание, на кой етап от условието забива програмата:
int c = uart_gps.read(); blink_led(1);
if (gps.encode(c))
{
getgps(gps);blink_led(2);
},

Автор:  mirandy [ Вто Юни 14, 2016 2:48 pm ]
Заглавие:  Re: здравей

ами самото забиване се получава когато махна от лоопа това else { temp(); } , когато пусна постановката и всичко тръгне с час и температура, и когато откача гпс-а дисплея остава на температура и дотам, изписва последната измерена температура, и когато върна гпс-а пак всичко тръгва по старому което е нещо нормално всъшност :) но когато го има това else си цикли само в темп()

Автор:  timt [ Вто Юни 14, 2016 3:21 pm ]
Заглавие:  Re: здравей

това ли те мъчи?

void loop()
{

if (uart_gps.available())
{
int c = uart_gps.read();
if (gps.encode(c))
{
getgps(gps);
}
}
else
{
temp();
}
}

Автор:  mirandy [ Вто Юни 14, 2016 3:41 pm ]
Заглавие:  Re: здравей

да, че не работи така както аз си мисля че трябва да работи и така както на мен ми се иска да работи :)

Автор:  timt [ Вто Юни 14, 2016 3:50 pm ]
Заглавие:  Re: здравей

Ми тука пише ако не ти бачка едното да пусне температурата. Сложи му лед както колегата каза.
нещо от този род
void loop()
{

if (uart_gps.available())
{
int c = uart_gps.read();
if (gps.encode(c))
{
getgps(gps);
}
}
else
{
temp();
}
}
else
{
temp();
}
}

Автор:  mirandy [ Сря Юни 15, 2016 11:18 am ]
Заглавие:  Re: здравей

след като вчера малко като се появиха облаци и гпс-а ми изчезна явно наистина ще трябва да слагам и RTC

Автор:  Desert Leo [ Сря Юни 15, 2016 11:46 am ]
Заглавие:  Re: здравей

Ми той ГПС си има RTC...

Автор:  mirandy [ Вто Юни 21, 2016 9:11 am ]
Заглавие:  Re: здравей

Това значи ли, че мога да го използвам дори и да нямам сателити ?

Автор:  Desert Leo [ Вто Юни 21, 2016 12:03 pm ]
Заглавие:  Re: здравей

Естествено... Тогава ГПС предава дата и час от часовника си. Какъв ГПС използваш?

Автор:  mirandy [ Вто Юни 21, 2016 12:51 pm ]
Заглавие:  Re: здравей

U blox neo6m

Автор:  Desert Leo [ Вто Юни 21, 2016 5:37 pm ]
Заглавие:  Re: здравей

mirandy написа:
U blox neo6m


Нямам опит с тези, но едва ли ще са по-различни от Sirf и Mediatek.
Просто четеш $GPRMC,... и каквото декодираш като дата и час го изобразяваш на таблото. В началото, при студения старт индикацията няма да е вярна, но после (ако не го изключваш тотално), винаги ще имаш що-годе точно време.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/