<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; часы на gps модуле и семисегментных индикаторах]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=586&amp;type=atom" />
	<updated>2026-02-12T12:14:15Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=586</id>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12428#p12428" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>liman324 пишет:</cite><blockquote><p>Тогда просто добавьте паузу после loop(){</p><p>для стабилизации работы модуля</p><p>delay(10);</p></blockquote></div><p>Здравствуйте уважаемый. Меня не было дома, поэтому только что применил ваши указания, и результат:&nbsp; часы работаеть отлично. Спасибо большое за Ваш труд,&nbsp; за Ваш поддержку. Ждем новых проектов</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-02-12T12:14:15Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12428#p12428</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12191#p12191" />
			<content type="html"><![CDATA[<p>Тогда просто добавьте паузу после loop(){</p><p>для стабилизации работы модуля</p><p>delay(10);</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2026-01-23T16:19:06Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12191#p12191</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12190#p12190" />
			<content type="html"><![CDATA[<p>Здравствуйте уважаемый. С этим кодом часы часто выходить не правильные показания. По этому прощил предушую скейч.</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-23T16:17:16Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12190#p12190</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12184#p12184" />
			<content type="html"><![CDATA[<p>Не факт что поможет, но вдруг</p><div class="codebox"><pre><code>#define SEG_A  2
#define SEG_B  3
#define SEG_C  4
#define SEG_D  5
#define SEG_E  6
#define SEG_F  7
#define SEG_G  8
#define SEG_DP 9

#define LED_0  A0
#define LED_1  A1
#define LED_2  A2
#define LED_3  A3

#define time_offset   18000  // смещение от UTC 1 час = 3600
#define KORR_T  -2.7   // DS18B20 коррекция температуры

#include &lt;TinyGPS++.h&gt;      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include &lt;TimeLib.h&gt;        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include &lt;OneWire.h&gt;        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip             
 TinyGPSPlus gps;
 OneWire  ds(13); // Вход датчика 18b20

byte an,segm,a[4],i,dpp;
int br=1;
unsigned long times;
byte last_minute, Second, Minute, Hour, Day, Month;
int Year;
int timer;
bool w=1,w1;
bool minus;


void setup() {
  Serial.begin(9600);   
  cli();
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;
  OCR2A = 155;
  TCCR2A |= (1 &lt;&lt; WGM21);
  TCCR2B |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21);
  TIMSK2 |= (1 &lt;&lt; OCIE2A);
  sei();
  pinMode(SEG_A,OUTPUT);
  pinMode(SEG_B,OUTPUT);
  pinMode(SEG_C,OUTPUT);
  pinMode(SEG_D,OUTPUT);
  pinMode(SEG_E,OUTPUT);
  pinMode(SEG_F,OUTPUT);
  pinMode(SEG_G,OUTPUT);
  pinMode(SEG_DP,OUTPUT);
  pinMode(LED_0,OUTPUT);
  pinMode(LED_1,OUTPUT);
  pinMode(LED_2,OUTPUT);
  pinMode(LED_3,OUTPUT);
}

void loop() {
 
 while (Serial.available() &gt; 0){ 
    if (gps.encode(Serial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
      }}}
      
      if(last_minute != gps.time.minute()){
        last_minute = gps.time.minute();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
 }

   hour();
   minute(); 

if (millis() &gt; 5000 &amp;&amp; gps.charsProcessed() &lt; 10){while(true);}

 if(Year==2000){
    a[0]=11;
    a[1]=11;
    a[2]=11;
    a[3]=11;
      }
 else{    
   timer=hour()*100+minute();  
   if(second()&gt;=55){timer = dsRead(0)*100; delay(200);
     if(timer&lt;0){timer=abs(timer); minus=1;}else {minus=0;}
     if(minus==1){a[0]=11;}else{a[0]=timer/1000%10;}
     a[1]=timer/100%10;
     a[2]=13;
     a[3]=12;
   }
   else{
    a[0]=timer/1000%10;
    a[1]=timer/100%10;
    a[2]=timer/10%10;
    a[3]=timer%10;
 }}
}


ISR(TIMER2_COMPA_vect){
   switch (i) {
    case 0: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[0];segment();an = 0;ch(SEG_DP, 1);anod();break;
    case 1: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[1];segment();an = 1;ch(SEG_DP, dpp);anod();break;
    case 2: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[2];segment();an = 2;ch(SEG_DP, 1);anod();break;
    case 3: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[3];segment();an = 3;ch(SEG_DP, 1);anod();break;
  }
  i++;if (i &gt; 3) {i = 0;}
  if(millis()-times&lt;500){dpp=1;}
  if(millis()-times&gt;=500 || (second()&gt;=55)){dpp=0;}
  if(millis()-times&gt;1000){times=millis();}
  }

void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 0
    case 1: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 1
    case 2: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 1); break; // 2
    case 3: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 3
    case 4: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 4
    case 5: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 5
    case 6: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 6
    case 7: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 7
    case 8: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 8
    case 9: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 9
   case 11: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // -
   case 10: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // пусто
   case 12: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // C
   case 13: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; //градус
  }
}

void anod() {
  switch (an) {
    case 0: ch(LED_0, 0); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
    case 1: ch(LED_0, 1); ch(LED_1, 0); ch(LED_2, 1); ch(LED_3, 1); break;
    case 2: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 0); ch(LED_3, 1); break;
    case 3: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 0); break;
   case 10: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
  }
} 

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&lt;9; i++) data[i]=ds.read();
  int raw=(data[1]&lt;&lt;8)|data[0];
  float value = (float)raw *0.0625 + KORR_T; return value; // Расчет температуры и вывод
}

