Не работают часы на ардуино.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

Всем привет. Я тут новенький так что могу сказать что нить не так. Проблема в том что не могу собрать часы на двух модулях. Схему и скетч брал отсюда. http://arduino-project.net/oled-chasy-na-arduino/

выдает ошибку при кампилировании. 

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

Приведите нормально скетч и скопируйте нормально текст сообщения об ошибке. На Вашей картинке я ни хрена прочитать не могу.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016
#include <OLED_I2C.h>         // Подключение библиотеки для дисплея
OLED  myOLED(SDA, SCL, 8);    
extern uint8_t MegaNumbers[]; // Подключение больших шрифтов
extern uint8_t SmallFont[];   // Подключение маленьких шрифтов
#include <DS1307.h>           // Подключение библиотеки для часового модуля
DS1307 rtc(A0, A1);

void setup() {
  myOLED.begin();
  rtc.halt(false); 
  rtc.setDOW(SUNDAY);         // Настройка дня недели  
  rtc.setTime(12, 0, 0);      // Настройка времени 
  rtc.setDate(10, 05, 2015);  // Настройка даты
}

void loop(){
  myOLED.setFont(SmallFont);
  myOLED.print(rtc.getDOWStr(), CENTER, 0);   // Отображение дня недели
  String stringOne = rtc.getTimeStr();
  myOLED.setFont(MegaNumbers);
  myOLED.print(stringOne.substring(0,2), 4, 12);   // Отображение часов
  myOLED.print("/", 51, 12);                       // Отображение двоеточия
  myOLED.print(stringOne.substring(3,5), 75, 12);  // Отображение минут
  myOLED.setFont(SmallFont);
  myOLED.print(rtc.getDateStr(), CENTER, 57);      // Отображение даты
  myOLED.update();
  delay(500);
  myOLED.setFont(MegaNumbers);                     // Скрытие двоеточия
  myOLED.print("-", 51, 12);
  myOLED.update();
  delay(500);
}

ошибка

 

 
 
In file included from time05.ino:1:
C:\Users\Имя\Documents\Arduino\libraries\Adafruit_SSD1306/Adafruit_SSD1306.h:132: error: expected class-name before '{' token
time05:8: error: no matching function for call to 'DS1307::DS1307(const uint8_t&, const uint8_t&)'
C:\Users\Имя\Documents\Arduino\libraries\DS1307/DS1307.h:76: note: candidates are: DS1307::DS1307()
C:\Users\Имя\Documents\Arduino\libraries\DS1307/DS1307.h:73: note:                 DS1307::DS1307(const DS1307&)
time05.ino: In function 'void setup()':
time05:13: error: 'class DS1307' has no member named 'halt'
time05:14: error: 'class DS1307' has no member named 'setDOW'
time05:14: error: 'SUNDAY' was not declared in this scope
time05:15: error: 'class DS1307' has no member named 'setTime'
time05:16: error: 'class DS1307' has no member named 'setDate'
time05.ino: In function 'void loop()':
time05:22: error: 'class DS1307' has no member named 'getDOWStr'
time05:23: error: 'class DS1307' has no member named 'getTimeStr'
time05:29: error: 'class DS1307' has no member named 'getDateStr'
 
а это библиотека на которую вроде как ругается
 
/*********************************************************************
This is a library for our Monochrome OLEDs based on SSD1306 drivers

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/category/63_98

These displays use SPI to communicate, 4 or 5 pins are required to  
interface

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.  
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#if ARDUINO >= 100
 #include "Arduino.h"
 #define WIRE_WRITE Wire.write
#else
 #include "WProgram.h"
  #define WIRE_WRITE Wire.send
#endif

#ifdef __SAM3X8E__
 typedef volatile RwReg PortReg;
 typedef uint32_t PortMask;
#else
  typedef volatile uint8_t PortReg;
  typedef uint8_t PortMask;
#endif

#include <SPI.h>
#include <Adafruit_GFX.h>

#define BLACK 0
#define WHITE 1
#define INVERSE 2

#define SSD1306_I2C_ADDRESS   0x3C	// 011110+SA0+RW - 0x3C or 0x3D
// Address for 128x32 is 0x3C
// Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)

/*=========================================================================
    SSD1306 Displays
    -----------------------------------------------------------------------
    The driver is used in multiple displays (128x64, 128x32, etc.).
    Select the appropriate display below to create an appropriately
    sized framebuffer, etc.

    SSD1306_128_64  128x64 pixel display

    SSD1306_128_32  128x32 pixel display

    SSD1306_96_16

    -----------------------------------------------------------------------*/
   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16
/*=========================================================================*/

#if defined SSD1306_128_64 && defined SSD1306_128_32
  #error "Only one SSD1306 display can be specified at once in SSD1306.h"
#endif
#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16
  #error "At least one SSD1306 display must be specified in SSD1306.h"
#endif

#if defined SSD1306_128_64
  #define SSD1306_LCDWIDTH                  128
  #define SSD1306_LCDHEIGHT                 64
#endif
#if defined SSD1306_128_32
  #define SSD1306_LCDWIDTH                  128
  #define SSD1306_LCDHEIGHT                 32
#endif
#if defined SSD1306_96_16
  #define SSD1306_LCDWIDTH                  96
  #define SSD1306_LCDHEIGHT                 16
#endif

#define SSD1306_SETCONTRAST 0x81
#define SSD1306_DISPLAYALLON_RESUME 0xA4
#define SSD1306_DISPLAYALLON 0xA5
#define SSD1306_NORMALDISPLAY 0xA6
#define SSD1306_INVERTDISPLAY 0xA7
#define SSD1306_DISPLAYOFF 0xAE
#define SSD1306_DISPLAYON 0xAF

#define SSD1306_SETDISPLAYOFFSET 0xD3
#define SSD1306_SETCOMPINS 0xDA

#define SSD1306_SETVCOMDETECT 0xDB

#define SSD1306_SETDISPLAYCLOCKDIV 0xD5
#define SSD1306_SETPRECHARGE 0xD9

#define SSD1306_SETMULTIPLEX 0xA8

#define SSD1306_SETLOWCOLUMN 0x00
#define SSD1306_SETHIGHCOLUMN 0x10

#define SSD1306_SETSTARTLINE 0x40

#define SSD1306_MEMORYMODE 0x20
#define SSD1306_COLUMNADDR 0x21
#define SSD1306_PAGEADDR   0x22

#define SSD1306_COMSCANINC 0xC0
#define SSD1306_COMSCANDEC 0xC8

#define SSD1306_SEGREMAP 0xA0

#define SSD1306_CHARGEPUMP 0x8D

#define SSD1306_EXTERNALVCC 0x1
#define SSD1306_SWITCHCAPVCC 0x2

// Scrolling #defines
#define SSD1306_ACTIVATE_SCROLL 0x2F
#define SSD1306_DEACTIVATE_SCROLL 0x2E
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A

class Adafruit_SSD1306 : public Adafruit_GFX
{
 public:
  Adafruit_SSD1306(int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS);
  Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS);
  Adafruit_SSD1306(int8_t RST);

  void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC, uint8_t i2caddr = SSD1306_I2C_ADDRESS, bool reset=true);
  void ssd1306_command(uint8_t c);
  void ssd1306_data(uint8_t c);

  void clearDisplay(void);
  void invertDisplay(uint8_t i);
  void display();

  void startscrollright(uint8_t start, uint8_t stop);
  void startscrollleft(uint8_t start, uint8_t stop);

  void startscrolldiagright(uint8_t start, uint8_t stop);
  void startscrolldiagleft(uint8_t start, uint8_t stop);
  void stopscroll(void);

  //void dim(uint8_t contrast);
  void dim(boolean contrast);


  void drawPixel(int16_t x, int16_t y, uint16_t color);

  virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
  virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);

 private:
  int8_t _i2caddr, _vccstate, sid, sclk, dc, rst, cs;
  void fastSPIwrite(uint8_t c);

  boolean hwSPI;
  PortReg *mosiport, *clkport, *csport, *dcport;
  PortMask mosipinmask, clkpinmask, cspinmask, dcpinmask;

  inline void drawFastVLineInternal(int16_t x, int16_t y, int16_t h, uint16_t color) __attribute__((always_inline));
  inline void drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color) __attribute__((always_inline));

};

 

 

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

Павел_Сергеевич пишет:
In file included from time05.ino:1:

C:\Users\Имя\Documents\Arduino\libraries\Adafruit_SSD1306/Adafruit_SSD1306.h:132: error: expected class-name before '{' token

Компилятор не воспринял Adafruit_GFX как имя класса. Что с ним не так, неясно, судя по всему этот класс определяется в файле Adafruit_GFX.h

Павел_Сергеевич пишет:
time05:8: error: no matching function for call to 'DS1307::DS1307(const uint8_t&, const uint8_t&)'

C:\Users\Имя\Documents\Arduino\libraries\DS1307/DS1307.h:76: note: candidates are: DS1307::DS1307()
C:\Users\Имя\Documents\Arduino\libraries\DS1307/DS1307.h:73: note:                 DS1307::DS1307(const DS1307&)

