1

Тема: 4x14LED GPS

#define RX      2
#define TX      3
#define time_offset   21600  // смещение от UTC 1 час = 3600
#define  KORR_T  2.5

#include <Wire.h>
#include <4x14LED.h>        // http://rcl-radio.ru/wp-content/uploads/2021/09/4x14LED.zip
#include <EEPROM.h>
#include <TinyGPS++.h>      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include <TimeLib.h>        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include <SoftwareSerial.h>  
#include <OneWire.h>        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip                       
  TinyGPSPlus gps;
  SoftwareSerial SoftSerial(TX,RX);   
  HT4x14LED led;
  OneWire  ds(5); // Вход датчика 18b20
 unsigned long times;
 byte last_second, Second, Minute, Hour, Day, Month;
 int Year;
 int timer;


void setup() {
   Wire.begin();
   SoftSerial.begin(9600);
   Serial.begin(9600);   
   led.init(1);
   led.brig(5);//0...15
   led.blink(1);
   led.clear();
   analogReadResolution(4);// АЦП 4 БИТ
   pinMode(A0,INPUT_PULLUP); // INPUT AUDIO
   Serial.println("SERIAL OK");
}

void loop() {
   led.brig(15-analogRead(A0));
   
 while (SoftSerial.available() > 0){
    if (gps.encode(SoftSerial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
        Serial.println("UTC");
        Serial.print(Hour);Serial.print(":");
        Serial.print(Minute);Serial.print(":");
        Serial.println(Second);
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
        Serial.print(Day);Serial.print("-");
        Serial.print(Month);Serial.print("-");
        Serial.println(Year);
      }}}
      
      if(last_second != gps.time.second()){
        last_second = gps.time.second();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
        Serial.println("UTC+");
        Serial.print(hour());Serial.print(":");
        Serial.print(minute());Serial.print(":");
        Serial.print(second());
        Serial.print(day());Serial.print("-");
        Serial.print(month());Serial.print("-");
        Serial.println(year());
        Serial.println(week_day());
 }

if (millis() > 5000 && gps.charsProcessed() < 10){
    Serial.println("No GPS detected");
    while(true);}
 
if(Year>=2023){
 
if(second()>=55){
 switch(week_day()){
  case 1:led.print(day()*100, 0,   -1, -1,0x37,0xF6);break;
  case 2:led.print(day()*100, 0,   -1, -1,0x2479,0x1201);break;
  case 3:led.print(day()*100, 0,   -1, -1,0x39,0x471);break;
  case 4:led.print(day()*100, 0,   -1, -1,0xE6,0x1201);break;
  case 5:led.print(day()*100, 0,   -1, -1,0x37,0x1201);break;
  case 6:led.print(day()*100, 0,   -1, -1,0x39,0x2079);break;
  case 7:led.print(day()*100, 0,   -1, -1,0x2479,0x39);break;
  } 
  delay(1000);
}

if(second()>=50 && second()<55){
  led.print(int(dsRead(0)*100), 2,   -1, -1,-1,0x39);
  delay(1000);
  }
 
 if(second()<50){
  timer=hour()*100+minute();
   led.print(timer, 0,   -1, -1,-1,-1);
   delay(500);
   led.print(timer, 2,   -1, -1,-1,-1);
   delay(500);
 }
}// 2023

else{
   led.print(timer, 0,   0xed, 0x39,0xf7,0x2136);
   delay(500);
   led.print(timer, 0,   0, 0,0,0);
   delay(500);
  }
 //Serial.println(dsRead(0));

}// end loop

unsigned int f_div(unsigned int x, unsigned int y){
  unsigned int result;
  result = (x - (x % y)) / y;
  return result;
}

byte week_day(){
  byte a = f_div((14 - month()), 12);
  unsigned int y = year() - a;
  byte m = month() + 12 * a - 2;
  unsigned int y4 = f_div(y, 4);
  byte y100 = f_div(y, 100);
  byte y400 = f_div(y, 400);
  byte x = f_div(31 * m, 12);
  byte wd = (day() + y + y4 - y100 + y400 + x) % 7; 
  return wd;
} 

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  for (byte i=0; i<9; i++) data[i]=ds.read();
  int raw=(data[1]<<8)|data[0];
  float value = (float)raw / 16.0 - KORR_T; return value; // Расчет температуры и вывод
}

2

Re: 4x14LED GPS

#define RX      2
#define TX      3
#define time_offset   21600  // смещение от UTC 1 час = 3600
#define KORR_T  -2.5   // DS18B20 коррекция температуры

