Часы на DS1307

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

int asd = 0;
void setup() {
  Serial.begin(9600);
 
}

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

  
 delay(1000);
}

 

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

ха. так asd должен быть тоже строкой, а не int.

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

 

Исправь пожалуйста код, а то я уже второй день не как не могу разобраться

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

дык, не int asd=0, а

String asd;

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

 

Усё заработало ну вот теперь буду знать спасибо тебе .

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

Если оставить int asd, то можно написать так:

asd = stringOne.substring(20,23).toInt();

 

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

Подскажите пожалуйста с кода не получается сделать if

Данные приходящие с GPS приёмника дробятся по частям и по знакам

Когда в stroka_3_A_V приходит знак A это значит достоверная информация значит делаем действия в скобках,

А приходит, а действия не делается  ст 44-62

 

  
  
 
  
  
 sscanf(buffer, "%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%", 
   stroka_1, stroka_2_vrem, stroka_3_A_V, stroka_4, stroka_5, stroka_6, stroka_7, stroka_8, stroka_9, stroka_10_data, stroka_11 );   
     
  }
  
  
 
  
  
   String stringOne = stroka_2_vrem;     
   has = stringOne.substring(0,2);     
   
  
   String stringOne2 = stroka_2_vrem;   
   
   minut= stringOne2.substring(2,4);
   
   
    String stringOne3 = stroka_2_vrem;   
   
   sek = stringOne3.substring(4,6);
   
   
    String stringOne4 = stroka_10_data;   
   
    den= stringOne4.substring(0,2);
    
   
   
    String stringOne5 = stroka_10_data;   
   
    mes= stringOne5.substring(2,4);
    
    
    
     String stringOne6 = stroka_10_data;   
   
   god = stringOne6.substring(4,7);
   
   
   
        
                  
 Serial.println(stroka_3_A_V);
 
     if (stroka_3_A_V == "A") {              
     


 
   Serial.print(has);
   Serial.print(":");
    Serial.print(minut);
    Serial.print(":");
   Serial.println(sek);
   
    Serial.print(den);
    Serial.print(":");
     Serial.print(mes);
     Serial.print(":");
      Serial.println(god);
     }
  stroka_1 [0] = '\0';
  stroka_2_vrem [0] = '\0';
  stroka_3_A_V [0] = '\0';

 

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

почему такая не стабильность даты и времени , входящие данные GPS стабильны, а исходящие путаются иногда?

 

E::E
::
13:51:16
29:05:13
13:51:17
29:05:13
13:51:18
29:05:13
13:51:19
29:05:13
13:51:20
29:05:13
13:51:21
29:05:13
06:04:5.
::
::
::
13:51:25
29:05:13
13:51:26
29:05:13
13:51:27
29:05:13
13:51:28
29:05:13
13:51:29
29:05:13
13:51:30
29:05:13
06:04:5.
N::
13:51:33
29:05:13
13:51:34
29:05:13
13:51:35
29:05:13
13:51:36
29:05:13
13:51:37
29:05:13
13:51:38
29:05:13
::
::
39:.3:2
::

 

 int i=0;
  char buffer[100];
 
       
  if(Serial.available()){   //если есть данные - читаем
     delay(10);
      
     
     while( Serial.available() && i< 99) {  //загоняем прочитанное в буфер
        buffer[i++] = Serial.read();
     }
     
     buffer[i++]='\0';  //закрываем массив
  }
delay(50);
  if(i>0){   //если буфер наполнен
     
   
    sscanf(buffer, "%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^',']%", 
   stroka_1, stroka_2_vrem, stroka_3_A_V, stroka_4, stroka_5, stroka_6, stroka_7, stroka_8, stroka_9, stroka_10_data );   
     
  }
  
  delay(50);
  
 
  
  
   String stringOne = stroka_2_vrem;     
   has = stringOne.substring(0,2);     
   
  
   
bit
Offline
Зарегистрирован: 07.05.2012

Привет все, какая та не понятная ерунда происходи.

Данные в buffe читаются чётка , а когда разбираем по запятым sscanf  то 3- 4 строки разбираются патом сбой и опять 3-4 строки нормально

Как это можно исправить?   стр 19-23

<<buffer>>$GPRMC,061528.292,A,7652.2435,N,06055.7680,E,0.02,278.97,300513,,*0D

<<sscanf>>$GPRMC061528.292A7652.2435N06055.7680E0.02278.97300513,*0D