Говорит, что у класса DS1307 нет конструктора с двумя параметрами, а Вы пытаетесь передать ему A0 и A1. Не знаю, что у Вас за библиотека, но вот в этой такого конструктора действительно нет.

Павел_Сергеевич пишет:
time05.ino: In function 'void setup()':

time05:13: error: 'class DS1307' has no member named 'halt'
time05:14: error: 'class DS1307' has no member named 'setDOW'
time05:14: error: 'SUNDAY' was not declared in this scope
time05:15: error: 'class DS1307' has no member named 'setTime'
time05:16: error: 'class DS1307' has no member named 'setDate'
time05.ino: In function 'void loop()':
time05:22: error: 'class DS1307' has no member named 'getDOWStr'
time05:23: error: 'class DS1307' has no member named 'getTimeStr'
time05:29: error: 'class DS1307' has no member named 'getDateStr'

Говорит, что у класса DS1307 нет методов halt, setDOW и далее по списку. Опять, не знаю, что у Вас там за библиотека, но вот в этой таких методов действительное нет.

Общий вывод. Рискну предположить, что скетч Вы писали не сами, а где-то позаимствовали. Но автор пользовался другими библиотеками. не теми, что у Вас. Смотрите внимательнее на текст автора и ищите правильные библиотеки.

Слазил на страницу откуда Вы всё брали.

Дейтсвительно там автор приводт те библиотеки, которыми он пользуется и в них всё, что надо есть. Берите его библиотеки и компилируйте, а свои уберите в сторонку.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

странно, но я их оттуда и качал...

 

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

Павел_Сергеевич пишет:

странно, но я их оттуда и качал...

Возможно, у Вас на компьютере есть другие с такими же именами и работают именно те - другие. Разбирайтесь.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

ругается на библеотеку 

C:\Users\Имя\Documents\Arduino\libraries\Adafruit_SSD1306/Adafruit_SSD1306.h:131: error: expected class-name before '{' token
time05:9: error: no matching function for call to 'DS1307::DS1307(const uint8_t&, const uint8_t&)'
 
а на сайте где все брал нет вообще этой библиотеки.
где ее скачал не помню. за то дается библеотека OneWire  в коде я ее не увидел.
проблема в том что в стандартных скетчах и модуль Oled и часовой модуль Tiny посадили на пины 4-5, а где это указано так и не нашел. если бы нашел, то один из модулей повесил бы на другие пины.
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Павел_Сергеевич пишет:

проблема в том что в стандартных скетчах и модуль Oled и часовой модуль Tiny посадили на пины 4-5, а где это указано так и не нашел. если бы нашел, то один из модулей повесил бы на другие пины.

 
Нигде не указано. Вернее, указано в даташите на микроконтроллер. Это пины на которых работает аппаратно реализованный интерфейс TWI. Он менно аппаратно реализован на этих пинах, так что программно сменить их на другие нельзя.
Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

не правда, если использовать библеотеку русских шрифтов то используются цифровые выводы а не аналоговые. http://lesson.iarduino.ru/page/urok-8-russkiy-yazyk-na-oled-displee-128x64/  D8-D9

https://geektimes.ru/post/255556/    A4-A5.

пробывал, запускал, руские шрифты отображаются на пинах D8-D9.

стандартная библиотека на А4-А5.

 

bwn
Offline
Зарегистрирован: 25.08.2014

Павел_Сергеевич пишет:

пробывал, запускал, руские шрифты отображаются на пинах D8-D9.

стандартная библиотека на А4-А5.

Сделали зачем то программную эмуляцию, заняли еще два пина, на выходе получили то, что и так аппаратно реализовано. Созидание ради созидания?

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

то есть с двумя I2C ардуино одновременно работать не может? а как же эта статья? https://geektimes.ru/post/255556/

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

Павел_Сергеевич пишет:
то есть с двумя I2C ардуино одновременно работать не может? а как же эта статья? https://geektimes.ru/post/255556/

Ну. почему не может? Павел Сергеевич, Вы читали про I2C - что это такое? Ну, хоть википедию откройте что-ли.

У каждого I2C устройства есть адрес и до тех пор пока адреса всех устройств на линии уникальны, всё будет работать. Если адреса пересеклись - надо разводить. 

Узнать адреса устройств можно I2C сканером. Подлкючите устройства (лучше по одному), запустите сканер, узнаете адрес. Если у двух устройств адреса оказались одинаковыми - надо смотреть как их поменять - многие устройства это позволяют.

bwn
Offline
Зарегистрирован: 25.08.2014

А смысл делать программный интерфейс имея аппаратный на 127 адресов? Будут конфликтовать или нет, не знаю.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

я подружил два I2C 

#include <Wire.h>
#include "RTClib.h"
#include <OLED_I2C.h> 
OLED  myOLED(8, 9, 8); // SDA - 8pin, SCL - 9pin
extern uint8_t RusFont[]; // Русский шрифт

RTC_DS1307 RTC;

void setup ()
{
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    myOLED.begin();
}


void loop () 
{
    // Определяем время
    DateTime now = RTC.now();
    
       // Выводим время в монитор порта
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    myOLED.clrScr(); // Стираем все с экрана
    myOLED.setFont(RusFont);
    
    myOLED.print("00", 10, 20); myOLED.print("/", 40, 22); 
    myOLED.print("00", 50, 20); myOLED.print("/", 80, 22); 
    myOLED.print("00", 95, 20); myOLED.print("_", 110, 22); 
    myOLED.update(); // Обновляем информацию на дисплее
   
    delay(1000);
}
 

вот тест


Arduino I2C Scanner - 0.1.03

	s = single scan
	c = continuous scan - 1 second delay
	q = quit continuous scan
	d = toggle latency delay between successful tests.
	p = toggle printAll - printFound.
	h = toggle header - noHeader.
	? = help - this page

TIME	DEC	HEX		50	100	200	250	400	500	800	[KHz]
------------------------------------------------------------------------------------------------
11761	8	0x8		.	.	.	.	.	.	.
11764	9	0x9		.	.	.	.	.	.	.
11766	10	0xA		.	.	.	.	.	.	.
11768	11	0xB		.	.	.	.	.	.	.
11771	12	0xC		.	.	.	.	.	.	.
11773	13	0xD		.	.	.	.	.	.	.
11777	14	0xE		.	.	.	.	.	.	.
11779	15	0xF		.	.	.	.	.	.	.
11781	16	0x10		.	.	.	.	.	.	.
11784	17	0x11		.	.	.	.	.	.	.
11786	18	0x12		.	.	.	.	.	.	.
11789	19	0x13		.	.	.	.	.	.	.
11791	20	0x14		.	.	.	.	.	.	.
11794	21	0x15		.	.	.	.	.	.	.
11796	22	0x16		.	.	.	.	.	.	.
11799	23	0x17		.	.	.	.	.	.	.
11801	24	0x18		.	.	.	.	.	.	.
11804	25	0x19		.	.	.	.	.	.	.
11806	26	0x1A		.	.	.	.	.	.	.
11809	27	0x1B		.	.	.	.	.	.	.
11811	28	0x1C		.	.	.	.	.	.	.
11814	29	0x1D		.	.	.	.	.	.	.
11816	30	0x1E		.	.	.	.	.	.	.
11820	31	0x1F		.	.	.	.	.	.	.
11822	32	0x20		.	.	.	.	.	.	.
11825	33	0x21		.	.	.	.	.	.	.
11827	34	0x22		.	.	.	.	.	.	.
11830	35	0x23		.	.	.	.	.	.	.
11832	36	0x24		.	.	.	.	.	.	.
11835	37	0x25		.	.	.	.	.	.	.
11837	38	0x26		.	.	.	.	.	.	.
11840	39	0x27		.	.	.	.	.	.	.
11842	40	0x28		.	.	.	.	.	.	.
11845	41	0x29		.	.	.	.	.	.	.
11847	42	0x2A		.	.	.	.	.	.	.
11850	43	0x2B		.	.	.	.	.	.	.
11852	44	0x2C		.	.	.	.	.	.	.
11855	45	0x2D		.	.	.	.	.	.	.
11857	46	0x2E		.	.	.	.	.	.	.
11860	47	0x2F		.	.	.	.	.	.	.
11863	48	0x30		.	.	.	.	.	.	.
11866	49	0x31		.	.	.	.	.	.	.
11868	50	0x32		.	.	.	.	.	.	.
11871	51	0x33		.	.	.	.	.	.	.
11873	52	0x34		.	.	.	.	.	.	.
11876	53	0x35		.	.	.	.	.	.	.
11878	54	0x36		.	.	.	.	.	.	.
11881	55	0x37		.	.	.	.	.	.	.
11883	56	0x38		.	.	.	.	.	.	.
11885	57	0x39		.	.	.	.	.	.	.
11888	58	0x3A		.	.	.	.	.	.	.
11890	59	0x3B		.	.	.	.	.	.	.
11893	60	0x3C		.	.	.	.	.	.	.
11895	61	0x3D		.	.	.	.	.	.	.
11898	62	0x3E		.	.	.	.	.	.	.
11900	63	0x3F		.	.	.	.	.	.	.
11904	64	0x40		.	.	.	.	.	.	.
11906	65	0x41		.	.	.	.	.	.	.
11909	66	0x42		.	.	.	.	.	.	.
11911	67	0x43		.	.	.	.	.	.	.
11914	68	0x44		.	.	.	.	.	.	.
11916	69	0x45		.	.	.	.	.	.	.
11919	70	0x46		.	.	.	.	.	.	.
11921	71	0x47		.	.	.	.	.	.	.
11924	72	0x48		.	.	.	.	.	.	.
11926	73	0x49		.	.	.	.	.	.	.
11929	74	0x4A		.	.	.	.	.	.	.
11931	75	0x4B		.	.	.	.	.	.	.
11934	76	0x4C		.	.	.	.	.	.	.
11936	77	0x4D		.	.	.	.	.	.	.
11939	78	0x4E		.	.	.	.	.	.	.
11941	79	0x4F		.	.	.	.	.	.	.
11944	80	0x50		V	V	V	V	V	V	V
11947	81	0x51		.	.	.	.	.	.	.
11950	82	0x52		.	.	.	.	.	.	.
11952	83	0x53		.	.	.	.	.	.	.
11955	84	0x54		.	.	.	.	.	.	.
11957	85	0x55		.	.	.	.	.	.	.
11960	86	0x56		.	.	.	.	.	.	.
11962	87	0x57		.	.	.	.	.	.	.
11965	88	0x58		.	.	.	.	.	.	.
11967	89	0x59		.	.	.	.	.	.	.
11970	90	0x5A		.	.	.	.	.	.	.
11972	91	0x5B		.	.	.	.	.	.	.
11975	92	0x5C		.	.	.	.	.	.	.
11977	93	0x5D		.	.	.	.	.	.	.
11980	94	0x5E		.	.	.	.	.	.	.
11982	95	0x5F		.	.	.	.	.	.	.
11985	96	0x60		.	.	.	.	.	.	.
11987	97	0x61		.	.	.	.	.	.	.
11991	98	0x62		.	.	.	.	.	.	.
11993	99	0x63		.	.	.	.	.	.	.
11996	100	0x64		.	.	.	.	.	.	.
11998	101	0x65		.	.	.	.	.	.	.
12001	102	0x66		.	.	.	.	.	.	.
12003	103	0x67		.	.	.	.	.	.	.
12006	104	0x68		V	V	V	V	V	V	V
12008	105	0x69		.	.	.	.	.	.	.
12011	106	0x6A		.	.	.	.	.	.	.
12014	107	0x6B		.	.	.	.	.	.	.
12016	108	0x6C		.	.	.	.	.	.	.
12019	109	0x6D		.	.	.	.	.	.	.
12021	110	0x6E		.	.	.	.	.	.	.
12024	111	0x6F		.	.	.	.	.	.	.
12026	112	0x70		.	.	.	.	.	.	.
12029	113	0x71		.	.	.	.	.	.	.
12033	114	0x72		.	.	.	.	.	.	.
12035	115	0x73		.	.	.	.	.	.	.
12038	116	0x74		.	.	.	.	.	.	.
12040	117	0x75		.	.	.	.	.	.	.
12043	118	0x76		.	.	.	.	.	.	.
12045	119	0x77		.	.	.	.	.	.	.

2 devices found in 294 milliseconds.

Arduino I2C Scanner - 0.1.03

	s = single scan
	c = continuous scan - 1 second delay
	q = quit continuous scan
	d = toggle latency delay between successful tests.
	p = toggle printAll - printFound.
	h = toggle header - noHeader.
	? = help - this page

но почему то когда подключаешь и дисплей и модуль времени, дисплей не показывает ничего. черный экран.

странно, сейчас оба модуля стали работать на А4-А5.

буду дальше мучать девайсы.

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

Правильно, чтобы они оба одновременно работали на а4 и а5 - этого и добивайтесь. Туда можно и сотню устройств подцепить - если адреса разные, то должны работать вся сотня на этих двух пинах.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

вот мой зубодробящий код:

 #include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <OLED_I2C.h> 
#include <dht11.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<iostream>

RTC_DS1307 RTC;
dht11 sensor;
#define DHT11PIN 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int ledPin            =13;

int chk;
int Sec=0;     //секунды
int Min=0;     //минуты
int Chs=0;     //часы
int sx;        //
int sy;        //

  void rest();
  void weather();
  void SetUp();
  void serial();

void setup ()
{
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    
    pinMode(ledPin,          OUTPUT);
    
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
}


void loop () 
{
    // Определяем время
    DateTime now = RTC.now();
    
       // Выводим время в монитор порта
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    dht11 sensor;
    display.clearDisplay();
    weather();
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
    display.display();
}
 
 void SetUp(int Sz, int Cl, int Sx, int Sy)
{
  display.setTextSize(Sz);
  display.setTextColor(WHITE);
   display.setCursor(Sx,Sy);
}
void weather()
{
  chk = sensor.read(DHT11PIN);
  SetUp(1,WHITE,50,5); display.print("H ");
  SetUp(1,WHITE,60,5); display.print(sensor.humidity);
  SetUp(1,WHITE,80,5); display.print("%T");
  SetUp(1,WHITE,95,5); display.print(sensor.temperature);
  SetUp(1,WHITE,110,5); display.print("*C");
}

void TimePrintCh()
{
   if (Chs<10){display.print("0");display.print(Chs);}
  else        {display.print(Chs);}
}

void TimePrintMin()
{
   if (Min<10){display.print("0");display.print(Min);}
  else        {display.print(Min);}
}

void TimePrintSec()
{
  if (Sec<10){display.print("0"); display.println(Sec);}
  else       {display.println(Sec);}
}

я не программист так что сильно не ругайтесь, возможно тут много лишнего. не могу присвоить к Chs значение от now.hour()

задача собрать автомат полива, у родителей сгорел(чип сдох, а он в виде капли пластика), а им нужно их штуки 3-4, цена кусается 3000р\шт. код написан автоматики, осталось запустить данные с модуля часов и меню прописать.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

вот код от часового модуля:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
}

void loop () {
    // Определяем время
    DateTime now = RTC.now();
    
    // Выводим время в монитор порта
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
 
    delay(1000);
}
 

вот код из библиотеки RTClib.h:

// Code by JeeLabs http://news.jeelabs.org/code/
// Released to the public domain! Enjoy!

// Simple general-purpose date/time class (no TZ / DST / leap second handling!)
class DateTime {
public:
    DateTime (uint32_t t =0);
    DateTime (uint16_t year, uint8_t month, uint8_t day,
                uint8_t hour =0, uint8_t min =0, uint8_t sec =0);
    DateTime (const char* date, const char* time);
    uint16_t year() const       { return 2000 + yOff; }
    uint8_t month() const       { return m; }
    uint8_t day() const         { return d; }
    uint8_t hour() const        { return hh; }
    uint8_t minute() const      { return mm; }
    uint8_t second() const      { return ss; }
    uint8_t dayOfWeek() const;

    // 32-bit times as seconds since 1/1/2000
    long secondstime() const;   
    // 32-bit times as seconds since 1/1/1970
    uint32_t unixtime(void) const;

protected:
    uint8_t yOff, m, d, hh, mm, ss;
};

// RTC based on the DS1307 chip connected via I2C and the Wire library
class RTC_DS1307 {
public:
  static uint8_t begin(void);
    static void adjust(const DateTime& dt);
    uint8_t isrunning(void);
    static DateTime now();
};

// RTC using the internal millis() clock, has to be initialized before use
// NOTE: this clock won't be correct once the millis() timer rolls over (>49d?)
class RTC_Millis {
public:
    static void begin(const DateTime& dt) { adjust(dt); }
    static void adjust(const DateTime& dt);
    static DateTime now();

protected:
    static long offset;
};

 

bwn
Offline
Зарегистрирован: 25.08.2014

И зачем весь этот геммор с экранами, меню и прочими поэтессами? DS3231+Атмеga8-328+реле требуемое кол-во. Часы и время срабатывания инициировали при загрузке скетчей в конце сезона время проверили. Обойдется рублей в 300-400 каждый блок.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

а чем хуже модуль tiny rtc? атмега да 100р плюс программатор 2000.... да и родители далеко не программисты чтобы время полива заливать в чип с программаором сидя на грядке.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

Проект должен быть реализован при помощи: ардуино нано, олед дисрлей, тини ртс, 4 кнопеи ( enter, bakspace, up, down), драйвер кр1128кт3а, мотор редуктор, микро выключатель срабатывающий от эксцентрика, стоящего на клапане. В меню выставятся будильники до 10 шт, устанавливается врея начала полива и время окончания.

bwn
Offline
Зарегистрирован: 25.08.2014

Павел_Сергеевич пишет:

да и родители далеко не программисты чтобы время полива заливать в чип с программаором сидя на грядке.