#include <Wire.h>
#include <4x14LED.h>        // http://rcl-radio.ru/wp-content/uploads/2021/09/4x14LED.zip
#include <EEPROM.h>
#include <TinyGPS++.h>      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include <TimeLib.h>        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include <SoftwareSerial.h>  
#include <OneWire.h>        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip                       
  TinyGPSPlus gps;
  SoftwareSerial SoftSerial(TX,RX);   
  HT4x14LED led;
  OneWire  ds(5); // Вход датчика 18b20
 unsigned long times;
 byte last_minute, Second, Minute, Hour, Day, Month;
 int Year;
 int timer;


void setup() {
   Wire.begin();
   SoftSerial.begin(9600);
   Serial.begin(9600);   
   led.init(1);
   led.brig(5);//0...15
   led.blink(1);
   led.clear();
   analogReadResolution(4);// АЦП 4 БИТ
   pinMode(A0,INPUT_PULLUP); // INPUT AUDIO
   Serial.println("SERIAL OK");
}

void loop() {
   led.brig(15-analogRead(A0));
   
 while (SoftSerial.available() > 0){
    if (gps.encode(SoftSerial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
        Serial.println("UTC");
        Serial.print(Hour);Serial.print(":");
        Serial.print(Minute);Serial.print(":");
        Serial.println(Second);
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
        Serial.print(Day);Serial.print("-");
        Serial.print(Month);Serial.print("-");
        Serial.println(Year);
      }}}
      
      if(last_minute != gps.time.minute()){
        last_minute = gps.time.minute();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
        Serial.println("UTC+");
        Serial.print(hour());Serial.print(":");
        Serial.print(minute());Serial.print(":");
        Serial.print(second());
        Serial.print(day());Serial.print("-");
        Serial.print(month());Serial.print("-");
        Serial.println(year());
        Serial.println(week_day());
 }

if (millis() > 5000 && gps.charsProcessed() < 10){
    Serial.println("No GPS detected");
    while(true);}
 
if(Year>=2023){
 
if(Second>=55){
 switch(week_day()){
  case 1:led.print(day()*100, 0,   -1, -1,0x37,0xF6);break;
  case 2:led.print(day()*100, 0,   -1, -1,0x2479,0x1201);break;
  case 3:led.print(day()*100, 0,   -1, -1,0x39,0x471);break;
  case 4:led.print(day()*100, 0,   -1, -1,0xE6,0x1201);break;
  case 5:led.print(day()*100, 0,   -1, -1,0x37,0x1201);break;
  case 6:led.print(day()*100, 0,   -1, -1,0x39,0x2079);break;
  case 0:led.print(day()*100, 0,   -1, -1,0x2479,0x39);break;
  } 
  delay(1000);
}

if(Second>=50 && Second<55){
  led.print(int(dsRead(0)*100), 2,   -1, -1,-1,0x39);
  delay(1000);
  }
 
 if(Second<50){
  timer=hour()*100+minute();
   led.print(timer, 0,   -1, -1,-1,-1);
   delay(500);
   led.print(timer, 2,   -1, -1,-1,-1);
   delay(500);
 }
}// 2023

else{
   led.print(timer, 0,   0xed, 0x39,0xf7,0x2136);
   delay(500);
   led.print(timer, 0,   0, 0,0,0);
   delay(500);
  }
 //Serial.println(dsRead(0));

}// end loop

unsigned int f_div(unsigned int x, unsigned int y){
  unsigned int result;
  result = (x - (x % y)) / y;
  return result;
}

byte week_day(){
  byte a = f_div((14 - month()), 12);
  unsigned int y = year() - a;
  byte m = month() + 12 * a - 2;
  unsigned int y4 = f_div(y, 4);
  byte y100 = f_div(y, 100);
  byte y400 = f_div(y, 400);
  byte x = f_div(31 * m, 12);
  byte wd = (day() + y + y4 - y100 + y400 + x) % 7; 
  return wd;
} 

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  for (byte i=0; i<9; i++) data[i]=ds.read();
  int raw=(data[1]<<8)|data[0];
  float value = (float)raw / 16.0 + KORR_T; return value; // Расчет температуры и вывод
}

3

Re: 4x14LED GPS

#define RX      2
#define TX      3
#define time_offset   21600  // смещение от UTC 1 час = 3600
#define KORR_T  -4.5   // DS18B20 коррекция температуры

#include <Wire.h>
#include <4x14LED.h>        // http://rcl-radio.ru/wp-content/uploads/2021/09/4x14LED.zip
#include <EEPROM.h>
#include <TinyGPS++.h>      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include <TimeLib.h>        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include <SoftwareSerial.h>  
#include <OneWire.h>        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip                       
  TinyGPSPlus gps;
  SoftwareSerial SoftSerial(TX,RX);   
  HT4x14LED led;
  OneWire  ds(5); // Вход датчика 18b20
 unsigned long times;
 byte last_minute, Second, Minute, Hour, Day, Month;
 int Year;
 int timer;
 bool w=1;