GPG TIME   06:15:28
GPS DATA   30:05:13



<<buffer>>$GPRMC,061529.292,A,7652.2435,N,06055.7680,E,0.07,353.68,300513,,*01

<<sscanf>>$GPRMC061529.292A7652.2435N06055.7680E0.07353.68300513,*01

GPG TIME   06:15:29
GPS DATA   30:05:13



<<buffer>>$GPRMC,061529.292,A,7652.2435,N,06055.7680,E,0.07,353.68,300513,,*01

<<sscanf>>
GPG TIME   :0:13
GPS DATA   ::



<<buffer>>$GPRMC,061530.292,A,7652.2435,N,06055.7680,E,0.07,331.07,300513,,*04

<<sscanf>>$GPRMC061530.292A7652.2435N06055.7680E0.07331.07300513,*04

GPG TIME   06:15:30
GPS DATA   30:05:13



 

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

Оказалось вся проблема из за маленькой задержки))))

bit
Offline
Зарегистрирован: 07.05.2012
  sscanf(buffer, "%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%", 
   stroka_1, stroka_2_vrem, stroka_3_A_V, stroka_4, stroka_5, stroka_6, stroka_7, stroka_8, stroka_9, stroka_10_data, stroka_11 );   //разбераем его на части отделенные запятой
     
  }

 Serial.println(stroka_3_A_V);
   
       if (stroka_3_A_V == "A") {                      
    digitalWrite(ledPin, HIGH);
       }
       else
     {
     digitalWrite(ledPin, LOW);
   }

Подскажите как этот if  запустить  не как не получается?

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

 

Форматы я вроде уже все перебрал

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

а если так? if (stroka_3_A_V == 'A')

в одинарных ковычках.

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

 

Так я пробовал вот что пишет

 

 

 

 

sketch_may30e.cpp: In function 'void loop()':

sketch_may30e:139: error: ISO C++ forbids comparison between pointer and integer

 

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

Вот код для примера , отпровляешь в сериал  допустим  qwe,A,  но не какой реакции A возвращается как и положено но действия не происходит

char stroka_1 [15];  
char stroka_2_vrem [15];

int ledPin = 13;    

void setup(){
   
   
    Serial.begin(9600); 
 }
 
 void loop(){
   
   int i=0;
  char buffer[100];
 
       
  if(Serial.available()){   //если есть данные - читаем
     delay(300);
      
     
     while( Serial.available() && i< 99) {  //загоняем прочитанное в буфер
        buffer[i++] = Serial.read();
     }
     
     buffer[i++]='\0';  //закрываем массив
  }

  if(i>0){   //если буфер наполнен
     
   
    sscanf(buffer, "%[^','],%[^',']", 
   stroka_1, stroka_2_vrem );   //разбераем его на части отделенные запятой
     
  }
  
   Serial.println(stroka_2_vrem);
   
       if (stroka_2_vrem == "A") {                      
    digitalWrite(ledPin, HIGH);
       }
       else
     {
     digitalWrite(ledPin, LOW);
   }
    

   delay(500);
   
   stroka_1 [0] = '\0';
  stroka_2_vrem [0] = '\0';
  
 }

 

 

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

 

А про String я забыл, в этом причина и была

Geronimo
Offline
Зарегистрирован: 06.05.2013

bit пишет:

 

А про String я забыл, в этом причина и была

неправильно сравнивать строки через ==

используй strcmp

 

 

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

Geronimo пишет:

bit пишет:

 

А про String я забыл, в этом причина и была

неправильно сравнивать строки через ==

используй strcmp

 

 

 

Спасиб теперь буду знать

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

Подскажите пожалуйста почему в этом коде char в int переходит?




   
char val = 2; 
char val2 =10;
char rezul; 
void setup(){
  Serial.begin(9600);              
}
  void loop()
{
 
  




  int asd = val;
    int asd2 = val2;
      int asd3 = rezul;

if (asd3 = asd + asd2);
Serial.println(asd3);
delay(1000);


    
    }

 

А в этом нет, как это можно решить по-другому?

char stroka_1 [15];  
char stroka_2_vrem [15];

int ledPin = 13;    