Предполагалось, что время полива уже известно. А если люди достаточно пожилые, то обычно опасаются разных экранов с цифирками. Личный опыт.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Павел_Сергеевич пишет:
Проект должен быть реализован при помощи...

и, чего - не помогают?

или, я не понимаю твоего наречия русского языка - кому кто должен?

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

люди в сети делятся на две категории, те кто говорит чисто по делу, в данной теме это ЕвгенийП,  спасибо ему, он мне действительно помог. И те кому лишь бы потрещать, не слова по делу, но лишь бы подпортить настроение. Говорю дословно, проект должен быть реализован МНОЙ. Отец и Мама пожилые, автомат делается предельно простым с четырьмя кнопочками. Управлять должна им Мама. Отец хоть и пожилой, недавно стал изучать С++ для удовольсвия знает его гораздо лучше меня, но с просьбой помочь лучше обратиться к специалистам. И мне бы не хотелось разводить срачь в данной теме. Есть что сказать по делу, с удовольствием выслушую, а сказать ради того чтобы сказать, проходите мимо.

 

Люди, давайте будем уважать друг друга.

Заранее извините если кого то не правильно понял.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

нашел решение как подружить два модуля вот код

 #include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <OLED_I2C.h> 
#include <dht11.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<iostream>

RTC_DS1307 RTC;
dht11 sensor;
#define DHT11PIN 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int ledPin            =13;

int chk;
int Sec=0;     //секунды
int Min=0;     //минуты
int Chs=0;     //часы
int sx;        //
int sy;        //

  void rest();
  void weather();
  void SetUp();
  void serial();

void setup ()
{
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    
    pinMode(ledPin,          OUTPUT);
    
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
}


void loop () 
{
    // Определяем время
    DateTime now = RTC.now();
    
       // Выводим время в монитор порта
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Chs=now.hour(); Min=now.minute(); Sec=now.second();
    
    dht11 sensor;
    display.clearDisplay();
    weather();
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
    display.display();
}
 
 void SetUp(int Sz, int Cl, int Sx, int Sy)
{
  display.setTextSize(Sz);
  display.setTextColor(WHITE);
   display.setCursor(Sx,Sy);
}
void weather()
{
  chk = sensor.read(DHT11PIN);
  SetUp(1,WHITE,50,5); display.print("H ");
  SetUp(1,WHITE,60,5); display.print(sensor.humidity);
  SetUp(1,WHITE,80,5); display.print("%T");
  SetUp(1,WHITE,95,5); display.print(sensor.temperature);
  SetUp(1,WHITE,110,5); display.print("*C");
}

void TimePrintCh()
{
   if (Chs<10){display.print("0");display.print(Chs);}
  else        {display.print(Chs);}
}

void TimePrintMin()
{
   if (Min<10){display.print("0");display.print(Min);}
  else        {display.print(Min);}
}

void TimePrintSec()
{
  if (Sec<10){display.print("0"); display.println(Sec);}
  else       {display.println(Sec);}
}

 

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

кому интересен мой проект могу и дальше его вакладывать, осталось сделать меню. вот наброски:

void Menu(){Data();ButBackspace();ButEnt();ButHigh();ButLow();}
void Data()
{ 
  if (ButSigEnt==1){menu++;rest();if (menu>2) {menu=0;}}
  if (ButSigBackspace==1){menu--;rest();if (menu<0) {menu=2;}}
  if (ButSigHigh==1){menu1++;rest();if (menu1>1){menu1=0;}}
  if (ButSigLow==1){menu1--;rest();if (menu1<0){menu1=1;}}
  // if (menu<0||menu>2) {menu=0;}
 // if (menu1<0||menu1>1){menu1=0;}
  if (menu==1&&menu1==0)
  { 
    SetUp(1,WHITE,10,45); display.println("*Set Time");
    SetUp(1,WHITE,10,55); display.println(" Set Watering");
  }
  if (menu==1&&menu1==1)
  { 
   // rest();
    SetUp(1,WHITE,10,45); display.println(" Set Time");
    SetUp(1,WHITE,10,55); display.println("*Set Watering");
  }
  if (menu==2&&menu1==0)
  { 
   // rest();
    SetUp(1,WHITE,10,45); display.println("*Set Chs");
    SetUp(1,WHITE,10,55); display.println(" Set Min");
  }
  if (menu==2&&menu1==1)
  { 
    //rest();
    SetUp(1,WHITE,10,45); display.println(" Set Chs");
    SetUp(1,WHITE,10,55); display.println("*Set Min");
  }
  if (menu==0&&menu1==1){rest();menu1=0;}
  
  //backspace
}

 

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

вот почти готовая программа.

 #include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <OLED_I2C.h> 
#include <dht11.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<iostream>

RTC_DS1307 RTC;
dht11 sensor;
#define DHT11PIN 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int ledPin            =13;
int but_Backspace     =6;//пин кнопки установок
int but_ent           =7;
int but_high          =3;
int but_low           =5;
int sigK              =11;//открывает high закрывает Low
int motor             =4;

int chk, sig1=0,sig2=0,sig3=0,sig4=0,sig5=0, sig6=0, menu=0, menu1=0;
int signalKl;
int Sec=0;     //секунды
int Min=0;     //минуты
int Chs=0;     //часы
int sx;        //
int sy;        //
int butS1=1, butS2=1, butS3=1, butS4=1, butS5=1, butS6=1;      //для сравнения
int backspace; //возврат
int ButSigBackspace=0; int ButSigEnt=0; int ButSigHigh=0; int ButSigLow=0;      //чистый сигнал 
int ButSigK =0;          //сигнал с клапана
int poliv;

  void ButBackspace(); void ButEnt(); void ButHigh(); void ButLow();//функции кнопок
  void rest();
  void weather();
  void SetUp();
  void serial();
  void Menu();
  void Data();
  void Poliv();

void setup ()
{
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    
    pinMode(ledPin,          OUTPUT);
    pinMode(motor,           OUTPUT);
    pinMode(but_Backspace,    INPUT);
    pinMode(sigK,             INPUT);
    pinMode(but_ent,          INPUT);
    pinMode(but_high,         INPUT);
    pinMode(but_low,          INPUT);
   

    
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
}


void loop () 
{
    // Определяем время
    DateTime now = RTC.now();
    
    Chs=now.hour(); Min=now.minute(); Sec=now.second();
    
    dht11 sensor;
    display.clearDisplay();
    weather(); Poliv(); Klap(); Menu(); ButSigKlap(); //serial();
    
    SetUp(1,WHITE,95,43); TimePrintMenu();
    SetUp(1,WHITE,95,53); TimePrintMenu2();   
    
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
    display.display();
}
 
 void SetUp(int Sz, int Cl, int Sx, int Sy)
{
  display.setTextSize(Sz);
  display.setTextColor(WHITE);
   display.setCursor(Sx,Sy);
}
void weather()
{
  chk = sensor.read(DHT11PIN);
  SetUp(1,WHITE,50,5); display.print("H ");
  SetUp(1,WHITE,60,5); display.print(sensor.humidity);
  SetUp(1,WHITE,80,5); display.print("%T");
  SetUp(1,WHITE,95,5); display.print(sensor.temperature);
  SetUp(1,WHITE,110,5); display.print("*C");
}

void TimePrintCh()
{
   if (Chs<10){display.print("0");display.print(Chs);}
  else        {display.print(Chs);}
}

void TimePrintMin()
{
   if (Min<10){display.print("0");display.print(Min);}
  else        {display.print(Min);}
}

void TimePrintSec()
{
  if (Sec<10){display.print("0"); display.println(Sec);}
  else       {display.println(Sec);}
}

void TimePrintMenu(){display.print(menu);}
void TimePrintMenu2(){display.print(menu1);}

void Menu(){Data();ButBackspace();ButEnt();ButHigh();ButLow();}
void Data()
{ 
  if (ButSigEnt==1){menu++;rest();if (menu>2) {menu=0;}}
  if (ButSigBackspace==1){menu--;rest();if (menu<0) {menu=2;}}
  if (ButSigHigh==1){menu1++;rest();if (menu1>1){menu1=0;}}
  if (ButSigLow==1){menu1--;rest();if (menu1<0){menu1=1;}}
  // if (menu<0||menu>2) {menu=0;}
 // if (menu1<0||menu1>1){menu1=0;}
  if (menu==1&&menu1==0)
  { 
    SetUp(1,WHITE,10,45); display.println("*Set Time");
    SetUp(1,WHITE,10,55); display.println(" Set Watering");
  }
  if (menu==1&&menu1==1)
  { 
   // rest();
    SetUp(1,WHITE,10,45); display.println(" Set Time");
    SetUp(1,WHITE,10,55); display.println("*Set Watering");
  }
  if (menu==2&&menu1==0)
  { 
   // rest();
    SetUp(1,WHITE,10,45); display.println("*Set Chs");
    SetUp(1,WHITE,10,55); display.println(" Set Min");
  }
  if (menu==2&&menu1==1)
  { 
    //rest();
    SetUp(1,WHITE,10,45); display.println(" Set Chs");
    SetUp(1,WHITE,10,55); display.println("*Set Min");
  }
  if (menu==0&&menu1==1){rest();menu1=0;}
  
  //backspace
}


void ButBackspace()
{
   sig1=digitalRead(but_Backspace);
   if (sig1==HIGH && butS1==1) {butS1=0;}
   if (butS1==0){ sx=sx++;}
   sy=10;                             //установка задержки кнопки селект
   if (sx>sy){sx=0; butS1=1; ButSigBackspace=1;}
}
void ButEnt()
{
  sig2=digitalRead(but_ent);
   if (sig2==HIGH && butS2==1) {butS2=0;}
   if (butS2==0){ sx=sx++;}
   sy=10;                             //установка задержки кнопки селект
   if (sx>sy){sx=0;butS2=1; ButSigEnt=1;}
}
void ButHigh()
{
   sig3=digitalRead(but_high);
   if (sig3==HIGH && butS3==1) {butS3=0;}
   if (butS3==0){ sx=sx++;}
   sy=10;                             //установка задержки кнопки селект
   if (sx>sy){sx=0;butS3=1; ButSigHigh=1;}
}
void ButLow()
{
   sig4=digitalRead(but_low);
   if (sig4==HIGH && butS4==1) {butS4=0;}
   if (butS4==0){ sx=sx++;}
   sy=10;                             //установка задержки кнопки селект
   if (sx>sy){sx=0;butS4=1; ButSigLow=1;}
}
void ButSigKlap()
{
   sig5=digitalRead(sigK);
   if (sig5==HIGH) {ButSigK=1;}   else {ButSigK=0;}
}

void rest()
{
  ButSigBackspace=0; ButSigEnt=0; ButSigHigh=0; ButSigLow=0;
}
void Poliv()
{
  int pol=0;
  if (Min==1||Min==2||Min==3||Min==30||Min==31||Min==32){pol=1;}else {pol=0;}
  if (pol==1){display.print("Poliv");digitalWrite(ledPin, HIGH);poliv=1;} else {digitalWrite(ledPin, LOW);poliv=0;}
}
void Klap()
{
  if (poliv==1){if (ButSigK==0){digitalWrite(motor, HIGH);} if (ButSigK==1) {digitalWrite(motor, LOW);}}
  if (poliv==0){if (ButSigK==1){digitalWrite(motor, HIGH);} if (ButSigK==0) {digitalWrite(motor, LOW);}}
}

 void serial()
  {
    Serial.print(sig1);Serial.print(".");Serial.print(sig2);Serial.print(".");Serial.print(sig3);Serial.print(".");
    Serial.print(sig4);Serial.print(".");Serial.print(sig5);Serial.print(".");Serial.print(sig6);Serial.print("________");
    Serial.print(ButSigBackspace);Serial.print(".");Serial.print(ButSigEnt);Serial.print(".");Serial.print(ButSigHigh);Serial.print(".");
    Serial.print(ButSigLow);Serial.print(".");Serial.print(signalKl);Serial.print(ButSigK);Serial.println("___");
  }//проверка сигналов
  

 

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

столкнулся с новой проблемой, установка будильников. ругается на объекты класса в функции

 #include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <OLED_I2C.h> 
#include <dht11.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<iostream>

RTC_DS1307 RTC;
dht11 sensor;
#define DHT11PIN 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

  int ledPin            =13;
  int but_Backspace     =6;//пин кнопки установок
  int but_ent           =7;
  int but_high          =3;
  int but_low           =5;
  int sigK              =11;//открывает high закрывает Low
  int motor             =4;

int chk, sig1=0,sig2=0,sig3=0,sig4=0,sig5=0, sig6=0, menu=0, menu1=0, menu2=0;
int signalKl;
int Sec=0;     //секунды
int Min=0;     //минуты
int Chs=0;     //часы
int sx;        //
int sy=5;      //установка задержки кнопки
int butS1=1, butS2=1, butS3=1, butS4=1, butS5=1, butS6=1;      //для сравнения
int backspace; //возврат
int ButSigBackspace=0; int ButSigEnt=0; int ButSigHigh=0; int ButSigLow=0;      //чистый сигнал 
int ButSigK =0;          //сигнал с клапана
int poliv;
int setStH, setStM, setSpH, setSpM; 

  void ButBackspace(); void ButEnt(); void ButHigh(); void ButLow();//функции кнопок
  void rest();
  void weather();
  void SetUp();
  void serial();
  void Menu();
  void Data();
  void Poliv();
  void PrintTime();
  void Print();
  void PrintSetTime1();
  void PrintSetTime2();
  void PrintSetTime2();
  void TimefleshCh();
  void TimefleshMin();

void setup ()
{
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    pinMode(ledPin,          OUTPUT);
    pinMode(motor,           OUTPUT);
    pinMode(but_Backspace,    INPUT);
    pinMode(sigK,             INPUT);
    pinMode(but_ent,          INPUT);
    pinMode(but_high,         INPUT);
    pinMode(but_low,          INPUT);
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
}

class setStartTime
{
  protected:
   int StHcas;
   int StMin;
  public:
  setStartTime(int sth, int stm):
  StHcas(sth), StMin(stm){}
  void SetStH()
  {
    if (ButSigHigh==1){setStH++;rest();if (setStH>23){setStH=0;}}
    if (ButSigLow==1){setStH--;rest();if (setStH<0){setStH=23;}}
  }
  void SetStM()
  {
    if (ButSigHigh==1){setStM++;rest();if (setStM>59){setStM=0;}}
    if (ButSigLow==1){setStM--;rest();if (setStM<0){setStM=59;}}
  }
  void PrintSetStH()
  {
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(10,20); SetStH();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); SetStM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
  }
  void PrintSetStM()
  {
    SetUp(3,WHITE,10,20); SetStH();
    SetUp(3,WHITE,40,20); display.print(":");
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(50,20); SetStM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec(); 
  }
};
class setStopTime
{
  protected:
   int SpHcas;
   int SpMin;
  public:
  setStopTime(int sph, int spm):
  SpHcas(sph), SpMin(spm){}
  void SetSpH()
  {
    if (ButSigHigh==1){setSpH++;rest();if (setSpH>23){setSpH=0;}}
    if (ButSigLow==1){setSpH--;rest();if (setSpH<0){setSpH=23;}}
  }
  void SetSpM()
  {
    if (ButSigHigh==1){setSpM++;rest();if (setSpM>59){setSpM=0;}}
    if (ButSigLow==1){setSpM--;rest();if (setSpM<0){setSpM=59;}}
  }
   void PrintSetSpH()
  {
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(10,20); SetSpH();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); SetSpM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
  }
  void PrintSetSpM()
  {
    SetUp(3,WHITE,10,20); SetSpH();
    SetUp(3,WHITE,40,20); display.print(":");
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(50,20); SetSpM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec(); 
  }
};

void loop () 
{
    // Определяем время
    DateTime now = RTC.now();
    Chs=now.hour(); Min=now.minute(); Sec=now.second();
    
    setStartTime SSt01(), SSt02(), SSt03(), SSt04(), SSt05(), SSt06(), SSt07(), SSt08(), SSt09(), SSt10(), SSt11(), SSt12(), SSt13(), SSt14(), SSt15(), SSt16(), SSt17(), SSt18();
    setStopTime  SSp01(), SSp02(), SSp03(), SSp04(), SSp05(), SSp06(), SSp07(), SSp08(), SSp09(), SSp10(), SSp11(), SSp12(), SSp13(), SSp14(), SSp15(), SSp16(), SSp17(), SSp18();
    
    dht11 sensor;
    display.clearDisplay();
    Poliv(); Klap(); Menu(); ButSigKlap(); //serial();
    
    Print(); 
    
    //SetUp(1,WHITE,95,43); TimePrintMenu();
    //SetUp(1,WHITE,95,53); TimePrintMenu2();
    
    display.display();
}
 
 void SetUp(int Sz, int Cl, int Sx, int Sy)
{
  display.setTextSize(Sz);
  display.setTextColor(WHITE);
  display.setCursor(Sx,Sy);
}
void weather()
{
  chk = sensor.read(DHT11PIN);
  SetUp(1,WHITE,50,5); display.print("H ");
  SetUp(1,WHITE,60,5); display.print(sensor.humidity);
  SetUp(1,WHITE,80,5); display.print("%T");
  SetUp(1,WHITE,95,5); display.print(sensor.temperature);
  SetUp(1,WHITE,110,5); display.print("*C");
}

void TimePrintCh()
{
  if (Chs<10){display.print("0");display.print(Chs);}
  else        {display.print(Chs);}
}

void TimePrintMin()
{
  if (Min<10){display.print("0");display.print(Min);}
  else        {display.print(Min);}
}

void TimePrintSec()
{
  if (Sec<10){display.print("0"); display.println(Sec);}
  else       {display.println(Sec);}
}

void TimePrintMenu(){display.print(menu);}
void TimePrintMenu2(){display.print(menu1);}

void Menu(){Data();ButBackspace();ButEnt();ButHigh();ButLow();}
void Data()
{ 
  if (ButSigEnt==1){menu++;rest();if (menu>5) {menu=5;}}
  if (ButSigBackspace==1){menu--;rest();if (menu<0) {menu=0;}}
  if (ButSigHigh==1){menu1++;rest();if (menu1>59){menu1=0;}}
  if (ButSigLow==1){menu1--;rest();if (menu1<0){menu1=0;}}
}


void ButBackspace()
{
   sig1=digitalRead(but_Backspace);
   if (sig1==HIGH && butS1==1) {butS1=0;}
   if (butS1==0){ sx=sx++;}
   if (sx>sy){sx=0; butS1=1; ButSigBackspace=1;}
}

void ButEnt()
{
  sig2=digitalRead(but_ent);
   if (sig2==HIGH && butS2==1) {butS2=0;}
   if (butS2==0){ sx=sx++;}
   if (sx>sy){sx=0;butS2=1; ButSigEnt=1;}
}

void ButHigh()
{
   sig3=digitalRead(but_high);
   if (sig3==HIGH && butS3==1) {butS3=0;}
   if (butS3==0){ sx=sx++;}
   if (sx>sy){sx=0;butS3=1; ButSigHigh=1;}
}

void ButLow()
{
   sig4=digitalRead(but_low);
   if (sig4==HIGH && butS4==1) {butS4=0;}
   if (butS4==0){ sx=sx++;}
   if (sx>sy){sx=0;butS4=1; ButSigLow=1;}
}

void ButSigKlap()
{
   sig5=digitalRead(sigK);
   if (sig5==HIGH) {ButSigK=1;}   else {ButSigK=0;}
}

void rest()
{
  ButSigBackspace=0; ButSigEnt=0; ButSigHigh=0; ButSigLow=0;
}


void Poliv()
{
  int pol=0;
  if (Min==1||Min==2||Min==3||Min==8||Min==30||Min==31||Min==34){pol=1;}else {pol=0;}
  if (pol==1){SetUp(1,WHITE,0,0);display.print("Poliv");digitalWrite(ledPin, HIGH);poliv=1;} else {digitalWrite(ledPin, LOW);poliv=0;}
}


void Klap()
{
  if (poliv==1){if (ButSigK==0){digitalWrite(motor, HIGH);} if (ButSigK==1) {digitalWrite(motor, LOW);}}
  if (poliv==0){if (ButSigK==1){digitalWrite(motor, HIGH);} if (ButSigK==0) {digitalWrite(motor, LOW);}}
}

void PrintTime()
{
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
}

void TimefleshCh()
{   
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
}
void TimefleshMin()
{
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
}
void Print()
{
  if (menu==0){PrintTime(); weather();}
  if (menu==1&&menu1<=5           ){int x=menu1     *10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime1(); menu2=menu1;                       }
  if (menu==1&&menu1> 5&&menu1<=11){int x=(menu1-6 )*10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime2(); menu2=menu1;                       }
  if (menu==1&&menu1>11           ){int x=(menu1-12)*10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime3();if (menu1>17){menu1=0;} menu2=menu1;}
  if (menu==2){SetUp(1,WHITE,50,0); display.println("Set Start"); 
               if (menu2==0){SSt01.SetStH(); SSt01.PrintSetStH();} 
              }
  if (menu==3){SetUp(1,WHITE,50,0); display.println("Set Start"); TimefleshMin();}
  if (menu==4){SetUp(1,WHITE,50,0); display.println("Set Stop");  TimefleshCh(); }
  if (menu==5){SetUp(1,WHITE,50,0); display.println("Set Stop");  TimefleshMin();}
}

void PrintSetTime1()
{
   SetUp(1,WHITE,10, 0); display.println(" Set Time1");
   SetUp(1,WHITE,10,10); display.println(" Set Time2");
   SetUp(1,WHITE,10,20); display.println(" Set Time3");
   SetUp(1,WHITE,10,30); display.println(" Set Time4");
   SetUp(1,WHITE,10,40); display.println(" Set Time5");
   SetUp(1,WHITE,10,50); display.println(" Set Time6");
}
void PrintSetTime2()
{
   SetUp(1,WHITE,10, 0); display.println(" Set Time7");
   SetUp(1,WHITE,10,10); display.println(" Set Time8");
   SetUp(1,WHITE,10,20); display.println(" Set Time9");
   SetUp(1,WHITE,10,30); display.println(" Set Time10");
   SetUp(1,WHITE,10,40); display.println(" Set Time11");
   SetUp(1,WHITE,10,50); display.println(" Set Time12");
}
void PrintSetTime3()
{
   SetUp(1,WHITE,10, 0); display.println(" Set Time13");
   SetUp(1,WHITE,10,10); display.println(" Set Time14");
   SetUp(1,WHITE,10,20); display.println(" Set Time15");
   SetUp(1,WHITE,10,30); display.println(" Set Time16");
   SetUp(1,WHITE,10,40); display.println(" Set Time17");
   SetUp(1,WHITE,10,50); display.println(" Set Time18");
}
 void serial()
  {
    Serial.print(sig1);Serial.print(".");Serial.print(sig2);Serial.print(".");Serial.print(sig3);Serial.print(".");
    Serial.print(sig4);Serial.print(".");Serial.print(sig5);Serial.print(".");Serial.print(sig6);Serial.print("________");
    Serial.print(ButSigBackspace);Serial.print(".");Serial.print(ButSigEnt);Serial.print(".");Serial.print(ButSigHigh);Serial.print(".");
    Serial.print(ButSigLow);Serial.print(".");Serial.print(signalKl);Serial.print(ButSigK);Serial.println("___");
  }//проверка сигналов
  
 
 
time_RTC_menu05.ino: In function 'void Print()':
time_RTC_menu05:308: error: 'SSt01' was not declared in this scope
 
говорит что не зарезервирован... а мне надо в функцию запихать объект класса.
T.Rook
Offline
Зарегистрирован: 05.03.2016

У Вас SSt01 объявлен в loop  и соответсвенно не виден в 'void Print()' о чем Вам и сказали. А если в функции надо обращаться к объекту, то передавайте его во входяших параметрах.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

можно пример? то что не видет в других функциях я это понял, я пробывал их объявить в глобальных параметрах выдает другую ошибку

 #include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <OLED_I2C.h> 
#include <dht11.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<iostream>

RTC_DS1307 RTC;
dht11 sensor;
#define DHT11PIN 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

  int ledPin            =13;
  int but_Backspace     =6;//пин кнопки установок
  int but_ent           =7;
  int but_high          =3;
  int but_low           =5;
  int sigK              =11;//открывает high закрывает Low
  int motor             =4;

int chk, sig1=0,sig2=0,sig3=0,sig4=0,sig5=0, sig6=0, menu=0, menu1=0, menu2=0;
int signalKl;
int Sec=0;     //секунды
int Min=0;     //минуты
int Chs=0;     //часы
int sx;        //
int sy=5;      //установка задержки кнопки
int butS1=1, butS2=1, butS3=1, butS4=1, butS5=1, butS6=1;      //для сравнения
int backspace; //возврат
int ButSigBackspace=0; int ButSigEnt=0; int ButSigHigh=0; int ButSigLow=0;      //чистый сигнал 
int ButSigK =0;          //сигнал с клапана
int poliv;


  void ButBackspace(); void ButEnt(); void ButHigh(); void ButLow();//функции кнопок
  void rest();
  void weather();
  void SetUp();
  void serial();
  void Menu();
  void Data();
  void Poliv();
  void PrintTime();
  void Print();
  void PrintSetTime1();
  void PrintSetTime2();
  void PrintSetTime2();
  void TimefleshCh();
  void TimefleshMin();

void setup ()
{
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    pinMode(ledPin,          OUTPUT);
    pinMode(motor,           OUTPUT);
    pinMode(but_Backspace,    INPUT);
    pinMode(sigK,             INPUT);
    pinMode(but_ent,          INPUT);
    pinMode(but_high,         INPUT);
    pinMode(but_low,          INPUT);
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
}

