Часы на DS1307

bit
Offline
Зарегистрирован: 07.05.2012

Привет всем не как не могу разобраться часами на DS1307 собрал схему

 

 

в одном месте написано к аналоговому входу подключать 4-5 тока не пойму как они от него программируются и должны работать

в другом месте  к sda- scl

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

 

int rtc[7];
int ledPin = 13;
void setup()
{
DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd
PORTC |=_BV(3); // VCC PINC3
pinMode(ledPin, OUTPUT); 
Serial.begin(9600);

RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,57);
RTC.set(DS1307_HR,17);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,18);
RTC.set(DS1307_MTH,1);
RTC.set(DS1307_YR,10);
RTC.start();

}

void loop()
{
RTC.get(rtc,true);

for(int i=0; i<7; i++)
{
Serial.print(rtc[i]);
Serial.print(" ");
}
Serial.println();
digitalWrite(ledPin, HIGH); 
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}


вот код  но почему он ругается на     RTC.stop();

 

Объясните пожалуйста всё процедуру как запустить часы и чтобы они отображались в сериал

 

 

 

 

paf
Offline
Зарегистрирован: 25.01.2013

Вы как бы и не первый день на форуме.

Невозможно найти то, чего нет. Но! Темы три точно есть по часам.  Там и найдете все, что интересует! 

ОТ И ДО!  Не ленитесь пожалуйста! :)))

bit
Offline
Зарегистрирован: 07.05.2012

Темы на форуме  я их читал но всё равно не могу понять ,видимо что то я пропустил?

 

maksim
Offline
Зарегистрирован: 12.02.2012

Конечно пропустили - не скачали или скачали не ту библиотеку, скачали библиотеку не работающую с данной версией IDE, не правильно ее распаковали или не туда положили.
А еще не плохо было бы показывать и нам что у вас там за ошибки.

Так же ко всему данный код для версий IDE 0023 и ниже , если у вас 1.0 и выше, то укакзавать надо не #include <WProgram.h> ,а #include <Arduino.h>.

Я так предпологаю так у вас ругается - http://arduino.ru/forum/programmirovanie/ds1307#comment-24452, а точнее http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vremya-kotoroe-stoit#comment-22660 

Так вот эта тема первая в поиске по сайту по запросу "DS1307", и в ней же есть решение http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vremya-kotoroe-stoit#comment-22002

Так что можно сделать вывод что вы вообще не искали прежде чем создать новую тему или поленились почитать найденые ветки.

bit
Offline
Зарегистрирован: 07.05.2012

С библиотекой я уже разобрался её просто там не было это всё моя не внимательность

bit
Offline
Зарегистрирован: 07.05.2012

Эту  <DS1307.h>  библиотеку нашел установил

А вот эту найти не получается найти <WProgram.h>

Подскажите где её скачать?

 

maksim
Offline
Зарегистрирован: 12.02.2012

Не надо ее искать перечитайте второй обзац сообщения #3.

bit
Offline
Зарегистрирован: 07.05.2012
#include <WProgram.h>

#include <Wire.h>
#include <DS1307.h>

 

int rtc[7];
int ledPin = 13;
void setup()
{
DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd
PORTC |=_BV(3); // VCC PINC3
pinMode(ledPin, OUTPUT); 
Serial.begin(9600);

RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,57);
RTC.set(DS1307_HR,17);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,18);
RTC.set(DS1307_MTH,1);
RTC.set(DS1307_YR,10);
RTC.start();

}

void loop()
{
RTC.get(rtc,true);

for(int i=0; i<7; i++)
{
Serial.print(rtc[i]);
Serial.print(" ");
}
Serial.println();
digitalWrite(ledPin, HIGH); 
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}


Сделал так в сериал идут нули чесы не тикают

 

0 0 0 0 0 0 2000

 

 

 

bit
Offline
Зарегистрирован: 07.05.2012
#if defined(ARDUINO) && ARDUINO >=100
#include "Arduino.h"
#else
#include "WProgram.h"
#eldif

#include <Wire.h>
#include <DS1307.h>

 