void ch(int pin, int logic){digitalWrite(pin, logic);}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2026-01-22T15:23:23Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12184#p12184</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12183#p12183" />
			<content type="html"><![CDATA[<p>Этот код заработало. Минусовой знак появился. Спасибо уважаемый за Ваш помощ. Только после показа температуры на один секунд показывает другое время и потом показывает правильное время.</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-22T15:09:37Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12183#p12183</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12182#p12182" />
			<content type="html"><![CDATA[<p>Этот код заработало. Минусовой знак появился. Спасибо уважаемый за Ваш помощ. Только после показа температуры на один секунд показывает другое время и потом показывает правильное время.</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-22T15:07:42Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12182#p12182</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12179#p12179" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>#define SEG_A  2
#define SEG_B  3
#define SEG_C  4
#define SEG_D  5
#define SEG_E  6
#define SEG_F  7
#define SEG_G  8
#define SEG_DP 9

#define LED_0  A0
#define LED_1  A1
#define LED_2  A2
#define LED_3  A3

#define time_offset   18000  // смещение от UTC 1 час = 3600
#define KORR_T  -2.7   // DS18B20 коррекция температуры

#include &lt;TinyGPS++.h&gt;      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include &lt;TimeLib.h&gt;        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include &lt;OneWire.h&gt;        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip             
 TinyGPSPlus gps;
 OneWire  ds(13); // Вход датчика 18b20

byte an,segm,a[4],i,dpp;
int br=1;
unsigned long times;
byte last_minute, Second, Minute, Hour, Day, Month;
int Year;
int timer;
bool w=1,w1;
bool minus;


void setup() {
  Serial.begin(9600);   
  cli();
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;
  OCR2A = 155;
  TCCR2A |= (1 &lt;&lt; WGM21);
  TCCR2B |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21);
  TIMSK2 |= (1 &lt;&lt; OCIE2A);
  sei();
  pinMode(SEG_A,OUTPUT);
  pinMode(SEG_B,OUTPUT);
  pinMode(SEG_C,OUTPUT);
  pinMode(SEG_D,OUTPUT);
  pinMode(SEG_E,OUTPUT);
  pinMode(SEG_F,OUTPUT);
  pinMode(SEG_G,OUTPUT);
  pinMode(SEG_DP,OUTPUT);
  pinMode(LED_0,OUTPUT);
  pinMode(LED_1,OUTPUT);
  pinMode(LED_2,OUTPUT);
  pinMode(LED_3,OUTPUT);
}

void loop() {
 
 while (Serial.available() &gt; 0){ 
    if (gps.encode(Serial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
      }}}
      
      if(last_minute != gps.time.minute()){
        last_minute = gps.time.minute();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
 }

if (millis() &gt; 5000 &amp;&amp; gps.charsProcessed() &lt; 10){while(true);}

 if(Year==2000){
    a[0]=11;
    a[1]=11;
    a[2]=11;
    a[3]=11;
      }
 else{    
   timer=hour()*100+minute();  
   if(second()&gt;=55){timer = dsRead(0)*100; delay(200);
     if(timer&lt;0){timer=abs(timer); minus=1;}else {minus=0;}
     if(minus==1){a[0]=11;}else{a[0]=timer/1000%10;}
     a[1]=timer/100%10;
     a[2]=13;
     a[3]=12;
   }
   else{
    a[0]=timer/1000%10;
    a[1]=timer/100%10;
    a[2]=timer/10%10;
    a[3]=timer%10;

 }}
}


ISR(TIMER2_COMPA_vect){
   switch (i) {
    case 0: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[0];segment();an = 0;ch(SEG_DP, 1);anod();break;
    case 1: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[1];segment();an = 1;ch(SEG_DP, dpp);anod();break;
    case 2: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[2];segment();an = 2;ch(SEG_DP, 1);anod();break;
    case 3: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[3];segment();an = 3;ch(SEG_DP, 1);anod();break;
  }
  i++;if (i &gt; 3) {i = 0;}
  if(millis()-times&lt;500){dpp=1;}
  if(millis()-times&gt;=500 || (second()&gt;=55)){dpp=0;}
  if(millis()-times&gt;1000){times=millis();}
  }

void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 0
    case 1: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 1
    case 2: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 1); break; // 2
    case 3: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 3
    case 4: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 4
    case 5: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 5
    case 6: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 6
    case 7: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 7
    case 8: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 8
    case 9: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 9
   case 11: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // -
   case 10: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // пусто
   case 12: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // C
   case 13: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; //градус
  }
}

