Отговори на тема  [ 19 мнения ]  Отиди на страница 1, 2  Следваща
здравей 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение здравей
Здравейте. От скоро се занимавам с ардуино, опитвам се да си направя един седем сегментен часовник с температура и срещтнах проблем - за часовника използвам гпс и срещтнах проблем, че когато ми отпадне гпс-а програмата ми забива. Искам да го направя така че когато нямам гпс да ми изписва само температура, но и да мери а не да забива и да ми изписва последната измерена температура както прави сега, а когато се появи гпс-а пак да започне да изписва час и температура. Опитах се с if (uart_gps.available) но не се получава така както аз искам. Благодаря предварително за съдействието!


Вто Юни 14, 2016 9:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Дек 19, 2005 12:21 pm
Мнения: 1037
Мнение Re: здравей
Пусни кода за да се види какво прави.


Вто Юни 14, 2016 11:33 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: здравей
Преди да почнеш големите проекти, трябва да започнеш първо с малките.
Например направи си първо само часовник: http://playground.arduino.cc/Code/Time след това въведи функция примерно на всеки 1 час да се пусна GPS-а докато не получи точно време и това време ъпдейтва с setTime(); Когато и това подкараш, тогава добави и да показва температурата.

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Юни 14, 2016 12:53 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение 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 1:48 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

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


Вто Юни 14, 2016 2:23 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение Re: здравей
ами самото забиване се получава когато махна от лоопа това else { temp(); } , когато пусна постановката и всичко тръгне с час и температура, и когато откача гпс-а дисплея остава на температура и дотам, изписва последната измерена температура, и когато върна гпс-а пак всичко тръгва по старому което е нещо нормално всъшност :) но когато го има това else си цикли само в темп()


Вто Юни 14, 2016 2:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: здравей
това ли те мъчи?

void loop()
{

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


Вто Юни 14, 2016 3:21 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение Re: здравей
да, че не работи така както аз си мисля че трябва да работи и така както на мен ми се иска да работи :)


Вто Юни 14, 2016 3:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: здравей
Ми тука пише ако не ти бачка едното да пусне температурата. Сложи му лед както колегата каза.
нещо от този род
void loop()
{

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


Вто Юни 14, 2016 3:50 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение Re: здравей
след като вчера малко като се появиха облаци и гпс-а ми изчезна явно наистина ще трябва да слагам и RTC


Сря Юни 15, 2016 11:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: здравей
Ми той ГПС си има RTC...


Сря Юни 15, 2016 11:46 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение Re: здравей
Това значи ли, че мога да го използвам дори и да нямам сателити ?


Вто Юни 21, 2016 9:11 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: здравей
Естествено... Тогава ГПС предава дата и час от часовника си. Какъв ГПС използваш?


Вто Юни 21, 2016 12:03 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Апр 25, 2016 9:30 pm
Мнения: 9
Мнение Re: здравей
U blox neo6m


Вто Юни 21, 2016 12:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: здравей
mirandy написа:
U blox neo6m


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


Вто Юни 21, 2016 5:37 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 19 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни