Помогите с созданием часов на светодиодных индикаторах

Iskandarov
Offline
Зарегистрирован: 03.07.2014

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

Мне нужно сделать шести разрядные часы (чч:мм:сс) на светодиодных индикаторах.

У меня есть модуль часов реального времени, индикаторы и сдвиговые регистры 74hc595.

Нужно что бы время которое идёт в модуле часов выводилось с помощью сдвиговых регистров на индикаторы.

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

а чем помочь то? код за Вас написать?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

JollyBiber пишет:

а чем помочь то? код за Вас написать?


Дадада и еще мне ключи от квартиры с деньгами.

У тебя телефон не отвечает.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

У меня нет телефона, я бедно живу...

Iskandarov
Offline
Зарегистрирован: 03.07.2014

JollyBiber пишет:

а чем помочь то? код за Вас написать?

Если мне кто нибудь код напишет, буду оочень благодарен, а вообще так как я в программировании полный ноль, я просто не могу понять как из модуля часов вытащить информацию и заставить светиться нужные цифры на индикаторах

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Начните со схемы:

потом опеределите все цифры в массив

byte num[10] = {B00111111, B00000110, .... }; // 0, 1

а потом уже работать с часами ....

DS = MOSI

SH_CP = SCK

ST_SP = "синхронизация кадров" - после отправки всех циферок

//вывод 3 цифр
SPI.write(num[0]);//первая цифра "0" 
SPI.write(num[0]);//вторая цифра "0" 
SPI.write(num[1]);//третья цифра "1" 
digitalWirte(ST_CP, HIGH);
delay(10);
digitalWirte(ST_CP, LOW);

 

glorius
Offline
Зарегистрирован: 12.07.2015

Помогите с скетчем. Есть Ардуино Уно, часы реального времени DS3231 по I2C и 6 семисегментных индикаторов с общим анодом. Индикаторы подключены по SPI через каскад сдвиговых регистров 74HC595. Часы настроил, время выводится через монитор последовательного порта. На индикаторы тоже могу выводить любые цифры, а вот как поженить эти два скетча знаний не хватает, да и гугл предлагает с отдельно выведенными каналами общих анодов. У меня плата уже спаяна с общей плюсовой шиной для всех разрядов и всех регистров.

Скетч для индикаторов

const byte latchPin=6;//st
const byte clockPin=7;//sh
const byte dataPin=5;//ds

//задаем бинарный код для каждой цифры
byte number[] = {0b10001000, 0b10111011, 0b00011100, 0b00011001, 0b00101011, 0b01001001, 0b01001000, 0b10011011, 0b00001000, 0b00001001};

void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);

}

void loop() {

digitalWrite(latchPin,LOW);
shiftOut(dataPin, clockPin, LSBFIRST, number[6]);// выводим на индикатор цифру 6 и т.д.
shiftOut(dataPin, clockPin, LSBFIRST, number[5]);
shiftOut(dataPin, clockPin, LSBFIRST, number[4]);
shiftOut(dataPin, clockPin, LSBFIRST, number[3]);
shiftOut(dataPin, clockPin, LSBFIRST, number[2]);
shiftOut(dataPin, clockPin, LSBFIRST, number[1]);
digitalWrite(latchPin,HIGH);
delay(1000);
digitalWrite(latchPin,LOW);
shiftOut(dataPin, clockPin, LSBFIRST, number[0]);
shiftOut(dataPin, clockPin, LSBFIRST, number[1]);
shiftOut(dataPin, clockPin, LSBFIRST, number[2]);
shiftOut(dataPin, clockPin, LSBFIRST, number[3]);
digitalWrite(latchPin,HIGH);
delay(1000);
}

Для часов нашел в нете такой

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  // set the initial time here:
  // DS3231 seconds, minutes, hours, day, date, month, year
   //setDS3231time(30,04,00,4,11,06,15);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}
void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  Serial.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Serial.print(":");
  if (minute<10)
  {
    Serial.print("0");
  }
  Serial.print(minute, DEC);
  Serial.print(":");
  if (second<10)
  {
    Serial.print("0");
  }
  Serial.print(second, DEC);
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print("   ");
  switch(dayOfWeek){
  case 1:
    Serial.println("Luni");
    break;
  case 2:
    Serial.println("Marti");
    break;
  case 3:
    Serial.println("Miercuri");
    break;
  case 4:
    Serial.println("Joi");
    break;
  case 5:
    Serial.println("Vineri");
    break;
  case 6:
    Serial.println("Sambata");
    break;
  case 7:
    Serial.println("Duminica");
    break;
  }
}
void loop()
{
  displayTime(); // display the real-time clock data on the Serial Monitor,
  delay(1000); // every second
}

Но этот выводит данные только на монитор последовательного порта, не зря там же Serial print.

Так понимаю что для выведения на индикаторы нужно присвоить значениям, считанных с DS3231, -> byte number

то есть что-то типа

if (hour = 1)

hour=number [0],[1]

потом считываем с модуля RTC

serial read часы, минуты, секунды.

и выводим на индикатор

shiftOut(dataPin, clockPin, LSBFIRST, hour,minute,second);

Н

на фото скетч под индикаторы с кучей shiftOut-ов и delay в секунду

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Iskandarov пишет:

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

Мне нужно сделать шести разрядные часы (чч:мм:сс) на светодиодных индикаторах.

Если Вам нужны часы, дешевле будет их купить. Готовые.

Если же Вы хотите научиться что-то делать на Ардуино, научитесь для начала хотя бы немного программировать.

Joiner
Offline
Зарегистрирован: 04.09.2014

andriano пишет:

Если Вам нужны часы, дешевле будет их купить. Готовые.

Если же Вы хотите научиться что-то делать на Ардуино, научитесь для начала хотя бы немного программировать.

Золотые слова. Орешек знаний тверд, но все же мы не привыкли отступать..... Читай интернет, пытайся понять, пробовай сделать. Вот в чем интерес. Если не интересно, то действительно - купи готовые. Я купил. Такое говно... За месяц на несколько минут уходят (это я про какой-то конструктор). А вот часы на основе модуля DS32...и что-то там такое за месяц всего на 1 секунду ушли (проверяю по интернету, типа атомные часы с секундами), да еще и температуру показывают.

glorius
Offline
Зарегистрирован: 12.07.2015

разбираю потихоньку код но непонятка not declared in this scope постоянно вылезает.

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
const byte latchPin=6;//st
const byte clockPin=7;//sh
const byte dataPin=5;//ds

// binary code for shift register & 7segment indicator
byte number[] = {0b10001000,0b10111011, 0b00011100, 0b00011001, 0b00101011, 0b01001001, 0b01001000, 0b10011011, 0b00001000, 0b00001001}; 




void setup() {
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
  Wire.begin();
  Serial.begin(9600);
 }
void readDS3231time(){
byte (*second, *minute, *hour);
}
{
   Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  }
