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

Приведите нормально скетч и скопируйте нормально текст сообщения об ошибке. На Вашей картинке я ни хрена прочитать не могу.
#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); }ошибка
Компилятор не воспринял Adafruit_GFX как имя класса. Что с ним не так, неясно, судя по всему этот класс определяется в файле Adafruit_GFX.h
Говорит, что у класса DS1307 нет конструктора с двумя параметрами, а Вы пытаетесь передать ему A0 и A1. Не знаю, что у Вас за библиотека, но вот в этой такого конструктора действительно нет.
Говорит, что у класса DS1307 нет методов halt, setDOW и далее по списку. Опять, не знаю, что у Вас там за библиотека, но вот в этой таких методов действительное нет.
Общий вывод. Рискну предположить, что скетч Вы писали не сами, а где-то позаимствовали. Но автор пользовался другими библиотеками. не теми, что у Вас. Смотрите внимательнее на текст автора и ищите правильные библиотеки.
Слазил на страницу откуда Вы всё брали.
Дейтсвительно там автор приводт те библиотеки, которыми он пользуется и в них всё, что надо есть. Берите его библиотеки и компилируйте, а свои уберите в сторонку.
странно, но я их оттуда и качал...
странно, но я их оттуда и качал...
Возможно, у Вас на компьютере есть другие с такими же именами и работают именно те - другие. Разбирайтесь.
ругается на библеотеку
проблема в том что в стандартных скетчах и модуль Oled и часовой модуль Tiny посадили на пины 4-5, а где это указано так и не нашел. если бы нашел, то один из модулей повесил бы на другие пины.
не правда, если использовать библеотеку русских шрифтов то используются цифровые выводы а не аналоговые. 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.
пробывал, запускал, руские шрифты отображаются на пинах D8-D9.
стандартная библиотека на А4-А5.
Сделали зачем то программную эмуляцию, заняли еще два пина, на выходе получили то, что и так аппаратно реализовано. Созидание ради созидания?
то есть с двумя I2C ардуино одновременно работать не может? а как же эта статья? https://geektimes.ru/post/255556/
Ну. почему не может? Павел Сергеевич, Вы читали про I2C - что это такое? Ну, хоть википедию откройте что-ли.
У каждого I2C устройства есть адрес и до тех пор пока адреса всех устройств на линии уникальны, всё будет работать. Если адреса пересеклись - надо разводить.
Узнать адреса устройств можно I2C сканером. Подлкючите устройства (лучше по одному), запустите сканер, узнаете адрес. Если у двух устройств адреса оказались одинаковыми - надо смотреть как их поменять - многие устройства это позволяют.
А смысл делать программный интерфейс имея аппаратный на 127 адресов? Будут конфликтовать или нет, не знаю.
я подружил два 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); }вот тест
но почему то когда подключаешь и дисплей и модуль времени, дисплей не показывает ничего. черный экран.
странно, сейчас оба модуля стали работать на А4-А5.
буду дальше мучать девайсы.
Правильно, чтобы они оба одновременно работали на а4 и а5 - этого и добивайтесь. Туда можно и сотню устройств подцепить - если адреса разные, то должны работать вся сотня на этих двух пинах.
вот мой зубодробящий код:
#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р\шт. код написан автоматики, осталось запустить данные с модуля часов и меню прописать.
вот код от часового модуля:
#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:
И зачем весь этот геммор с экранами, меню и прочими поэтессами? DS3231+Атмеga8-328+реле требуемое кол-во. Часы и время срабатывания инициировали при загрузке скетчей в конце сезона время проверили. Обойдется рублей в 300-400 каждый блок.
а чем хуже модуль tiny rtc? атмега да 100р плюс программатор 2000.... да и родители далеко не программисты чтобы время полива заливать в чип с программаором сидя на грядке.
Проект должен быть реализован при помощи: ардуино нано, олед дисрлей, тини ртс, 4 кнопеи ( enter, bakspace, up, down), драйвер кр1128кт3а, мотор редуктор, микро выключатель срабатывающий от эксцентрика, стоящего на клапане. В меню выставятся будильники до 10 шт, устанавливается врея начала полива и время окончания.
да и родители далеко не программисты чтобы время полива заливать в чип с программаором сидя на грядке.
Предполагалось, что время полива уже известно. А если люди достаточно пожилые, то обычно опасаются разных экранов с цифирками. Личный опыт.
и, чего - не помогают?
или, я не понимаю твоего наречия русского языка - кому кто должен?
люди в сети делятся на две категории, те кто говорит чисто по делу, в данной теме это ЕвгенийП, спасибо ему, он мне действительно помог. И те кому лишь бы потрещать, не слова по делу, но лишь бы подпортить настроение. Говорю дословно, проект должен быть реализован МНОЙ. Отец и Мама пожилые, автомат делается предельно простым с четырьмя кнопочками. Управлять должна им Мама. Отец хоть и пожилой, недавно стал изучать С++ для удовольсвия знает его гораздо лучше меня, но с просьбой помочь лучше обратиться к специалистам. И мне бы не хотелось разводить срачь в данной теме. Есть что сказать по делу, с удовольствием выслушую, а сказать ради того чтобы сказать, проходите мимо.
Люди, давайте будем уважать друг друга.
Заранее извините если кого то не правильно понял.
нашел решение как подружить два модуля вот код
#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);} }кому интересен мой проект могу и дальше его вакладывать, осталось сделать меню. вот наброски:
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 }вот почти готовая программа.
#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("___"); }//проверка сигналовстолкнулся с новой проблемой, установка будильников. ругается на объекты класса в функции
#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("___"); }//проверка сигналовУ Вас SSt01 объявлен в loop и соответсвенно не виден в 'void Print()' о чем Вам и сказали. А если в функции надо обращаться к объекту, то передавайте его во входяших параметрах.
можно пример? то что не видет в других функциях я это понял, я пробывал их объявить в глобальных параметрах выдает другую ошибку
#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("___"); }//проверка сигналовошибка
Павел Сергеевич, это Ваш код или Вы его где-то взяли и пытаетесь модифицировать?
Есть ощущение, что Вы модифицируете код методом тыка без понимания. При этом в коде используются достаточно сложные концептуальные конструкции, которые без понимания править бесполезно.
В строка 153 и 154 у Вас написаны какие-то странные вызавы умолчательных конструкторов.
Если Вы хотите создать объект, то либо определите в классе конструктор без параметров, либо воспользуётесь уже имеющимся конструктором с двумя целыми параметрами. Например, если вместо SSt01() Вы напишете SSt01(0,0), то эта ошибка компиляции уйдёт, но я не знаю, что у Вас значат эти параметры и потому не могу сказать что именно туда писать.
Если Вы действительно меняете код методом тыка - это совершенно бесполезно, сначала всё-таки ознакомьтесь с языком.
И ещё, программа в три с половиной сотни строк с более, чем полусотней глобальных переменных работать не будет. Это абсолютно точно. Даже если Вам в какой-то момент покажется, что она нормально работает - это до всплывания следующего глюка. Сделать такую программу надёжной невозможно (возможно, конечно, но требует огромных трудозатрат и, не обижайтесь, не Вашей квалификации). Очень советую просто переписать программу практически с нуля без использования глобальных переменных и локализуя логику в функциях и методах.
можно пример?
Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration
Прислушайтесь к ЕвгенийП #29.
переменные класса должен устанавливать пользователь. программу написал где то на 80% сам поэтому такой бордак, остальное взял с кодов для модулей.
setStopTime(intsph,intspm): sph это установка завершкния полива часы, spmэто установка завершкния полива минуты.например это должно дать возможность пользователю установить время закрывания клапана полива.классы так как будильников 18 шт, а разделил на два класса так как так проще связать установку начала полива со слоем меню и установку окончания полива со слоем меню.какие могут быть обиды на адекватную критику? я действительно почти не знаю язык, начал изучать с++ закончил масссивы, классы понимаю но сложно. а процессинг это не с++ агибрид джава и с, во всяком случае так написано в описании. то что будет работать на с++ не все будет работать в ардуино как я понимаю.можно пример?
Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration
Прислушайтесь к ЕвгенийП #29.
по вашей ссылки нет классов, только функции.
пока могу код только править, так как весь проект переношу с макетки в корпус автомата.
Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration
по вашей ссылки нет классов, только функции.
По ссылке пример передачи входящих параметров в функцию (мы ведь говорили о недоступности объекта в области видимости функции). А что Вы будете функции скармливать, простую переменную(в примере int x, int y) или объект како-то класса (у Вас наверное это
setStartTime SSt01()), это уже полностью от Вас зависит.то есть это должно выглядить приблизительно вот так?
подозреваю что это не правильно, во всяком случае ни в одном примере такого не видел.
void Print(SSt01(), SSt02(), SSt03(), SSt04(), SSt05(), SSt06(), SSt07(), SSt08(), SSt09(), SSt10(), SSt11(), SSt12(), SSt13(), SSt14(), SSt15(), SSt16(), SSt17(), SSt18()) { }В примере показана декларация функции:
int myMultiplyFunction(int x, int y){ int result; result = x * y; return result; }Как видите, описан тип входящих параметров и действия которые с ними функция производит.
Использование:
Здесь видим, что функции передаются входящие параметры, реальные экземпляры класса/типа int - i и j.
В примере функция возвращает результат типа int. У Вас же "void Print" ничего не возвращает. Но оперируя параметрами может менять их значения.
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();
ошибка теперь другая.
ошибка теперь другая.
Куда описание классов дели?
1. давайте ка простыню #28 сократим. Слона надо есть по кусочкам. Оставьте минимум
2. Зачем вам два одинаковых класса (setStartTime и setStopTime )? Смысловую нагрузку на имена переменных возложите. Да и вообще, если смысл этих классов в будильнике - то и сотворите класс "Будильник" со временем вкл и выкл.
3. Обращение из setStartTime и setStopTime к внешним display, SetUp и т.д - убрать. Так нельзя! Отображение вынесите в отдельные процедурки.
И еще раз медленно прочтите ЕвгенийП #29. А потом про классы и их конструкторы.
я попробую все же через функции решить, с ними у меня как то проще. Решу тогда напишу. два класса так как они используются в разных слоях меню, подругому связать с кнопками я не знаю как. вообе у меня 4 кнопки первая пара управляет слоями+\- это ent\bakspace, вторая пара строками слоев, мне нужно привязать к строкам отображающимся на экране действия. всеже пойду через функции, к тому же мне сказали что классы слишком тяжелые для чипа.
Тогда в качестве примера набросал, посмотрите:
/********************************************************/ 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); }спасибо огромное, буду разбераться