int rtc[7];
int ledPin = 13;
void setup()
{
DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd
PORTC |=_BV(3); // VCC PINC3
pinMode(ledPin, OUTPUT); 
Serial.begin(9600);

RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,57);
RTC.set(DS1307_HR,17);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,18);
RTC.set(DS1307_MTH,1);
RTC.set(DS1307_YR,10);
RTC.start();

}

void loop()
{
RTC.get(rtc,true);

for(int i=0; i<7; i++)
{
Serial.print(rtc[i]);
Serial.print(" ");
}
Serial.println();
digitalWrite(ledPin, HIGH); 
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}



А вот так пишет ошибка

 

sketch_apr03a.cpp:5:2: error: invalid preprocessing directive #eldif
sketch_apr03a.cpp:1:1: error: unterminated #else
 

 

 

 

 

 

 

 

bit
Offline
Зарегистрирован: 07.05.2012

Не могу понять как чесы стартуют через аналоговый вход

bit
Offline
Зарегистрирован: 07.05.2012

Не видимо я опять что то напутал

maksim
Offline
Зарегистрирован: 12.02.2012

bit пишет:

А вот так пишет ошибка
sketch_apr03a.cpp:5:2: error: invalid preprocessing directive #eldif

И счего бы... ведь eldif и endif одинаковые слова.

bit
Offline
Зарегистрирован: 07.05.2012

Ну вот так, надо быть внимательней

paf
Offline
Зарегистрирован: 25.01.2013

Вот такой скетчик из той библы

/ This is for compatibility with both arduino 1.0 and previous versions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

#include <Wire.h>
#include <DS1307.h>

void setup() {
  Serial.begin(9600);
  use();
  read_RTC();
}


// use explanation message
void use() {
  Serial.println("\nUSE      : u U r R h[00-23]m[00-59]s[00-59]j0[1-7]D[01-31]M[01-12]A[00-49]");
  Serial.println("\nEXEMPLE  : h09m35d03 set time to 09h35 and day of week 3 (thuesday).");
  Serial.println("\nCommands : h** : hour,  m** : minutes, s** : seconds, d0* : day of week");
  Serial.println("           M** : month,  Y** : year,   D** : day of month.");
  Serial.println("           r stops clock, R starts it. ");
  Serial.println("           u or U shows this message, all other caracter shows time.");
}

// DS1307 time read function
void read_RTC() {
	  Serial.print("\nActual time : ");
	  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
	  Serial.print(" ");                 // some space for a more happy life
	  Serial.print(RTC.get(DS1307_DOW,false));
	  Serial.print(" ");
	  Serial.print(RTC.get(DS1307_DATE,false));//read date
	  Serial.print("/");
	  Serial.print(RTC.get(DS1307_MTH,false));//read month
	  Serial.print("/");
	  Serial.println(RTC.get(DS1307_YR,false)); //read year
}

// set clock values
void write_RTC() {
      char value=0;
      char command=0;

      command = Serial.read();
      delay(50);				//delay to allow good serial port reading
      value=byte((Serial.read()-48)*10); 	//-48 becaus ASCII value for 0 is 48, 1 is 49, etc and *10 because we read tens first
      delay(50);
      value+=byte((Serial.read()-48));		//and then we read units

      switch (command) {
	case 'h' :
	  RTC.set(DS1307_HR,value);
	  Serial.print("hours set to ");
	  Serial.println(value,DEC);
	  break;
	case 'm' :
	  RTC.set(DS1307_MIN,value);
	  Serial.print("minutes set to ");
	  Serial.println(value,DEC);
	  break;
	case 's' :
	  RTC.set(DS1307_SEC,value);
	  Serial.print("seconds set to ");
	  Serial.println(value,DEC);
	  break;
	case 'D' :
	  RTC.set(DS1307_DATE,value);
	  Serial.print("day of month set to ");
	  Serial.println(value,DEC);
	  break;
	case 'd' :
	  RTC.set(DS1307_DOW,value);
	  Serial.print("day of week set to ");
	  Serial.println(value,DEC);
	  break;
	case 'M' :
	  RTC.set(DS1307_MTH,value);
	  Serial.print("month set to ");
	  Serial.println(value,DEC);
	  break;
	case 'Y' :
	  RTC.set(DS1307_YR,value);
	  Serial.print("year set to ");
	  Serial.println(value,DEC);
	  break;
	case 'u' :
	case 'U' :
	  use();
	  break;
	case 'r' :
	  RTC.stop();
	  Serial.println("Clock stopped");
	  break;
	case 'R' :
	  RTC.start();
	  Serial.println("Clock running");
	  break;
	default :
	  break;
      }
      read_RTC();
}