void anod() {
  switch (an) {
    case 0: ch(LED_0, 0); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
    case 1: ch(LED_0, 1); ch(LED_1, 0); ch(LED_2, 1); ch(LED_3, 1); break;
    case 2: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 0); ch(LED_3, 1); break;
    case 3: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 0); break;
   case 10: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
  }
} 

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&lt;9; i++) data[i]=ds.read();
  int raw=(data[1]&lt;&lt;8)|data[0];
  float value = (float)raw *0.0625 + KORR_T; return value; // Расчет температуры и вывод
}

void ch(int pin, int logic){digitalWrite(pin, logic);}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2026-01-21T15:49:49Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12179#p12179</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12178#p12178" />
			<content type="html"><![CDATA[<p>Попробуйте этот</p><p>Пробовал этот код. Первый разряд постоянно горит сегмент G, и на часах и на градусах. Кроме G нечего не горить в первом разряде</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-21T15:42:16Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12178#p12178</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12177#p12177" />
			<content type="html"><![CDATA[<p>Попробуйте этот код</p><div class="codebox"><pre><code>#define SEG_A  2
#define SEG_B  3
#define SEG_C  4
#define SEG_D  5
#define SEG_E  6
#define SEG_F  7
#define SEG_G  8
#define SEG_DP 9

#define LED_0  A0
#define LED_1  A1
#define LED_2  A2
#define LED_3  A3

#define time_offset   18000  // смещение от UTC 1 час = 3600
#define KORR_T  -2.7   // DS18B20 коррекция температуры

#include &lt;TinyGPS++.h&gt;      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include &lt;TimeLib.h&gt;        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include &lt;OneWire.h&gt;        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip             
 TinyGPSPlus gps;
 OneWire  ds(13); // Вход датчика 18b20

byte an,segm,a[4],i,dpp;
int br=1;
unsigned long times;
byte last_minute, Second, Minute, Hour, Day, Month;
int Year;
int timer;
bool w=1,w1;

void setup() {
  Serial.begin(9600);   
  cli();
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;
  OCR2A = 155;
  TCCR2A |= (1 &lt;&lt; WGM21);
  TCCR2B |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21);
  TIMSK2 |= (1 &lt;&lt; OCIE2A);
  sei();
  pinMode(SEG_A,OUTPUT);
  pinMode(SEG_B,OUTPUT);
  pinMode(SEG_C,OUTPUT);
  pinMode(SEG_D,OUTPUT);
  pinMode(SEG_E,OUTPUT);
  pinMode(SEG_F,OUTPUT);
  pinMode(SEG_G,OUTPUT);
  pinMode(SEG_DP,OUTPUT);
  pinMode(LED_0,OUTPUT);
  pinMode(LED_1,OUTPUT);
  pinMode(LED_2,OUTPUT);
  pinMode(LED_3,OUTPUT);
}

void loop() {
 
 while (Serial.available() &gt; 0){ 
    if (gps.encode(Serial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
      }}}
      
      if(last_minute != gps.time.minute()){
        last_minute = gps.time.minute();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
 }

if (millis() &gt; 5000 &amp;&amp; gps.charsProcessed() &lt; 10){while(true);}

 if(Year==2000){
    a[0]=11;
    a[1]=11;
    a[2]=11;
    a[3]=11;
      }
 else{    
   timer=hour()*100+minute();
   if(second()&gt;=55){timer = dsRead(0)*100; delay(200);}
    if(timer&lt;0){timer=abs(timer); 
    a[0]=timer/1000%10;
    a[1]=timer/100%10;
    }
    else{
    a[0]=11;
    a[1]=timer/100%10;
    }
    
   if(second()&gt;=55){a[2]=13;}else{a[2]=timer/10%10;}
   if(second()&gt;=55){a[3]=12;}else{a[3]=timer%10;}
 }
}


ISR(TIMER2_COMPA_vect){
   switch (i) {
    case 0: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[0];segment();an = 0;ch(SEG_DP, 1);anod();break;
    case 1: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[1];segment();an = 1;ch(SEG_DP, dpp);anod();break;
    case 2: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[2];segment();an = 2;ch(SEG_DP, 1);anod();break;
    case 3: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[3];segment();an = 3;ch(SEG_DP, 1);anod();break;
  }
  i++;if (i &gt; 3) {i = 0;}
  if(millis()-times&lt;500){dpp=1;}
  if(millis()-times&gt;=500 || (second()&gt;=55)){dpp=0;}
  if(millis()-times&gt;1000){times=millis();}
  }

void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 0
    case 1: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 1
    case 2: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 1); break; // 2
    case 3: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 3
    case 4: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 4
    case 5: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 5
    case 6: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 6
    case 7: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 7
    case 8: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 8
    case 9: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 9
   case 11: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // -
   case 10: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // пусто
   case 12: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // C
   case 13: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; //градус
  }
}