void setup(){
   
   
    Serial.begin(9600); 
 }
 
 void loop(){
   
   int i=0;
  char buffer[100];
 
       
  if(Serial.available()){   //если есть данные - читаем
     delay(300);
      
     
     while( Serial.available() && i< 99) {  //загоняем прочитанное в буфер
        buffer[i++] = Serial.read();
     }
     
     buffer[i++]='\0';  //закрываем массив
  }

  if(i>0){   //если буфер наполнен
     
   
    sscanf(buffer, "%[^','],%[^',']", 
   stroka_1, stroka_2_vrem );   //разбераем его на части отделенные запятой
     
  }
  
  int asd = stroka_2_vrem;
    

   delay(500);
   
   stroka_1 [0] = '\0';
  stroka_2_vrem [0] = '\0';
  
 }

 

 

sketch_may31l.cpp: In function 'void loop()':
sketch_may31l:36: error: invalid conversion from 'char*' to 'int'

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

Потому что в первом случае переменная char, а во втором указатель char* 

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

 

А каким тогда способам можно добавить к текущему времени  +6 часов если в int не переводится?

Geronimo
Offline
Зарегистрирован: 06.05.2013

int asd = atoi(stroka_2_vrem);

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

 

A с GPS приёмника время по Гринвичу

Geronimo
Offline
Зарегистрирован: 06.05.2013

Для конвертации:

целые:

int atoi(char*) - переводит строку в число

char* itoa(int) - переводит число в строку

 

дробныек

float atof(char*) - переводит строку в число

char* ftoa(float) - переводит число в строку

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

 

Ещё раз спасибо.

А почему в этом случае не получается так.

 


    sscanf(buffer, "%[^','],%[^',']", 
   stroka_1, stroka_2_vrem );   //разбераем его на части отделенные запятой
     
  }
  
   String stringOne = stroka_2_vrem;     // Разбираем строку на знаки и сохраняем в  stringOne
   chas = stringOne.substring(0,2);      // Читаем из stringOne  смотрим что между строками 2,5 и сохраняем в asd
   
  
   String stringOne2 = stroka_2_vrem;   
   
   minut= stringOne2.substring(2,4);
   
   
   
  
   int chas6 = atoi(chas);
   
if (value1 = value6 + chas6);
   
   

 

sketch_may31l.cpp: In function 'void loop()':
sketch_may31l:51: error: invalid conversion from 'int' to 'const char*'
sketch_may31l:51: error: initializing argument 1 of 'int atoi(const char*)'
sketch_may31l:58: error: 'chas6' was not declared in this scope

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

И целые и дробные попробовал  

 

И не как не хочет в int

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

 

sketch_may31l.cpp: In function 'void loop()':
sketch_may31l:51: error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'

Geronimo
Offline
Зарегистрирован: 06.05.2013

bit пишет:

 

sketch_may31l.cpp: In function 'void loop()':
sketch_may31l:51: error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'

 

String и char* это разные вещи

int chas6 = atoi(chas.toCharArray());

 

Geronimo
Offline
Зарегистрирован: 06.05.2013

bit пишет:

 

Ещё раз спасибо.

А почему в этом случае не получается так.

 


    sscanf(buffer, "%[^','],%[^',']", 
   stroka_1, stroka_2_vrem );   //разбераем его на части отделенные запятой
     
  }
  
   String stringOne = stroka_2_vrem;     // Разбираем строку на знаки и сохраняем в  stringOne
   chas = stringOne.substring(0,2);      // Читаем из stringOne  смотрим что между строками 2,5 и сохраняем в asd
   
  
   String stringOne2 = stroka_2_vrem;   
   
   minut= stringOne2.substring(2,4);
   
   
   
  
   int chas6 = atoi(chas);
   
if (value1 = value6 + chas6);
   
  

sketch_may31l.cpp: In function 'void loop()':
sketch_may31l:51: error: invalid conversion from 'int' to 'const char*'
sketch_may31l:51: error: initializing argument 1 of 'int atoi(const char*)'
sketch_may31l:58: error: 'chas6' was not declared in this scope

 

переменная chas6 не определена

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

 

Каким тогда образам в int конвертировать?

 

 

Математические функции в String  не работают.

Geronimo
Offline
Зарегистрирован: 06.05.2013

bit пишет:

 

Каким тогда образам в int конвертировать?

 

 

Математические функции в String  не работают.

Читаем что такое String

http://arduino.ru/Reference/StringObject

у этого класса есть специальный метод toCharArray() который дает нам char*

и уже char* передаем в atoi

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

 

Спасибо за подсказу всё получилось.

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

       

 

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

 

Привет всем , подскажите где взять  библиотеку #include <SD.h>,  гуглить гуглил может не там искал?

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

 