void loop() {
   if (Serial.available()) {
     write_RTC();
    }
}

 

bit
Offline
Зарегистрирован: 07.05.2012

Не хотят часики тикать  отображает в сериал

0 0 0 0 0 2000

И всё тут,

3v с батер есть 5v тоже резисторы стоят

Не понимаю что не так?

bit
Offline
Зарегистрирован: 07.05.2012

За тикали)))

bit
Offline
Зарегистрирован: 07.05.2012

Привет всем помогите пожалуйста мне с кодам как то он не корректно работает точнее он работает когда включаешь сериал монитор.

 Суть кода такова  устройства будит включатся и выключатся каждый день в заданное время даже если были сбои по основному питанию

 

#include <WProgram.h>
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif 
#include <Wire.h>
#include <DS1307.h> 

int ledPin =13;

int x;
void setup()
{
  
  pinMode(ledPin, OUTPUT);
  RTC.start();
}
void loop()
{
 
  
  x= (RTC.get(DS1307_SEC,true));
  
  
  if((x>19)&&(x<30)) 
  {
   digitalWrite(ledPin, HIGH);
  
  }
   else {
     digitalWrite(ledPin, LOW);
   }
   
}

 

Поправьте пожалуйста код

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

RTC.start();

А Вам их точно надо каждый раз стартовать заново?

bit
Offline
Зарегистрирован: 07.05.2012

 

Ой нет это я проморгал

bit
Offline
Зарегистрирован: 07.05.2012

 

Подскажите пожалуйста как сделать так чтобы при отправки в сериал  соединения 10-20

 

Чтобы устройство включалось на 10 и выключалось на 20 сек и чтобы этот цикл прописывался в энергонезависимую память ,

 

И если на ардуино выключить и включить питания  чтобы этот if((x>10)&&(x<20))

Читался из памяти и выполнял те же действия на 10 – 20 сек

 

И соответственно если мы отправляем 30-40 то это время включения устройства также прописывается в энергонезависимой памяти и приключения ардуино включает устройства на 30-40 сек/час

 


#include <WProgram.h>
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif 
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson
int ledPin =13;

int x;


byte mode = 0;


void setup()
{
Serial.begin(9600);

 pinMode(ledPin, OUTPUT);



}

void loop()
{
  x= (RTC.get(DS1307_SEC,false));// Читаем сек и сохраняем в х
  
  
  
Serial.print(RTC.get(DS1307_HR,true)); 
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC,false));/
Serial.print(" "); 
Serial.print(RTC.get(DS1307_DATE,false));
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH,false));
Serial.print("/");
Serial.print(RTC.get(DS1307_YR,false)); 
Serial.println();
delay(1000);
 
   
    



 if(Serial.available())
  {
    String slovo = "";
    while(Serial.available())
    {
      delay(2);
      slovo += (char)Serial.read();  
    }
    if(slovo.substring(0,6) == "10-20") ; // Если оправляем в сериал соединения 10 - 20 то делаем то что вскопках
    {
       if((x>10)&&(x<20)) // Читаем из х значения и если эти значения с 10 по 20 секунду то делаем действия в скобках
  {
   digitalWrite(ledPin, HIGH);
  
  }
   else {
     digitalWrite(ledPin, LOW);
   }
    }
    
    if(slovo.substring(0,6) == "30-40") ; // Если оправляем в сериал соединения 30 -40 то делаем то что вскопках
    {
       if((x>30)&&(x<40)) //Читаем из х значения и если эти значения с 30 по 40 секунду то делаем действия в скобках
  {
   digitalWrite(ledPin, HIGH);
  
  }
   else {
     digitalWrite(ledPin, LOW);
   }
    
    }
 


}
}


 

 