class setStartTime
{
  protected:
   int StHcas;
   int StMin;
   int setStH, setStM;
  public:
  setStartTime(int sth, int stm):
  StHcas(sth), StMin(stm){}
  void SetStH()
  {
    if (ButSigHigh==1){setStH++;rest();if (setStH>23){setStH=0;}}
    if (ButSigLow==1){setStH--;rest();if (setStH<0){setStH=23;}}
  }
  void SetStM()
  {
    if (ButSigHigh==1){setStM++;rest();if (setStM>59){setStM=0;}}
    if (ButSigLow==1){setStM--;rest();if (setStM<0){setStM=59;}}
  }
  void PrintSetStH()
  {
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(10,20); SetStH();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); SetStM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
  }
  void PrintSetStM()
  {
    SetUp(3,WHITE,10,20); SetStH();
    SetUp(3,WHITE,40,20); display.print(":");
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(50,20); SetStM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec(); 
  }
};
class setStopTime
{
  protected:
   int SpHcas;
   int SpMin;
   int setSpH, setSpM;
  public:
  setStopTime(int sph, int spm):
  SpHcas(sph), SpMin(spm){}
  void SetSpH()
  {
    if (ButSigHigh==1){setSpH++;rest();if (setSpH>23){setSpH=0;}}
    if (ButSigLow==1){setSpH--;rest();if (setSpH<0){setSpH=23;}}
  }
  void SetSpM()
  {
    if (ButSigHigh==1){setSpM++;rest();if (setSpM>59){setSpM=0;}}
    if (ButSigLow==1){setSpM--;rest();if (setSpM<0){setSpM=59;}}
  }
   void PrintSetSpH()
  {
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(10,20); SetSpH();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); SetSpM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
  }
  void PrintSetSpM()
  {
    SetUp(3,WHITE,10,20); SetSpH();
    SetUp(3,WHITE,40,20); display.print(":");
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(50,20); SetSpM();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec(); 
  }
};


    setStartTime SSt01(), SSt02(), SSt03(), SSt04(), SSt05(), SSt06(), SSt07(), SSt08(), SSt09(), SSt10(), SSt11(), SSt12(), SSt13(), SSt14(), SSt15(), SSt16(), SSt17(), SSt18();
    setStopTime  SSp01(), SSp02(), SSp03(), SSp04(), SSp05(), SSp06(), SSp07(), SSp08(), SSp09(), SSp10(), SSp11(), SSp12(), SSp13(), SSp14(), SSp15(), SSp16(), SSp17(), SSp18();
    

void loop () 
{

    // Определяем время
    DateTime now = RTC.now();
    Chs=now.hour(); Min=now.minute(); Sec=now.second();
    
    dht11 sensor;
    display.clearDisplay();
    Poliv(); Klap();  ButSigKlap(); //Menu(); serial();
    
    if (menu==0){PrintTime(); weather();}
  if (menu==1&&menu1<=5           ){int x=menu1     *10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime1(); menu2=menu1;                       }
  if (menu==1&&menu1> 5&&menu1<=11){int x=(menu1-6 )*10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime2(); menu2=menu1;                       }
  if (menu==1&&menu1>11           ){int x=(menu1-12)*10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime3();if (menu1>17){menu1=0;} menu2=menu1;}
  if (menu==2){SetUp(1,WHITE,50,0); display.println("Set Start"); 
               if (menu2==0){SSt01.SetStH(); SSt01.PrintSetStH();} 
              }
  if (menu==3){SetUp(1,WHITE,50,0); display.println("Set Start"); TimefleshMin();}
  if (menu==4){SetUp(1,WHITE,50,0); display.println("Set Stop");  TimefleshCh(); }
  if (menu==5){SetUp(1,WHITE,50,0); display.println("Set Stop");  TimefleshMin();}
    
    Print(); 
    
    display.display();
}
 
 void SetUp(int Sz, int Cl, int Sx, int Sy)
{
  display.setTextSize(Sz);
  display.setTextColor(WHITE);
  display.setCursor(Sx,Sy);
}
void weather()
{
  chk = sensor.read(DHT11PIN);
  SetUp(1,WHITE,50,5); display.print("H ");
  SetUp(1,WHITE,60,5); display.print(sensor.humidity);
  SetUp(1,WHITE,80,5); display.print("%T");
  SetUp(1,WHITE,95,5); display.print(sensor.temperature);
  SetUp(1,WHITE,110,5); display.print("*C");
}

void TimePrintCh()
{
  if (Chs<10){display.print("0");display.print(Chs);}
  else        {display.print(Chs);}
}

void TimePrintMin()
{
  if (Min<10){display.print("0");display.print(Min);}
  else        {display.print(Min);}
}

void TimePrintSec()
{
  if (Sec<10){display.print("0"); display.println(Sec);}
  else       {display.println(Sec);}
}

void TimePrintMenu(){display.print(menu);}
void TimePrintMenu2(){display.print(menu1);}

void Menu(){Data();ButBackspace();ButEnt();ButHigh();ButLow();}
void Data()
{ 
  if (ButSigEnt==1){menu++;rest();if (menu>5) {menu=5;}}
  if (ButSigBackspace==1){menu--;rest();if (menu<0) {menu=0;}}
  if (ButSigHigh==1){menu1++;rest();if (menu1>59){menu1=0;}}
  if (ButSigLow==1){menu1--;rest();if (menu1<0){menu1=0;}}
}


void ButBackspace()
{
   sig1=digitalRead(but_Backspace);
   if (sig1==HIGH && butS1==1) {butS1=0;}
   if (butS1==0){ sx=sx++;}
   if (sx>sy){sx=0; butS1=1; ButSigBackspace=1;}
}

void ButEnt()
{
  sig2=digitalRead(but_ent);
   if (sig2==HIGH && butS2==1) {butS2=0;}
   if (butS2==0){ sx=sx++;}
   if (sx>sy){sx=0;butS2=1; ButSigEnt=1;}
}

void ButHigh()
{
   sig3=digitalRead(but_high);
   if (sig3==HIGH && butS3==1) {butS3=0;}
   if (butS3==0){ sx=sx++;}
   if (sx>sy){sx=0;butS3=1; ButSigHigh=1;}
}

void ButLow()
{
   sig4=digitalRead(but_low);
   if (sig4==HIGH && butS4==1) {butS4=0;}
   if (butS4==0){ sx=sx++;}
   if (sx>sy){sx=0;butS4=1; ButSigLow=1;}
}

void ButSigKlap()
{
   sig5=digitalRead(sigK);
   if (sig5==HIGH) {ButSigK=1;}   else {ButSigK=0;}
}

void rest()
{
  ButSigBackspace=0; ButSigEnt=0; ButSigHigh=0; ButSigLow=0;
}


void Poliv()
{
  int pol=0;
  if (Min==1||Min==2||Min==3||Min==8||Min==30||Min==31||Min==34){pol=1;}else {pol=0;}
  if (pol==1){SetUp(1,WHITE,0,0);display.print("Poliv");digitalWrite(ledPin, HIGH);poliv=1;} else {digitalWrite(ledPin, LOW);poliv=0;}
}


void Klap()
{
  if (poliv==1){if (ButSigK==0){digitalWrite(motor, HIGH);} if (ButSigK==1) {digitalWrite(motor, LOW);}}
  if (poliv==0){if (ButSigK==1){digitalWrite(motor, HIGH);} if (ButSigK==0) {digitalWrite(motor, LOW);}}
}

void PrintTime()
{
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
}