void anod() {
  switch (an) {
    case 0: ch(LED_0, 0); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
    case 1: ch(LED_0, 1); ch(LED_1, 0); ch(LED_2, 1); ch(LED_3, 1); break;
    case 2: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 0); ch(LED_3, 1); break;
    case 3: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 0); break;
   case 10: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
  }
} 

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&lt;9; i++) data[i]=ds.read();
  int raw=(data[1]&lt;&lt;8)|data[0];
  float value = (float)raw *0.0625 + KORR_T; return value; // Расчет температуры и вывод
}

void ch(int pin, int logic){digitalWrite(pin, logic);}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2026-01-21T10:57:24Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12177#p12177</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12176#p12176" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>liman324 пишет:</cite><blockquote><p>У Вас отображение температуры 12*С, если минус делать то отрицательная температура будет показывать только до -9 градусов</p></blockquote></div><p>Минусовой знак нету у меня,</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-21T10:46:45Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12176#p12176</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12175#p12175" />
			<content type="html"><![CDATA[<p>У Вас отображение температуры 12*С, если минус делать то отрицательная температура будет показывать только до -9 градусов</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2026-01-21T10:31:34Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12175#p12175</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12174#p12174" />
			<content type="html"><![CDATA[<p>И еще иногда после показа температуры на один секунд выскакиваеть часы&nbsp; на 5 часов разницей и потом правыльно показывает.</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-21T06:11:57Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12174#p12174</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12173#p12173" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>#define SEG_A  2
#define SEG_B  3
#define SEG_C  4
#define SEG_D  5
#define SEG_E  6
#define SEG_F  7
#define SEG_G  8
#define SEG_DP 9

#define LED_0  A0
#define LED_1  A1
#define LED_2  A2
#define LED_3  A3

#define time_offset   18000  // смещение от UTC 1 час = 3600
#define KORR_T  -2.7   // DS18B20 коррекция температуры

#include &lt;TinyGPS++.h&gt;      // https://github.com/mikalhart/TinyGPSPlus/archive/refs/heads/master.zip
#include &lt;TimeLib.h&gt;        // https://github.com/PaulStoffregen/Time/archive/master.zip
#include &lt;OneWire.h&gt;        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip             
 TinyGPSPlus gps;
 OneWire  ds(13); // Вход датчика 18b20

byte an,segm,a[4],i,dpp;
int br=1;
unsigned long times;
byte last_minute, Second, Minute, Hour, Day, Month;
int Year;
int timer;
bool w=1,w1;

void setup() {
  Serial.begin(9600);   
  cli();
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;
  OCR2A = 155;
  TCCR2A |= (1 &lt;&lt; WGM21);
  TCCR2B |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21);
  TIMSK2 |= (1 &lt;&lt; OCIE2A);
  sei();
  pinMode(SEG_A,OUTPUT);
  pinMode(SEG_B,OUTPUT);
  pinMode(SEG_C,OUTPUT);
  pinMode(SEG_D,OUTPUT);
  pinMode(SEG_E,OUTPUT);
  pinMode(SEG_F,OUTPUT);
  pinMode(SEG_G,OUTPUT);
  pinMode(SEG_DP,OUTPUT);
  pinMode(LED_0,OUTPUT);
  pinMode(LED_1,OUTPUT);
  pinMode(LED_2,OUTPUT);
  pinMode(LED_3,OUTPUT);
}

void loop() {
 
 while (Serial.available() &gt; 0){ 
    if (gps.encode(Serial.read())){
      if (gps.time.isValid()){
        Minute = gps.time.minute();
        Second = gps.time.second();
        Hour   = gps.time.hour();
      }
      if (gps.date.isValid()){
        Day   = gps.date.day();
        Month = gps.date.month();
        Year  = gps.date.year();
      }}}
      
      if(last_minute != gps.time.minute()){
        last_minute = gps.time.minute();
        setTime(Hour, Minute, Second, Day, Month, Year);
        adjustTime(time_offset);
 }

if (millis() &gt; 5000 &amp;&amp; gps.charsProcessed() &lt; 10){while(true);}

 if(Year==2000){
    a[0]=11;
    a[1]=11;
    a[2]=11;
    a[3]=11;
      }
 else{    
   timer=hour()*100+minute();
   if(second()&gt;=55){timer = dsRead(0)*100; delay(200);}
  
    
    a[0]=timer/1000%10;
    a[1]=timer/100%10;
   if(second()&gt;=55){a[2]=13;}else{a[2]=timer/10%10;}
   if(second()&gt;=55){a[3]=12;}else{a[3]=timer%10;}
 }
}


ISR(TIMER2_COMPA_vect){
   switch (i) {
    case 0: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[0];segment();an = 0;ch(SEG_DP, 1);anod();break;
    case 1: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[1];segment();an = 1;ch(SEG_DP, dpp);anod();break;
    case 2: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[2];segment();an = 2;ch(SEG_DP, 1);anod();break;
    case 3: segm = 10; segment();an = 10;anod();delayMicroseconds(br);segm = a[3];segment();an = 3;ch(SEG_DP, 1);anod();break;
  }
  i++;if (i &gt; 3) {i = 0;}
  if(millis()-times&lt;500){dpp=1;}
  if(millis()-times&gt;=500 || (second()&gt;=55)){dpp=0;}
  if(millis()-times&gt;1000){times=millis();}
  }

void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 0
    case 1: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 1
    case 2: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 1); break; // 2
    case 3: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 3
    case 4: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 4
    case 5: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 5
    case 6: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 6
    case 7: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 7
    case 8: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 8
    case 9: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 9
   case 11: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // -
   case 10: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // пусто
   case 12: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // C
   case 13: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; //градус
  }
}