maksim
Offline
Зарегистрирован: 12.02.2012

http://arduino.ru/forum/obshchii/izmenenie-vremeni-taimera-na-ds1307#comment-28970 этот пример можно под ваши нужды переделать.

bit
Offline
Зарегистрирован: 07.05.2012

да с этим мне разбираться и разбираться

bit
Offline
Зарегистрирован: 07.05.2012

Привет подскажите как вот с этой штукой разобраться.

Как сделать синхронизацию часиков через GPS.

Я взял модуль TIV-ST-0-000 подключил его отправил на него команды для запуска и он мне стал присылать данные вот только я не как не могу разобраться где тут дата и время

И как мне это всё синхронизировать  с часами

$GPRMC,073339.115,A,5652.2763,N,06035.7225,E,0.03,330.21,230513,,*0A

 

Подскажите пожалуйста

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Оно? http://ru.wikipedia.org/wiki/NMEA_0183

Что то с трудом верится, что это синхронизация по времени, это навигационные данные, IMHO.

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Дак да это приёмник GPS сигнала там координаты и должно быть время и дата как я полагаю

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Да это то  что нужно спасибо

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

bit пишет:

 

Дак да это приёмник GPS сигнала там координаты и должно быть время и дата как я полагаю

 

 

Цитата:
Навигационное сообщение (информация, которую спутники передают GPS навигатору) содержит данные об орбите спутника, системном времени, общем состоянии системы, а также модель задержки сигналов в ионосфере.

Судя по описанию полей:

073339.115 - это время 07 часов 33 минуты 39.115 секунд

230513 - это дата 23 мая 13 года.

Вот как это на сях распарсить и натолкать в массив данных - не подскажу. В awk или perl - делается достаточно просто.

bit
Offline
Зарегистрирован: 07.05.2012

С этим та я разобрался , а вот как мне данные синхронизировать в часы реального времени

Вопрос в том как  мне извлечь определенные цифры  из строки

 

 

$GPRMC,113445.271,A,5672.2457,N,06095.7650,E,0.10,385.78,230513,,*04

 

      11  34  45

       23  05  13

 

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Я думаю как то так нужно сделать но не знаю как реализовать.

Считываем строку с сериал соединения и сохраняем в переменную Х  8 и 9 знак

в W 10 и 11 знак

 

$ G P R M C       ,   1  1     3    4    4   5 . 2 7 1,A,5672.2457,N,0

1 2 3  4  5  6    7    8  9   10  11  12

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

bit пишет:

Я думаю как то так нужно сделать но не знаю как реализовать.

Используя запятую в качестве сепаратора надо получить из строки массив из 12 полей, после чего у нас в двух элементах массива будут лежать искомые строки с временем и датой. Второй итерацией через substr() разбиваем, например, "073339.115" на три фрагмента по два знака, отбрасывая дробную часть секунд.

Если это делать на компьютере - то там все просто:

echo "$GPRMC,073339.115,A,5652.2763,N,06035.7225,E,0.03,330.21,230513,,*0A" |\

     awk -F, '{

            sub(/[0-9][0-9]/, "&:", $2);

            sub(/.*:[0-9][0-9]/,"&:",$2);

            sub(/[0-9][0-9]/, "&-", $10);

            sub(/-[0-9][0-9]/, "&-20", $10);

            print $2 "  " $10

           }'

Получаем:
07:33:39.115  23-05-2013

__Alexander
Offline
Зарегистрирован: 24.10.2012

только поотнимать 0х30 надо будет.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Описание протоклоа на русском:

http://nvs-gnss.ru/support/communications-protocol/item/30-nmea.html

А на счет выделения из строки данных можно почитать, например, здесь:

http://arduino.ru/forum/programmirovanie/strengh-sscanf

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Я это всё на ардуине пытаюсь собрать

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

А по ссылкам слабо пройтись? Ок, удачи!

- Ты в баню?

- Нет, в баню!

- Аааа, я думал в баню