Собрал вот такую схему для чтения CD карт.

Код не ком. Пишет

 

 

sketch_jun04a.cpp:22:16: error: SD.h: No such file or directory

sketch_jun04a:23: error: 'File' does not name a type

sketch_jun04a.cpp: In function 'void setup()':

sketch_jun04a:35: error: 'SD' was not declared in this scope

sketch_jun04a:43: error: 'myFile' was not declared in this scope

sketch_jun04a:43: error: 'SD' was not declared in this scope

sketch_jun04a:43: error: 'FILE_WRITE' was not declared in this scope

 

 

я как понял не хватает библиотеки  #include <SD.h>

может я и ошибаюсь

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

 

Она где та тут а где не понимаю

http://arduino.cc/en/Reference/SD

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

Извиняюсь конечно но я всё равно не понимаю где тут её брать , сайт выдаёт код https://github.com/adafruit/SD/blob/master/SD.h .
Обычно когда скачиваешь библиотеку на ардуино она идёт файлом , распаковываешь и вставляешь в папку, или этот код нужна как то преобразовывать в библиотеку

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

 

 Или я не туда залез?

Geronimo
Offline
Зарегистрирован: 06.05.2013

https://github.com/adafruit/SD

скачиваем все фаилы и кладем в папку библиотеки тут просто в архив не запихнули

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

 

Ну что же я не так то делаю скачал фаил  SD-master распаковал , сохранил его в папку ардуино libraries как SD  .

Пытаюсь запустить код пишет

 

 

C:\Documents and Settings\К\Рабочий стол\ARDUINO C++\arduino-0021\libraries\SD\utility\Sd2Card.cpp: In member function 'uint8_t Sd2Card::init(uint8_t, uint8_t, int8_t, int8_t, int8_t)':

C:\Documents and Settings\К\Рабочий стол\ARDUINO C++\arduino-0021\libraries\SD\utility\Sd2Card.cpp:290: error: 'digitalPinToPort' was not declared in this scope

C:\Documents and Settings\К\Рабочий стол\ARDUINO C++\arduino-0021\libraries\SD\utility\Sd2Card.cpp:290: error: 'portOutputRegister' was not declared in this scope

C:\Documents and Settings\К\Рабочий стол\ARDUINO C++\arduino-0021\libraries\SD\utility\Sd2Card.cpp:291: error: 'digitalPinToBitMask' was not declared in this scope

C:\Documents and Settings\К\Рабочий стол\ARDUINO C++\arduino-0021\libraries\SD\utility\Sd2Card.cpp:294: error: 'portInputRegister' was not declared in this scope

 

 

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

 

Подскажите в чём проблема , библиотеку поставил SD и не один скеч не работает с ней

Snubist
Offline
Зарегистрирован: 18.02.2013

в папке C:\Documents and Settings\К\Рабочий стол\ARDUINO C++\arduino-0021\libraries\

Должна быть папка SD в ней как минимум два файла SD.cpp и SD.h

Регистр верхний везде.

После чего выбираем в IDE Скетч->Импортировать библиотеку->SD

В скетче появится строка 

#include <SD.h>

 

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

 

Строка появляется но скеч не запускается в 0021 вер , скачал новую версию  1.0.4 там всё заработало видимо старая версия не поддерживает.

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

 

Привет всем , пытаюсь подцепить карту SD по этим примерам но ардуино не  как не хочет

 с ней работать  вроде всё правильно подключаю и всё не как не робит пишет Initializing SD card...initialization failed!

 

 

http://habrahabr.ru/post/115176/

 

http://www.polesite.ru/?p=1193

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

bit пишет:

Привет всем , пытаюсь подцепить карту SD по этим примерам

Я извиняюсь, Вы тему топика когда послений раз смотрели? Или у Вас SD карта на одном модуле с часами DS1307? Я таких еще не видел...

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

Да я тоже смотрю им уже пофиг на часы и никого не парит, что кто то их поиски по сд карте вряд ли кто прочитает

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

Andrey_Y_Ostanovsky пишет:

bit пишет:

Привет всем , пытаюсь подцепить карту SD по этим примерам

Я извиняюсь, Вы тему топика когда послений раз смотрели? Или у Вас SD карта на одном модуле с часами DS1307? Я таких еще не видел...

 

ну так то это один проект и всё на одной плате будит , ну если вам так будит удобней я создам новую тему.