void setup() {
   Wire.begin();
   SoftSerial.begin(9600);
   Serial.begin(9600);   
   led.init(1);
   led.brig(5);//0...15
   led.blink(1);
   led.clear();
   analogReadResolution(4);// АЦП 4 БИТ
   pinMode(A0,INPUT_PULLUP); // INPUT AUDIO
   Serial.println("SERIAL OK");
}

void loop() {
   led.brig(15-analogRead(A0));
   
 while (SoftSerial.available() > 0){
    if (gps.encode(SoftSerial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
        Serial.println("UTC");
        Serial.print(Hour);Serial.print(":");
        Serial.print(Minute);Serial.print(":");
        Serial.println(Second);
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
        Serial.print(Day);Serial.print("-");
        Serial.print(Month);Serial.print("-");
        Serial.println(Year);
      }}}
      
      if(last_minute != gps.time.minute()){ w=1;
        last_minute = gps.time.minute();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
        Serial.println("UTC+");
        Serial.print(hour());Serial.print(":");
        Serial.print(minute());Serial.print(":");
        Serial.print(second());
        Serial.print(day());Serial.print("-");
        Serial.print(month());Serial.print("-");
        Serial.println(year());
        Serial.println(week_day());
 }

if (millis() > 5000 && gps.charsProcessed() < 10){
    Serial.println("No GPS detected");
    while(true);}
 
if(Year>=2023){
 
if(Second>=55){
 switch(week_day()){
  case 1:led.print(day()*100, 0,   -1, -1,0x37,0xF6);break;
  case 2:led.print(day()*100, 0,   -1, -1,0x2479,0x1201);break;
  case 3:led.print(day()*100, 0,   -1, -1,0x39,0x471);break;
  case 4:led.print(day()*100, 0,   -1, -1,0xE6,0x1201);break;
  case 5:led.print(day()*100, 0,   -1, -1,0x37,0x1201);break;
  case 6:led.print(day()*100, 0,   -1, -1,0x39,0x2079);break;
  case 0:led.print(day()*100, 0,   -1, -1,0x2479,0x39);break;
  } 
  delay(1000);
}

if(Second>=50 && Second<55){ 
  if(w==1){led.print(int(dsRead(0)*100), 2,   -1, -1,-1,0x39);}
  w=0;delay(1000);
  }
 
 if(Second<50){
  timer=hour()*100+minute();
   led.print(timer, 0,   -1, -1,-1,-1);
   delay(500);
   led.print(timer, 2,   -1, -1,-1,-1);
   delay(500);
 }
}// 2023

else{
   led.print(timer, 0,   0xed, 0x39,0xf7,0x2136);
   delay(500);
   led.print(timer, 0,   0, 0,0,0);
   delay(500);
  }
 //Serial.println(dsRead(0));

}// end loop

unsigned int f_div(unsigned int x, unsigned int y){
  unsigned int result;
  result = (x - (x % y)) / y;
  return result;
}

byte week_day(){
  byte a = f_div((14 - month()), 12);
  unsigned int y = year() - a;
  byte m = month() + 12 * a - 2;
  unsigned int y4 = f_div(y, 4);
  byte y100 = f_div(y, 100);
  byte y400 = f_div(y, 400);
  byte x = f_div(31 * m, 12);
  byte wd = (day() + y + y4 - y100 + y400 + x) % 7; 
  return wd;
} 

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  for (byte i=0; i<9; i++) data[i]=ds.read();
  int raw=(data[1]<<8)|data[0];
  float value = (float)raw *0.0625 + KORR_T; return value; // Расчет температуры и вывод
}

4

Re: 4x14LED GPS

Привет. Отличия от neo6 и neo 8  ? Поставил модуль 8 идет сканирование и  все. Или ставить нео6 ?

5

Re: 4x14LED GPS

Откройте монитор порта, посмотрите что выдает модуль.
Сканирование может длится довольно долгое время.

6

Re: 4x14LED GPS

SERIAL OK
No GPS detected

7

Re: 4x14LED GPS

Поменяйте местами px tx

8

Re: 4x14LED GPS

Оставлю это на завтра.
Я собрал на attiny13 термометр , но не работает точка разделения .

9

Re: 4x14LED GPS

Да для справки . Датчик температуры нужен или можно не ставить ? Это часы gps. В случае работы какая информация будет
в мониторе порта ?

10

Re: 4x14LED GPS

http://forum.rcl-radio.ru/uploads/images/2023/06/373b831582649c53ad08251679a9ac87.png

11

Re: 4x14LED GPS

Я собрал на attiny13 термометр , но не работает точка разделения .

Опубликуйте код