bit
Offline
Зарегистрирован: 07.05.2012

 

Привет всем , а можно как то более по подробней, а то для меня это сложно по одной строке разобраться

 

 

sscanf(buffer, "%[^,], %[^:]:%[^,], %[^,], %[^,], %[^:]:%[^,], %[^,], %[^>]", &STATUS, &STRING1, &MPOSX, &MPOSY, &MPOSZ, &STRING2, &WPOSX, &WPOSY, &WPOSZ);

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

легче считать посылку в обычный буфер, и обращаться к нужным элементам по номерам. buff[x]

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

__Alexander пишет:

легче считать посылку в обычный буфер, и обращаться к нужным элементам по номерам. buff[x]

Это если строка строго по позициям разбита, а здесь формат плавающий

bit
Offline
Зарегистрирован: 07.05.2012

Раздробить строку получилось , а вот как числа разделить подскажи пожалуйста?

строка

$GPRMC,072653.700,A,56   

 

Раздробленная строка

$GPRMC

072653.700

A

56

Разделённые числа

07

26

53.700

 int i=0;
  char buffer[100];
 
//если есть данные - читаем
  if(Serial.available()){
     delay(100);
      
     //загоняем прочитанное в буфер
     while( Serial.available() && i< 99) {
        buffer[i++] = Serial.read();
     }
     //закрываем массив
     buffer[i++]='\0';
  }
 
//если буфер наполнен
  if(i>0){  
     
    //разбераем его на части отделенные запятой
    sscanf(buffer, "%[^,] ,%[^,], %[^,], %[^,]", stpoka1, &stpoka2, &stpoka3, &stpoka4);
     
  }
   
Serial.println(stpoka1);
Serial.println(stpoka2);
Serial.println(stpoka3);
Serial.println(stpoka4);

   stpoka1 [0] = '\0';
   stpoka2 [0] = '\0';  
   stpoka3 [0] = '\0';
   stpoka4 [0] = '\0';
  
delay(5000);

 

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Подсказка помогла спасиб, а вот дальше как?

 

 

Как мне это число раздробить по частям      072653.700 чтобы получилось   07     26      53?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

bit пишет:

Как мне это число раздробить по частям      072653.700 чтобы получилось   07     26      53?

substring(pos1, pos2); не помогает?

http://arduino.cc/en/Tutorial/StringSubstring - на редкость бестолково описана функция, но уж что есть - то есть...

bit
Offline
Зарегистрирован: 07.05.2012

Andrey_Y_Ostanovsky пишет:

bit пишет:

Как мне это число раздробить по частям      072653.700 чтобы получилось   07     26      53?

substring(pos1, pos2); не помогает?

http://arduino.cc/en/Tutorial/StringSubstring - на редкость бестолково описана функция, но уж что есть - то есть...

 

Привет в этом примере я так и не смог разобраться

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

bit пишет:

Как мне это число раздробить по частям      072653.700 чтобы получилось   07     26      53?

Привет в этом примере я так и не смог разобраться

Ну, смотрите:

Ваша строка:      072653.700

Позиции:             0123456789 (иногда нумеруют начиная с единицы - это надо проверять, т.к. пишут все как попало...)

Функция позволяет вырезать определенный фрагмент, т.е. в переменную A загнать кусочек строки (например с позиции 0 по позицию 1) и так далее. Да, там по ссылке в примере слово "текст" (на английском!) из пяти букв, так что готовьтесь к тому, что придется проверять - правильно ли оно вырезает фрагменты из строки. :)

bit
Offline
Зарегистрирован: 07.05.2012

Почему у меня этот код пишет ошибку, что в нём не хватает?

 

void setup() {
   // Open serial communications and wait for port to open:
   Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
   }
  

   // send an intro:
   Serial.println("\n\nString  substring():");
   Serial.println();
}

void loop() {
   // Set up a String:
   String stringOne = "Content-Type: text/html";
   Serial.println(stringOne);

   // substring(index) looks for the substring from the index position to the end:
   if (stringOne.substring(19) == "html") {
     Serial.println("It's an html file"); 
   } 
   // you can also look for a substring in the middle of a string:
   if (stringOne.substring(14,18) == "text") {
     Serial.println("It's a text-based file"); 
   } 

   // do nothing while true:
   while(true);
}

 

 

 