//Присваиваем значение  для первой цифры часов
 { if (hour<10){
byte h1[] = number [0];
}
else if (10<=hour<20){
byte h1[] = number [1];
}
else if (hour=>20){
byte h1[] = number [2];
}
void setup()
{
   readDS3231time(&second, &minute, &hour);
  
 }

void loop()
{
  displayTime();

  digitalWrite(latchPin,LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, s2);
  shiftOut(dataPin, clockPin, LSBFIRST, s1);
  shiftOut(dataPin, clockPin, LSBFIRST, m2);
  shiftOut(dataPin, clockPin, LSBFIRST, m1);
  shiftOut(dataPin, clockPin, LSBFIRST, h2);
  shiftOut(dataPin, clockPin, LSBFIRST, h1);
     digitalWrite(latchPin,HIGH);
   delay(500); 
  }

Даже для h1 которого задекларировал.

Radjah
Offline
Зарегистрирован: 06.08.2014

Я вот так делал.

Индикатор на MAX7219, либа LedControl

glorius
Offline
Зарегистрирован: 12.07.2015

Опять 25 Ж:(

#include "Wire.h"
#include <DS3231.h>
#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
const byte latchPin=6;//st
const byte clockPin=7;//sh
const byte dataPin=5;//ds

// binary code for shift register & 7segment indicator
byte number[] = {0b10001000,0b10111011, 0b00011100, 0b00011001, 0b00101011, 0b01001001, 0b01001000, 0b10011011, 0b00001000, 0b00001001}; 


void setup() {
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
  Wire.begin();
  Serial.begin(9600);
 }

void loop()
{
   {
   Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  {
  *hour = bcdToDec(Wire.read() & 0x3f);
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  
  byte second, minute, hour;
  readDS3231time(&second, &minute, &hour);
  }
//Присваеваем значение для переменных
int h1 = hour / 10;
int h2 = hour % 10;
int m1 = minute() / 10;
int m2 = minute() % 10;
int s1 = second() / 10;
int s2 = second() % 10;
}

  digitalWrite(latchPin,LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, number[s2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[s1]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[m2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[m1]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[h2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[h1]);
     digitalWrite(latchPin,HIGH);
   delay(500); 
  }

тот же самый 

Arduino: 1.6.4 (Windows 7), Плата"Arduino Uno"

LED_Clock2.ino: In function 'void loop()':
LED_Clock2:36: error: 'hour' was not declared in this scope
LED_Clock2:37: error: 'second' was not declared in this scope
LED_Clock2:38: error: 'minute' was not declared in this scope
LED_Clock2:42: error: 'readDS3231time' was not declared in this scope
LED_Clock2:45: error: 'hour' was not declared in this scope
LED_Clock2:47: error: 'minute' was not declared in this scope
LED_Clock2:49: error: 'second' was not declared in this scope
LED_Clock2.ino:45:5: warning: unused variable 'h1' [-Wunused-variable]
LED_Clock2.ino:46:5: warning: unused variable 'h2' [-Wunused-variable]
LED_Clock2.ino:47:5: warning: unused variable 'm1' [-Wunused-variable]
LED_Clock2.ino:48:5: warning: unused variable 'm2' [-Wunused-variable]
LED_Clock2.ino:49:5: warning: unused variable 's1' [-Wunused-variable]
LED_Clock2.ino:50:5: warning: unused variable 's2' [-Wunused-variable]
LED_Clock2:54: error: 's2' was not declared in this scope
LED_Clock2:55: error: 's1' was not declared in this scope
LED_Clock2:56: error: 'm2' was not declared in this scope
LED_Clock2:57: error: 'm1' was not declared in this scope
LED_Clock2:58: error: 'h2' was not declared in this scope
LED_Clock2:59: error: 'h1' was not declared in this scope
'hour' was not declared in this scope

  

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

glorius пишет:
Опять 25 Ж:(
Понятно, что "Ж", а Вы чего ждали?

Вы описали second, minute, hour; в строке 41, а исользуете в строке 36. Нет, уж дорогой, "утром стулья .." ой ... сначала описываем, а потом используем. Перенесите строку 41 в начало функции loop и будет Вам счастье со строками ошибок 4,5,6.

Едем дальше.  minute, hour; описаны внутри фигурных скобок (строки  35 и 43), значит и использовать их можно только внутри. Вы же пытаетесь использовать их после закрывающей скобки в строках 45-50. Уберите нафиг фигурные скобки (удалите строки 35 и 43) и будет Вам счастье со строками ошибок 8-10

Строки сообщений 11-16 некритичны, но они предупреждают, что Вы на кой-то чёрт описали переменные h1, h2, m1, m2, s1, s2 в строках (45-50) и после этого ни разу ими не воспользовались. Зачем было описывать? А всё потому, что Вы описали их внутри фигурных скобок (строки 33 и 51) а использовать пытаетесь после закрытия скобки в строках 54-59. Рецепт - убираем нахрен строки 33 и 51 и строки диагностики с 11 по 22 исчезают в тумане.

Осталась одна строка ошибок - 7ая. Она говорит, что в библиотеке нет такой функции (а если и есть, то она метод и в лоб не вызывается). Тут я не в курсе. т.к. у меня нет этой библиотеки. Смотрите её описание внимательно.

 

glorius
Offline
Зарегистрирован: 12.07.2015

Спасибо за ликбез. Почти разобрался.

#include "Wire.h"
#include <DS3231.h>
#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
const byte latchPin=6;//st
const byte clockPin=7;//sh
const byte dataPin=5;//ds

// binary code for shift register & 7segment indicator
byte number[] = {0b10001000,0b10111011, 0b00011100, 0b00011001, 0b00101011, 0b01001001, 0b01001000, 0b10011011, 0b00001000, 0b00001001}; 


void setup() {
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
  Wire.begin();
  Serial.begin(9600);
 }

void loop()
{   Serial.read;
DS3231 time(&second, &minute, &hour);
  byte second, minute, hour; 
      Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
     second = bcdToDec(Wire.read());
    minute = bcdToDec(Wire.read());
    hour = bcdToDec(Wire.read());

  //Присваеваем значение для переменных
int h1 = hour()  / 10;
int h2 = hour()  % 10;
int m1 = minute() / 10;
int m2 = minute() % 10;
int s1 = second() / 10;
int s2 = second() % 10;


  digitalWrite(latchPin,LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, number[s2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[s1]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[m2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[m1]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[h2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[h1]);
     digitalWrite(latchPin,HIGH);
   delay(500); 
  }

Ошибок стало меньше 

Arduino: 1.6.4 (Windows 7), Плата"Arduino Uno"

LED_Clock2.ino: In function 'void loop()':
LED_Clock2:32: error: statement cannot resolve address of overloaded function
LED_Clock2:33: error: 'second' was not declared in this scope
LED_Clock2:33: error: 'minute' was not declared in this scope
LED_Clock2:33: error: 'hour' was not declared in this scope
statement cannot resolve address of overloaded function

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

glorius пишет:

Ошибок стало меньше 

Arduino: 1.6.4 (Windows 7), Плата"Arduino Uno"

LED_Clock2.ino: In function 'void loop()':
LED_Clock2:32: error: statement cannot resolve address of overloaded function
LED_Clock2:33: error: 'second' was not declared in this scope
LED_Clock2:33: error: 'minute' was not declared in this scope
LED_Clock2:33: error: 'hour' was not declared in this scope
statement cannot resolve address of overloaded function

Вам куда сказалм перенести описание переменных? В начало функции loop! А Вы куда перенесли? В начало - значит в самое начало. Поменяйте местами строки 33 и 34 и ошибки 5-7 исчезнут. 

Останется только ошибка 4, но я уже говорил, что Вы неправильно используете функцию библиотеки. У меня её (библиотеки) нет, поэтому я не могу посмотреть что там и как, и здесь помочь не могу. Смотрите описание библиотеки.

Radjah
Offline
Зарегистрирован: 06.08.2014

32-я строка:

Serial.read;

Кто-то пытается прочитать что-то из Serial, но забыл указать переменную, в которую читать и скобки. Это не паскаль, скобки надо в любом случае ставить.

glorius
Offline
Зарегистрирован: 12.07.2015

Библиотека DS3231.h


/*
  DS3231.cpp - Arduino/chipKit library support for the DS3231 I2C Real-Time Clock
  Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
  
  This library has been made to easily interface and use the DS3231 RTC with
  an Arduino or chipKit.

  You can find the latest version of the library at 
  http://www.RinkyDinkElectronics.com/

  This library is free software; you can redistribute it and/or
  modify it under the terms of the CC BY-NC-SA 3.0 license.
  Please see the included documents for further information.

  Commercial use of this library requires you to buy a license that
  will allow commercial use. This includes using the library,
  modified or not, as a tool to sell products.

  The license applies to all part of the library including the 
  examples and tools supplied with the library.
*/
#ifndef DS3231_h
#define DS3231_h

#if defined(__AVR__)
	#include "Arduino.h"
	#include "hardware/avr/HW_AVR_defines.h"
#elif defined(__PIC32MX__)
	#include "WProgram.h"
	#include "hardware/pic32/HW_PIC32_defines.h"
#elif defined(__arm__)
	#include "Arduino.h"
	#include "hardware/arm/HW_ARM_defines.h"
#endif

#define DS3231_ADDR_R	0xD1
#define DS3231_ADDR_W	0xD0
#define DS3231_ADDR		0x68

#define FORMAT_SHORT	1
#define FORMAT_LONG		2

#define FORMAT_LITTLEENDIAN	1
#define FORMAT_BIGENDIAN	2
#define FORMAT_MIDDLEENDIAN	3

#define MONDAY		1
#define TUESDAY		2
#define WEDNESDAY	3
#define THURSDAY	4
#define FRIDAY		5
#define SATURDAY	6
#define SUNDAY		7

#define SQW_RATE_1		0
#define SQW_RATE_1K		1
#define SQW_RATE_4K		2
#define SQW_RATE_8K		3

#define OUTPUT_SQW		0
#define OUTPUT_INT		1

class Time
{
public:
	uint8_t		hour;
	uint8_t		min;
	uint8_t		sec;
	uint8_t		date;
	uint8_t		mon;
	uint16_t	year;
	uint8_t		dow;

	Time();
};

class DS3231
{
	public:
		DS3231(uint8_t data_pin, uint8_t sclk_pin);
		void	begin();
		Time	getTime();
		void	setTime(uint8_t hour, uint8_t min, uint8_t sec);
		void	setDate(uint8_t date, uint8_t mon, uint16_t year);
		void	setDOW();
		void	setDOW(uint8_t dow);

		char	*getTimeStr(uint8_t format=FORMAT_LONG);
		char	*getDateStr(uint8_t slformat=FORMAT_LONG, uint8_t eformat=FORMAT_LITTLEENDIAN, char divider='.');
		char	*getDOWStr(uint8_t format=FORMAT_LONG);
		char	*getMonthStr(uint8_t format=FORMAT_LONG);
		long	getUnixTime(Time t);

		void	enable32KHz(bool enable);
		void	setOutput(byte enable);
		void	setSQWRate(int rate);
		float	getTemp();

	private:
		uint8_t _scl_pin;
		uint8_t _sda_pin;
		uint8_t _burstArray[7];
		boolean	_use_hw;

		void	_sendStart(byte addr);
		void	_sendStop();
		void	_sendAck();
		void	_sendNack();
		void	_waitForAck();
		uint8_t	_readByte();
		void	_writeByte(uint8_t value);
		void	_burstRead();
		uint8_t	_readRegister(uint8_t reg);
		void 	_writeRegister(uint8_t reg, uint8_t value);
		uint8_t	_decode(uint8_t value);
		uint8_t	_decodeH(uint8_t value);
		uint8_t	_decodeY(uint8_t value);
		uint8_t	_encode(uint8_t vaule);
#if defined(__arm__)
		Twi		*twi;
#endif
};
#endif

и DS3231.cpp


/*
  DS3231.cpp - Arduino/chipKit library support for the DS3231 I2C Real-Time Clock
  Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
  
  This library has been made to easily interface and use the DS3231 RTC with
  an Arduino or chipKit.

  You can find the latest version of the library at 
  http://www.RinkyDinkElectronics.com/

  This library is free software; you can redistribute it and/or
  modify it under the terms of the CC BY-NC-SA 3.0 license.
  Please see the included documents for further information.

  Commercial use of this library requires you to buy a license that
  will allow commercial use. This includes using the library,
  modified or not, as a tool to sell products.

  The license applies to all part of the library including the 
  examples and tools supplied with the library.
*/
#include "DS3231.h"

// Include hardware-specific functions for the correct MCU
#if defined(__AVR__)
	#include "hardware/avr/HW_AVR.h"
#elif defined(__PIC32MX__)
  #include "hardware/pic32/HW_PIC32.h"
#elif defined(__arm__)
	#include "hardware/arm/HW_ARM.h"
#endif

#define REG_SEC		0x00
#define REG_MIN		0x01
#define REG_HOUR	0x02
#define REG_DOW		0x03
#define REG_DATE	0x04
#define REG_MON		0x05
#define REG_YEAR	0x06
#define REG_CON		0x0e
#define REG_STATUS	0x0f
#define REG_AGING	0x10
#define REG_TEMPM	0x11
#define REG_TEMPL	0x12

#define SEC_1970_TO_2000 946684800

static const uint8_t dim[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

/* Public */

Time::Time()
{
	this->year = 2014;
	this->mon  = 1;
	this->date = 1;
	this->hour = 0;
	this->min  = 0;
	this->sec  = 0;
	this->dow  = 3;
}

DS3231::DS3231(uint8_t data_pin, uint8_t sclk_pin)
{
	_sda_pin = data_pin;
	_scl_pin = sclk_pin;
}

Time DS3231::getTime()
{
	Time t;
	_burstRead();
	t.sec	= _decode(_burstArray[0]);
	t.min	= _decode(_burstArray[1]);
	t.hour	= _decodeH(_burstArray[2]);
	t.dow	= _burstArray[3];
	t.date	= _decode(_burstArray[4]);
	t.mon	= _decode(_burstArray[5]);
	t.year	= _decodeY(_burstArray[6])+2000;
	return t;
}

void DS3231::setTime(uint8_t hour, uint8_t min, uint8_t sec)
{
	if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((sec>=0) && (sec<60)))
	{
		_writeRegister(REG_HOUR, _encode(hour));
		_writeRegister(REG_MIN, _encode(min));
		_writeRegister(REG_SEC, _encode(sec));
	}
}

void DS3231::setDate(uint8_t date, uint8_t mon, uint16_t year)
{
	if (((date>0) && (date<=31)) && ((mon>0) && (mon<=12)) && ((year>=2000) && (year<3000)))
	{
		year -= 2000;
		_writeRegister(REG_YEAR, _encode(year));
		_writeRegister(REG_MON, _encode(mon));
		_writeRegister(REG_DATE, _encode(date));
	}
}

void DS3231::setDOW()
{
	int dow;
	byte mArr[12] = {6,2,2,5,0,3,5,1,4,6,2,4};
	Time _t = getTime();
  
	dow = (_t.year % 100);
	dow = dow*1.25;
	dow += _t.date;
	dow += mArr[_t.mon-1];
	if (((_t.year % 4)==0) && (_t.mon<3))
		dow -= 1;
	while (dow>7)
		dow -= 7;
	_writeRegister(REG_DOW, dow);
}

void DS3231::setDOW(uint8_t dow)
{
	if ((dow>0) && (dow<8))
		_writeRegister(REG_DOW, dow);
}

char *DS3231::getTimeStr(uint8_t format)
{
	static char output[] = "xxxxxxxx";
	Time t;
	t=getTime();
	if (t.hour<10)
		output[0]=48;
	else
		output[0]=char((t.hour / 10)+48);
	output[1]=char((t.hour % 10)+48);
	output[2]=58;
	if (t.min<10)
		output[3]=48;
	else
		output[3]=char((t.min / 10)+48);
	output[4]=char((t.min % 10)+48);
	output[5]=58;
	if (format==FORMAT_SHORT)
		output[5]=0;
	else
	{
	if (t.sec<10)
		output[6]=48;
	else
		output[6]=char((t.sec / 10)+48);
	output[7]=char((t.sec % 10)+48);
	output[8]=0;
	}
	return (char*)&output;
}

char *DS3231::getDateStr(uint8_t slformat, uint8_t eformat, char divider)
{
	static char output[] = "xxxxxxxxxx";
	int yr, offset;
	Time t;
	t=getTime();
	switch (eformat)
	{
		case FORMAT_LITTLEENDIAN:
			if (t.date<10)
				output[0]=48;
			else
				output[0]=char((t.date / 10)+48);
			output[1]=char((t.date % 10)+48);
			output[2]=divider;
			if (t.mon<10)
				output[3]=48;
			else
				output[3]=char((t.mon / 10)+48);
			output[4]=char((t.mon % 10)+48);
			output[5]=divider;
			if (slformat==FORMAT_SHORT)
			{
				yr=t.year-2000;
				if (yr<10)
					output[6]=48;
				else
					output[6]=char((yr / 10)+48);
				output[7]=char((yr % 10)+48);
				output[8]=0;
			}
			else
			{
				yr=t.year;
				output[6]=char((yr / 1000)+48);
				output[7]=char(((yr % 1000) / 100)+48);
				output[8]=char(((yr % 100) / 10)+48);
				output[9]=char((yr % 10)+48);
				output[10]=0;
			}
			break;
		case FORMAT_BIGENDIAN:
			if (slformat==FORMAT_SHORT)
				offset=0;
			else
				offset=2;
			if (slformat==FORMAT_SHORT)
			{
				yr=t.year-2000;
				if (yr<10)
					output[0]=48;
				else
					output[0]=char((yr / 10)+48);
				output[1]=char((yr % 10)+48);
				output[2]=divider;
			}
			else
			{
				yr=t.year;
				output[0]=char((yr / 1000)+48);
				output[1]=char(((yr % 1000) / 100)+48);
				output[2]=char(((yr % 100) / 10)+48);
				output[3]=char((yr % 10)+48);
				output[4]=divider;
			}
			if (t.mon<10)
				output[3+offset]=48;
			else
				output[3+offset]=char((t.mon / 10)+48);
			output[4+offset]=char((t.mon % 10)+48);
			output[5+offset]=divider;
			if (t.date<10)
				output[6+offset]=48;
			else
				output[6+offset]=char((t.date / 10)+48);
			output[7+offset]=char((t.date % 10)+48);
			output[8+offset]=0;
			break;
		case FORMAT_MIDDLEENDIAN:
			if (t.mon<10)
				output[0]=48;
			else
				output[0]=char((t.mon / 10)+48);
			output[1]=char((t.mon % 10)+48);
			output[2]=divider;
			if (t.date<10)
				output[3]=48;
			else
				output[3]=char((t.date / 10)+48);
			output[4]=char((t.date % 10)+48);
			output[5]=divider;
			if (slformat==FORMAT_SHORT)
			{
				yr=t.year-2000;
				if (yr<10)
					output[6]=48;
				else
					output[6]=char((yr / 10)+48);
				output[7]=char((yr % 10)+48);
				output[8]=0;
			}
			else
			{
				yr=t.year;
				output[6]=char((yr / 1000)+48);
				output[7]=char(((yr % 1000) / 100)+48);
				output[8]=char(((yr % 100) / 10)+48);
				output[9]=char((yr % 10)+48);
				output[10]=0;
			}
			break;
	}
	return (char*)&output;
}

char *DS3231::getDOWStr(uint8_t format)
{
	char *output = "xxxxxxxxxx";
	char *daysLong[]  = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
	char *daysShort[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
	Time t;
	t=getTime();
	if (format == FORMAT_SHORT)
		output = daysShort[t.dow-1];
	else
		output = daysLong[t.dow-1];
	return output;
}

char *DS3231::getMonthStr(uint8_t format)
{
	char *output= "xxxxxxxxx";
	char *monthLong[]  = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
	char *monthShort[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
	Time t;
	t=getTime();
	if (format == FORMAT_SHORT)
		output = monthShort[t.mon-1];
	else
		output = monthLong[t.mon-1];
	return output;
}

long DS3231::getUnixTime(Time t)
{
	uint16_t	dc;

	dc = t.date;
	for (uint8_t i = 0; i<(t.mon-1); i++)
		dc += dim[i];
	if ((t.mon > 2) && (((t.year-2000) % 4) == 0))
		++dc;
	dc = dc + (365 * (t.year-2000)) + (((t.year-2000) + 3) / 4) - 1;

	return ((((((dc * 24L) + t.hour) * 60) + t.min) * 60) + t.sec) + SEC_1970_TO_2000;

}

void DS3231::enable32KHz(bool enable)
{
  uint8_t _reg = _readRegister(REG_STATUS);
  _reg &= ~(1 << 3);
  _reg |= (enable << 3);
  _writeRegister(REG_STATUS, _reg);
}

void DS3231::setOutput(byte enable)
{
  uint8_t _reg = _readRegister(REG_CON);
  _reg &= ~(1 << 2);
  _reg |= (enable << 2);
  _writeRegister(REG_CON, _reg);
}

void DS3231::setSQWRate(int rate)
{
  uint8_t _reg = _readRegister(REG_CON);
  _reg &= ~(3 << 3);
  _reg |= (rate << 3);
  _writeRegister(REG_CON, _reg);
}

float DS3231::getTemp()
{
	uint8_t _msb = _readRegister(REG_TEMPM);
	uint8_t _lsb = _readRegister(REG_TEMPL);
	return (float)_msb + ((_lsb >> 6) * 0.25f);
}

/* Private */

void	DS3231::_sendStart(byte addr)
{
	pinMode(_sda_pin, OUTPUT);
	digitalWrite(_sda_pin, HIGH);
	digitalWrite(_scl_pin, HIGH);
	digitalWrite(_sda_pin, LOW);
	digitalWrite(_scl_pin, LOW);
	shiftOut(_sda_pin, _scl_pin, MSBFIRST, addr);
}

void	DS3231::_sendStop()
{
	pinMode(_sda_pin, OUTPUT);
	digitalWrite(_sda_pin, LOW);
	digitalWrite(_scl_pin, HIGH);
	digitalWrite(_sda_pin, HIGH);
	pinMode(_sda_pin, INPUT);
}

void	DS3231::_sendNack()
{
	pinMode(_sda_pin, OUTPUT);
	digitalWrite(_scl_pin, LOW);
	digitalWrite(_sda_pin, HIGH);
	digitalWrite(_scl_pin, HIGH);
	digitalWrite(_scl_pin, LOW);
	pinMode(_sda_pin, INPUT);
}

void	DS3231::_sendAck()
{
	pinMode(_sda_pin, OUTPUT);
	digitalWrite(_scl_pin, LOW);
	digitalWrite(_sda_pin, LOW);
	digitalWrite(_scl_pin, HIGH);
	digitalWrite(_scl_pin, LOW);
	pinMode(_sda_pin, INPUT);
}

void	DS3231::_waitForAck()
{
	pinMode(_sda_pin, INPUT);
	digitalWrite(_scl_pin, HIGH);
	while (digitalRead(_sda_pin)==HIGH) {}
	digitalWrite(_scl_pin, LOW);
}

uint8_t DS3231::_readByte()
{
	pinMode(_sda_pin, INPUT);

	uint8_t value = 0;
	uint8_t currentBit = 0;

	for (int i = 0; i < 8; ++i)
	{
		digitalWrite(_scl_pin, HIGH);
		currentBit = digitalRead(_sda_pin);
		value |= (currentBit << 7-i);
		delayMicroseconds(1);
		digitalWrite(_scl_pin, LOW);
	}
	return value;
}

void DS3231::_writeByte(uint8_t value)
{
	pinMode(_sda_pin, OUTPUT);
	shiftOut(_sda_pin, _scl_pin, MSBFIRST, value);
}

uint8_t	DS3231::_decode(uint8_t value)
{
	uint8_t decoded = value & 127;
	decoded = (decoded & 15) + 10 * ((decoded & (15 << 4)) >> 4);
	return decoded;
}

uint8_t DS3231::_decodeH(uint8_t value)
{
  if (value & 128)
    value = (value & 15) + (12 * ((value & 32) >> 5));
  else
    value = (value & 15) + (10 * ((value & 48) >> 4));
  return value;
}

uint8_t	DS3231::_decodeY(uint8_t value)
{
	uint8_t decoded = (value & 15) + 10 * ((value & (15 << 4)) >> 4);
	return decoded;
}

uint8_t DS3231::_encode(uint8_t value)
{
	uint8_t encoded = ((value / 10) << 4) + (value % 10);
	return encoded;
}

 

Radjah
Offline
Зарегистрирован: 06.08.2014

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Ну, вот Вы код скопировали, а посмотреть в него? Смотрели? В строке 80 описан конструктор

DS3231(uint8_t data_pin, uint8_t sclk_pin);

Видите, что у него ДВА параметра data_pin и sclk_pin? Что они означают, я не знаю - описания нет, но их два и это факт! Так и передавйте ему два параметра, а Вы что делаете? В строке 33 Вы вызываете его с тремя параметрами, причём других типов. Вызывайте правильно - передавайте два параметра типа "беззнаковый байт" и, по крайней мере, компилятор от Вас отстанет. 

Radjah
Offline
Зарегистрирован: 06.08.2014

Остаётся загадкой, зачем либе надо знать, на каких пинах TWI висит? Оно там программно эмулируется что ли?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Radjah пишет:

32-я строка:

Serial.read;

Кто-то пытается прочитать что-то из Serial, но забыл указать переменную, в которую читать и скобки

Это кошка по клавиатуре пробежала.

glorius
Offline
Зарегистрирован: 12.07.2015

По идее Serial.read и Wire.requestFrom выполняют одно и то же действие. Но если убрать Serial.read и DS3231 time(&second, &minute, &hour); то int h1 = hour()  / 10; 

error: 'hour' cannot be used as a function

BlockThor
BlockThor аватар
Offline
Зарегистрирован: 08.08.2014

У меня такое впечатление что автор использует библиотеку "Time" http://playground.arduino.cc/code/time

Но я не вижу ее инициализации.

Вставьте в самом начале скетча строку:

#include <Time.h>  

Ну и конечно, это библиотека должна быть в папке "libraries".

glorius
Offline
Зарегистрирован: 12.07.2015

Вставил библиотеку "Time"

#include "Wire.h"
#include <Time.h>
#include <DS3231.h>
#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
const byte latchPin=6;//st
const byte clockPin=7;//sh
const byte dataPin=5;//ds

// binary code for shift register & 7segment indicator
byte number[] = {0b10001000,0b10111011, 0b00011100, 0b00011001, 0b00101011, 0b01001001, 0b01001000, 0b10011011, 0b00001000, 0b00001001}; 

void setup() {
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
  Wire.begin();
  Serial.begin(9600);
 }

void loop(){ 
   DS3231time (&second, &minute, &hour);
  byte (*second, *minute, *hour);
  
          Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
     *second = bcdToDec(Wire.read());
     *minute = bcdToDec(Wire.read());
     *hour = bcdToDec(Wire.read());
     

  //Присваеваем значение для переменных
int h1 = hour()  / 10;
int h2 = hour()  % 10;
int m1 = minute() / 10;
int m2 = minute() % 10;
int s1 = second() / 10;
int s2 = second() % 10;


  digitalWrite(latchPin,LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, number[s2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[s1]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[m2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[m1]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[h2]);
  shiftOut(dataPin, clockPin, LSBFIRST, number[h1]);
     digitalWrite(latchPin,HIGH);
   delay(500); 
  }

Возникают ошибки

Arduino: 1.6.4 (Windows 7), Плата"Arduino Uno"

LED_Clock2.ino: In function 'void loop()':
LED_Clock2:32: error: 'DS3231time' was not declared in this scope
LED_Clock2:33: error: overloaded function with no contextual type information
LED_Clock2:33: error: overloaded function with no contextual type information
LED_Clock2:33: error: overloaded function with no contextual type information
LED_Clock2:33: error: expression list treated as compound expression in functional cast [-fpermissive]
LED_Clock2:36: error: overloaded function with no contextual type information
LED_Clock2:37: error: overloaded function with no contextual type information
LED_Clock2:38: error: overloaded function with no contextual type information
'DS3231time' was not declared in this scope

  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки

 

BlockThor
BlockThor аватар
Offline
Зарегистрирован: 08.08.2014

В строках 32 и 33 полное отсутствие логики.

Нету запуска библиотеки 

// Init the DS3231 using the hardware interface

DS3231  rtc(SDA, SCL); 
  // Initialize the rtc object
  rtc.begin();

Нужна переменная для хранения считанного времени:

// Init a Time-data structure
Time  t;

Время брать не с библиотеки Time, а с этой. Т.е. вместо функции "Hour()" должно быть "t.hour"

В общем, как в этом примере:

// DS3231_Serial_Hard
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my DS3231-library to 
// retrieve time- and date-data for you to manipulate.
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// DS3231:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//          SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the 
// hardware I2C interfaces.
//
// You can connect the DS3231 to any available pin but if you use any
// other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access 
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

// Init a Time-data structure
Time  t;

void setup()
{
  // Setup Serial connection
  Serial.begin(115200);
  // Uncomment the next line if you are using an Arduino Leonardo
  //while (!Serial) {}

  // Initialize the rtc object
  rtc.begin();
  
  // The following lines can be uncommented to set the date and time
  //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
}

void loop()
{
  // Get data from the DS3231
  t = rtc.getTime();
  
  // Send date over serial connection
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" in the year ");
  Serial.print(t.year, DEC);
  Serial.println(".");
  
  // Send Day-of-Week and time
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

  // Send a divider for readability
  Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  
  // Wait one second before repeating :)
  delay (1000);
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

BlockThor пишет:

В строках 32 и 33 полное отсутствие логики.

Нету запуска библиотеки 

гыыыыы... (достал платочек и вытираю слезы умиления)  правда нет запуска библиотеки? тоесть вы серьезно советуете дописать строчку инициализации часов и получить еще одну ошибку при компиляции?

там самой библиотеки нет! о чем оно и сообщает...

ее физически нет в папке библиотек

BlockThor
BlockThor аватар
Offline
Зарегистрирован: 08.08.2014

Та хочется верить раз чел выложил код библиотеки, то она у него есть и находится в нужном месте. Глориус, запусти пример из библиотеки и поделить результатом.

Update: Короче, вот так этот код должен выглядеть (у меня на 1.0.6 ошибок не  дает):

#include <DS3231.h>
// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);
// Init a Time-data structure
Time  t;

const byte latchPin=6;//st
const byte clockPin=7;//sh
const byte dataPin=5;//ds

// binary code for shift register & 7segment indicator
byte number[] = {0b10001000,0b10111011, 0b00011100, 0b00011001, 0b00101011, 0b01001001, 0b01001000, 0b10011011, 0b00001000, 0b00001001}; 

void setup() {
   // Initialize the rtc object
   rtc.begin();
   
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
 }

void loop(){
  // Get data from the DS3231
  t = rtc.getTime();

  //Присваеваем значение для переменных
  int h1 = t.hour / 10;
  int h2 = t.hour % 10;
  int m1 = t.min / 10;
  int m2 = t.min % 10;
  int s1 = t.sec / 10;
  int s2 = t.sec % 10;


  digitalWrite(latchPin,LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, number[s2]);
    shiftOut(dataPin, clockPin, LSBFIRST, number[s1]);
    shiftOut(dataPin, clockPin, LSBFIRST, number[m2]);
    shiftOut(dataPin, clockPin, LSBFIRST, number[m1]);
    shiftOut(dataPin, clockPin, LSBFIRST, number[h2]);
    shiftOut(dataPin, clockPin, LSBFIRST, number[h1]);
  digitalWrite(latchPin,HIGH);
  delay(500); 
  }

 

glorius
Offline
Зарегистрирован: 12.07.2015

Запустил код компиляция зависла на половине. Такая же история с скетчами из папки Examples библиотеки.

BlockThor
BlockThor аватар
Offline
Зарегистрирован: 08.08.2014

Ну, это уже не вопрос кода, тут нужно пошаманить:
* перезагрузить комп
* переустановить ардуино
* установить другую ардуино (1.0.6)
* установить совсем старую ардуино (0022)
* стучать в бубен наяливая круги вокруг ардуино...и тд

glorius
Offline
Зарегистрирован: 12.07.2015
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp: In member function 'void DS3231::setTime(uint8_t, uint8_t, uint8_t)':
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:85:14: warning: comparison is always true due to limited range of data type [-Wtype-limits]
  if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((sec>=0) && (sec<60)))
              ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:85:41: warning: comparison is always true due to limited range of data type [-Wtype-limits]
  if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((sec>=0) && (sec<60)))
                                         ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:85:67: warning: comparison is always true due to limited range of data type [-Wtype-limits]
  if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((sec>=0) && (sec<60)))
                                                                   ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp: In member function 'char* DS3231::getDOWStr(uint8_t)':
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:275:17: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  char *output = "xxxxxxxxxx";
                 ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  char *daysLong[]  = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
                                                                                                   ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:276:99: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  char *daysShort[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
                                                                      ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:277:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp: In member function 'char* DS3231::getMonthStr(uint8_t)':
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:289:16: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  char *output= "xxxxxxxxx";
                ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  char *monthLong[]  = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
                                                                                                                                                ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:290:144: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  char *monthShort[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
                                                                                                          ^
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:291:106: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp: In member function 'uint8_t DS3231::_readByte()':
C:\Users\Q\Documents\Arduino\libraries\DS3231\DS3231.cpp:407:28: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   value |= (currentBit << 7-i);

Но скетч скомпилировался :)

Radjah
Offline
Зарегистрирован: 06.08.2014

Ты с типами определиь уже, и ошибок не будет.