void anod() {
  switch (an) {
    case 0: ch(LED_0, 0); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
    case 1: ch(LED_0, 1); ch(LED_1, 0); ch(LED_2, 1); ch(LED_3, 1); break;
    case 2: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 0); ch(LED_3, 1); break;
    case 3: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 0); break;
   case 10: ch(LED_0, 1); ch(LED_1, 1); ch(LED_2, 1); ch(LED_3, 1); break;
  }
} 

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&lt;9; i++) data[i]=ds.read();
  int raw=(data[1]&lt;&lt;8)|data[0];
  float value = (float)raw *0.0625 + KORR_T; return value; // Расчет температуры и вывод
}

void ch(int pin, int logic){digitalWrite(pin, logic);}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-21T05:30:11Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12173#p12173</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12172#p12172" />
			<content type="html"><![CDATA[<p>Опубликуйте последнюю версию скетча со всеми изменениями.</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2026-01-21T03:54:01Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12172#p12172</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: часы на gps модуле и семисегментных индикаторах]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=12171#p12171" />
			<content type="html"><![CDATA[<p>Здравствуйте уважаемый. Еще один нюанс. Погода у нас сегодня похолодало. Минусовую температуру не показывають. Гдето&nbsp; -1 должен покпзывать,&nbsp; а показывает первый разряд&nbsp; 0, второй разряд- нечего нету,&nbsp; пустой,&nbsp; 3-4 разряды знак градуса и&nbsp; &quot;С&quot;&nbsp; соответственно. Прошу помощи. Спасибо</p>]]></content>
			<author>
				<name><![CDATA[talibjons]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=4088</uri>
			</author>
			<updated>2026-01-21T03:47:17Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=12171#p12171</id>
		</entry>
</feed>