sketch_may26c.cpp: In function 'void setup()':
sketch_may26c:3: error: no match for 'operator!' in '!Serial'
sketch_may26c.cpp:7: note: candidates are: operator!(bool) <built-in>

maksim
Offline
Зарегистрирован: 12.02.2012

Удалите 4, 5 и 6 строки.

bit
Offline
Зарегистрирован: 07.05.2012

 

Удалять я удалял но он не работает или я что то не то делаю

 Я отправляю в сериал символы а в ответ тишина

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Максим подскажи пожалуйста с кодам.

Я пытаюсь синхронизировать часы на микросхеме DS1307 с помощью  GPS приёмника .

Подключил GPS приёмник скинул на него настройки и он мне стал выдавать строку

 

$GPRMC,113445.271,A,5672.2457,N,06095.7650,E,0.10,385.78,230513,,*04

                 Время                                                                              дата

Причём это строка может уменьшатся и  увеличиваться в размерах из за координат поэтом у я её раздробил по частям

С помощью этого кода я разобрал строку по частям.

 

int i=0;
  char buffer[100];
 
//если есть данные - читаем
  if(Serial.available()){
     delay(100);
      
     //загоняем прочитанное в буфер
     while( Serial.available() && i< 99) {
        buffer[i++] = Serial.read();
     }
     //закрываем массив
     buffer[i++]='\0';
  }
 
//если буфер наполнен
  if(i>0){  
     
    //разбераем его на части отделенные запятой
    sscanf(buffer, "%[^,] ,%[^,], %[^,], %[^,]", stpoka1, &stpoka2, &stpoka3, &stpoka4);
     
  }
   
Serial.println(stpoka1);
Serial.println(stpoka2);
Serial.println(stpoka3);
Serial.println(stpoka4);

   stpoka1 [0] = '\0';
   stpoka2 [0] = '\0';  
   stpoka3 [0] = '\0';
   stpoka4 [0] = '\0';
  
delay(5000);

 

и у меня получилась так

$GPRMC,

113445.271,

A,

 А для синхронизации мне нужно время и дату разобрать на двоичные числа

Разделить по частям

11 час

34 мин

45 сек

bit
Offline
Зарегистрирован: 07.05.2012

Привет все вроде бы вот с этой примером  разобрался.

Но не как не могу сообразить как мне не сверять значения между 20,21, а сохранять

Что бы патом выводить Serial.println("");

Подскажите пожалуйста как это сделать?


  
  String stringOne = "asdfghjytrewqasdfghy100qawsedrft";   // Разбираем строку на знаки и сохраняем в  stringOne
  Serial.println(stringOne);
  
  
  if (stringOne.substring(20,23) == "100") {    // Читаем из stringOne   смотрим что между знаками 20,23 и если между ними 100 то делаем действия в скобках
    Serial.println("It's an 100 file"); 
  } 
  
  

  
 

 

bit
Offline
Зарегистрирован: 07.05.2012

 

Как то вот так должно быть но у меня почему та в сериал просто приходит 0

 

 

 String stringOne = "asdfghjytrewqasdfghy100qawsedrft";   // Разбираем строку на знаки и сохраняем в  stringOne
  Serial.println(stringOne);
  
  
   asd=stringOne.substring(20,23); // Читаем из stringOne  смотрим что между строками 20,23 и сохраняем в asd
   
    
  
    Serial.println(asd);

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

всё работает. сериал нормально работает?

bit
Offline
Зарегистрирован: 07.05.2012

Вот что он выдаёт

 

 

asdfghjytrewqasdfghy100qawsedrft
0
asdfghjytrewqasdfghy100qawsedrft
0
asdfghjytrewqasdfghy100qawsedrft
0
asdfghjytrewqasdfghy100qawsedrft

 

 

 

Вместо нуля должно быть 100

__Alexander
Offline
Зарегистрирован: 24.10.2012

у меня 100. а asd как объявлен?