void TimefleshCh()
{   
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    SetUp(3,WHITE,50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
}
void TimefleshMin()
{
    SetUp(3,WHITE,10,20); TimePrintCh();
    SetUp(3,WHITE,40,20); display.print(":");
    display.setTextSize(3); display.setTextColor(BLACK, WHITE); display.setCursor(50,20); TimePrintMin();
    SetUp(3,WHITE,80,20); display.print(":");
    SetUp(1,WHITE,95,33); TimePrintSec();
}
/*void Print()
{
  if (menu==0){PrintTime(); weather();}
  if (menu==1&&menu1<=5           ){int x=menu1     *10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime1(); menu2=menu1;                       }
  if (menu==1&&menu1> 5&&menu1<=11){int x=(menu1-6 )*10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime2(); menu2=menu1;                       }
  if (menu==1&&menu1>11           ){int x=(menu1-12)*10; SetUp(1,WHITE,10,x); display.println("*"); PrintSetTime3();if (menu1>17){menu1=0;} menu2=menu1;}
  if (menu==2){SetUp(1,WHITE,50,0); display.println("Set Start"); 
               if (menu2==0){SSt01.SetStH(); SSt01.PrintSetStH();} 
              }
  if (menu==3){SetUp(1,WHITE,50,0); display.println("Set Start"); TimefleshMin();}
  if (menu==4){SetUp(1,WHITE,50,0); display.println("Set Stop");  TimefleshCh(); }
  if (menu==5){SetUp(1,WHITE,50,0); display.println("Set Stop");  TimefleshMin();}
}*/

void PrintSetTime1()
{
   SetUp(1,WHITE,10, 0); display.println(" Set Time1");
   SetUp(1,WHITE,10,10); display.println(" Set Time2");
   SetUp(1,WHITE,10,20); display.println(" Set Time3");
   SetUp(1,WHITE,10,30); display.println(" Set Time4");
   SetUp(1,WHITE,10,40); display.println(" Set Time5");
   SetUp(1,WHITE,10,50); display.println(" Set Time6");
}
void PrintSetTime2()
{
   SetUp(1,WHITE,10, 0); display.println(" Set Time7");
   SetUp(1,WHITE,10,10); display.println(" Set Time8");
   SetUp(1,WHITE,10,20); display.println(" Set Time9");
   SetUp(1,WHITE,10,30); display.println(" Set Time10");
   SetUp(1,WHITE,10,40); display.println(" Set Time11");
   SetUp(1,WHITE,10,50); display.println(" Set Time12");
}
void PrintSetTime3()
{
   SetUp(1,WHITE,10, 0); display.println(" Set Time13");
   SetUp(1,WHITE,10,10); display.println(" Set Time14");
   SetUp(1,WHITE,10,20); display.println(" Set Time15");
   SetUp(1,WHITE,10,30); display.println(" Set Time16");
   SetUp(1,WHITE,10,40); display.println(" Set Time17");
   SetUp(1,WHITE,10,50); display.println(" Set Time18");
}
 void serial()
  {
    Serial.print(sig1);Serial.print(".");Serial.print(sig2);Serial.print(".");Serial.print(sig3);Serial.print(".");
    Serial.print(sig4);Serial.print(".");Serial.print(sig5);Serial.print(".");Serial.print(sig6);Serial.print("________");
    Serial.print(ButSigBackspace);Serial.print(".");Serial.print(ButSigEnt);Serial.print(".");Serial.print(ButSigHigh);Serial.print(".");
    Serial.print(ButSigLow);Serial.print(".");Serial.print(signalKl);Serial.print(ButSigK);Serial.println("___");
  }//проверка сигналов
  

ошибка 

time_RTC_menu06.ino: In function 'void loop()':
time_RTC_menu06:173: error: request for member 'SetStH' in 'SSt01', which is of non-class type 'setStartTime ()()'
time_RTC_menu06:173: error: request for member 'PrintSetStH' in 'SSt01', which is of non-class type 'setStartTime ()()'
 
 
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Павел Сергеевич, это Ваш код или Вы его где-то взяли и пытаетесь модифицировать?

Есть ощущение, что Вы модифицируете код методом тыка без понимания. При этом в коде используются достаточно сложные концептуальные конструкции, которые без понимания править бесполезно.

В строка 153 и 154 у Вас написаны какие-то странные вызавы умолчательных конструкторов.

Если Вы хотите создать объект, то либо определите в классе конструктор без параметров, либо воспользуётесь уже имеющимся конструктором с двумя целыми параметрами. Например, если вместо SSt01() Вы напишете SSt01(0,0), то эта ошибка компиляции уйдёт, но я не знаю, что у Вас значат эти параметры и потому не могу сказать что именно туда писать.

Если Вы действительно меняете код методом тыка - это совершенно бесполезно, сначала всё-таки ознакомьтесь с языком.

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

T.Rook
Offline
Зарегистрирован: 05.03.2016

Павел_Сергеевич пишет:

можно пример?

Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration

Прислушайтесь к ЕвгенийП #29.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

переменные класса должен устанавливать пользователь. программу написал где то на 80% сам поэтому такой бордак, остальное взял с кодов для модулей.

setStopTime(int sph, int spm): sph это установка завершкния полива часы, spm это установка завершкния полива минуты.

например это должно дать возможность пользователю установить время закрывания клапана полива.

классы так как будильников 18 шт, а разделил на два класса так как так проще связать установку начала полива со слоем меню и установку окончания полива со слоем меню.

какие могут быть обиды на адекватную критику? я действительно почти не знаю язык, начал изучать с++ закончил масссивы, классы понимаю но сложно. а процессинг это не с++ агибрид джава и с, во всяком случае так написано в описании. то что будет работать на с++ не все будет работать в ардуино как я понимаю.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

T.Rook пишет:

Павел_Сергеевич пишет:

можно пример?

Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration

Прислушайтесь к ЕвгенийП #29.

по вашей ссылки нет классов, только функции.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

пока могу код только править, так как весь проект переношу с макетки в корпус автомата.

T.Rook
Offline
Зарегистрирован: 05.03.2016

Павел_Сергеевич пишет:

T.Rook пишет:

Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration

по вашей ссылки нет классов, только функции.

По ссылке пример передачи входящих параметров в функцию (мы ведь говорили о недоступности объекта в области видимости функции). А что Вы будете функции скармливать, простую переменную(в примере int x, int y) или объект како-то класса (у Вас наверное это setStartTime SSt01()), это уже полностью от Вас зависит.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

то есть это должно выглядить приблизительно вот так? 

подозреваю что это не правильно, во всяком случае ни в одном примере такого не видел.

void Print(SSt01(), SSt02(), SSt03(), SSt04(), SSt05(), SSt06(), SSt07(), SSt08(), SSt09(), SSt10(), SSt11(), SSt12(), SSt13(), SSt14(), SSt15(), SSt16(), SSt17(), SSt18())
{

}
T.Rook
Offline
Зарегистрирован: 05.03.2016

В примере показана декларация функции:

int myMultiplyFunction(int x, int y){
  int result;
  result = x * y;
  return result;
}

Как видите, описан тип входящих параметров и действия которые с ними функция производит.

Использование:

  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j);

Здесь видим, что функции передаются входящие параметры, реальные экземпляры класса/типа  int -  i и j.

В примере функция возвращает результат типа int. У Вас же "void Print" ничего не возвращает. Но оперируя параметрами может менять их значения.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016


 
 
 
time_RTC_menu07:65: error: 'setStartTime' does not name a type
time_RTC_menu07:66: error: 'setStopTime' does not name a type
time_RTC_menu07.ino: In function 'void loop()':
time_RTC_menu07:174: error: 'SSt01' was not declared in this scope
 

setStartTime SSt01(0,0);//, SSt02(), SSt03(), SSt04(), SSt05(), SSt06(), SSt07(), SSt08(), SSt09(), SSt10(), SSt11(), SSt12(), SSt13(), SSt14(), SSt15(), SSt16(), SSt17(), SSt18();
setStopTime SSp01(), SSp02(), SSp03(), SSp04(), SSp05(), SSp06(), SSp07(), SSp08(), SSp09(), SSp10(), SSp11(), SSp12(), SSp13(), SSp14(), SSp15(), SSp16(), SSp17(), SSp18();

ошибка теперь другая. 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Павел_Сергеевич пишет:



 
time_RTC_menu07:65: error: 'setStartTime' does not name a type
time_RTC_menu07:66: error: 'setStopTime' does not name a type

ошибка теперь другая. 

Куда описание классов дели?

T.Rook
Offline
Зарегистрирован: 05.03.2016

1. давайте ка простыню #28  сократим. Слона надо есть по кусочкам. Оставьте минимум

2. Зачем вам два одинаковых класса (setStartTime и setStopTime )? Смысловую нагрузку на имена переменных возложите. Да и вообще, если смысл этих классов в будильнике - то и сотворите класс "Будильник" со временем вкл и выкл.

3. Обращение из setStartTime и setStopTime к внешним display, SetUp и т.д - убрать. Так нельзя!  Отображение вынесите в отдельные процедурки.

И еще раз медленно прочтите ЕвгенийП #29. А потом про классы и их конструкторы.

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

я попробую все же через функции решить, с ними у меня как то проще. Решу тогда напишу. два класса так как они используются в разных слоях меню, подругому связать с кнопками я не знаю как. вообе у меня 4 кнопки первая пара управляет слоями+\- это ent\bakspace, вторая пара строками слоев, мне нужно привязать к строкам отображающимся на экране действия. всеже пойду через функции, к тому же мне сказали что классы слишком тяжелые для чипа.

T.Rook
Offline
Зарегистрирован: 05.03.2016

Тогда в качестве примера набросал, посмотрите:


/********************************************************/
int ButSigBackspace=0; int ButSigEnt=0; int ButSigHigh=0; int ButSigLow=0;      //чистый сигнал 
void rest()
{
  ButSigBackspace=0; ButSigEnt=0; ButSigHigh=0; ButSigLow=0;
}


/********************************************************/

//объявление структуры данных одного будильника: 4 целых числа.

struct Alarm{
  int startHour = 0;
  int startMin = 0;
  int stopHour = 0;
  int stopMin = 0;
};

//массив будильников
Alarm myAlarms[18];

//ну или без массива
Alarm a1,a2,a3;

//процедуры установки часов и минут. В качестве входящего параметра принимаю int
  void SetH(int H)
  {//устанавливаем часы
//    if (ButSigHigh==1){setStH++;rest();if (setStH>23){setStH=0;}}
    if (ButSigHigh==1){H++;rest();if (H>23){H=0;}}
//    if (ButSigLow==1){setStH--;rest();if (setStH<0){setStH=23;}}
    if (ButSigLow==1){H--;rest();if (H>23){H=0;}}
  }
  
  void SetM(int M)
  {//устанавливаем минуты
//    if (ButSigHigh==1){setStM++;rest();if (setStM>59){setStM=0;}}
    if (ButSigHigh==1){M++;rest();if (M>59){M=0;}}
//    if (ButSigLow==1){setStM--;rest();if (setStM<0){setStM=59;}}
    if (ButSigLow==1){M--;rest();if (M<0){M=59;}}
  }


//



void setup() {


}

void loop() {
  // put your main code here, to run repeatedly:
//пример вызова
SetH(myAlarms[0].startHour);

SetM(myAlarms[11].stopMin);

SetM(a2.startMin);
}

 

Павел_Сергеевич
Offline
Зарегистрирован: 02.04.2016

спасибо огромное, буду разбераться