Не работают часы на ардуино.
- Войдите на сайт для отправки комментариев
Сб, 02/04/2016 - 21:44
Всем привет. Я тут новенький так что могу сказать что нить не так. Проблема в том что не могу собрать часы на двух модулях. Схему и скетч брал отсюда. http://arduino-project.net/oled-chasy-na-arduino/
выдает ошибку при кампилировании.
Приведите нормально скетч и скопируйте нормально текст сообщения об ошибке. На Вашей картинке я ни хрена прочитать не могу.
ошибка
Компилятор не воспринял 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
вот тест
но почему то когда подключаешь и дисплей и модуль времени, дисплей не показывает ничего. черный экран.
странно, сейчас оба модуля стали работать на А4-А5.
буду дальше мучать девайсы.
Правильно, чтобы они оба одновременно работали на а4 и а5 - этого и добивайтесь. Туда можно и сотню устройств подцепить - если адреса разные, то должны работать вся сотня на этих двух пинах.
вот мой зубодробящий код:
я не программист так что сильно не ругайтесь, возможно тут много лишнего. не могу присвоить к Chs значение от now.hour()
задача собрать автомат полива, у родителей сгорел(чип сдох, а он в виде капли пластика), а им нужно их штуки 3-4, цена кусается 3000р\шт. код написан автоматики, осталось запустить данные с модуля часов и меню прописать.
вот код от часового модуля:
вот код из библиотеки RTClib.h:
И зачем весь этот геммор с экранами, меню и прочими поэтессами? DS3231+Атмеga8-328+реле требуемое кол-во. Часы и время срабатывания инициировали при загрузке скетчей в конце сезона время проверили. Обойдется рублей в 300-400 каждый блок.
а чем хуже модуль tiny rtc? атмега да 100р плюс программатор 2000.... да и родители далеко не программисты чтобы время полива заливать в чип с программаором сидя на грядке.
Проект должен быть реализован при помощи: ардуино нано, олед дисрлей, тини ртс, 4 кнопеи ( enter, bakspace, up, down), драйвер кр1128кт3а, мотор редуктор, микро выключатель срабатывающий от эксцентрика, стоящего на клапане. В меню выставятся будильники до 10 шт, устанавливается врея начала полива и время окончания.
да и родители далеко не программисты чтобы время полива заливать в чип с программаором сидя на грядке.
Предполагалось, что время полива уже известно. А если люди достаточно пожилые, то обычно опасаются разных экранов с цифирками. Личный опыт.
и, чего - не помогают?
или, я не понимаю твоего наречия русского языка - кому кто должен?
люди в сети делятся на две категории, те кто говорит чисто по делу, в данной теме это ЕвгенийП, спасибо ему, он мне действительно помог. И те кому лишь бы потрещать, не слова по делу, но лишь бы подпортить настроение. Говорю дословно, проект должен быть реализован МНОЙ. Отец и Мама пожилые, автомат делается предельно простым с четырьмя кнопочками. Управлять должна им Мама. Отец хоть и пожилой, недавно стал изучать С++ для удовольсвия знает его гораздо лучше меня, но с просьбой помочь лучше обратиться к специалистам. И мне бы не хотелось разводить срачь в данной теме. Есть что сказать по делу, с удовольствием выслушую, а сказать ради того чтобы сказать, проходите мимо.
Люди, давайте будем уважать друг друга.
Заранее извините если кого то не правильно понял.
нашел решение как подружить два модуля вот код
кому интересен мой проект могу и дальше его вакладывать, осталось сделать меню. вот наброски:
вот почти готовая программа.
столкнулся с новой проблемой, установка будильников. ругается на объекты класса в функции
У Вас SSt01 объявлен в loop и соответсвенно не виден в 'void Print()' о чем Вам и сказали. А если в функции надо обращаться к объекту, то передавайте его во входяших параметрах.
можно пример? то что не видет в других функциях я это понял, я пробывал их объявить в глобальных параметрах выдает другую ошибку
ошибка
Павел Сергеевич, это Ваш код или Вы его где-то взяли и пытаетесь модифицировать?
Есть ощущение, что Вы модифицируете код методом тыка без понимания. При этом в коде используются достаточно сложные концептуальные конструкции, которые без понимания править бесполезно.
В строка 153 и 154 у Вас написаны какие-то странные вызавы умолчательных конструкторов.
Если Вы хотите создать объект, то либо определите в классе конструктор без параметров, либо воспользуётесь уже имеющимся конструктором с двумя целыми параметрами. Например, если вместо SSt01() Вы напишете SSt01(0,0), то эта ошибка компиляции уйдёт, но я не знаю, что у Вас значат эти параметры и потому не могу сказать что именно туда писать.
Если Вы действительно меняете код методом тыка - это совершенно бесполезно, сначала всё-таки ознакомьтесь с языком.
И ещё, программа в три с половиной сотни строк с более, чем полусотней глобальных переменных работать не будет. Это абсолютно точно. Даже если Вам в какой-то момент покажется, что она нормально работает - это до всплывания следующего глюка. Сделать такую программу надёжной невозможно (возможно, конечно, но требует огромных трудозатрат и, не обижайтесь, не Вашей квалификации). Очень советую просто переписать программу практически с нуля без использования глобальных переменных и локализуя логику в функциях и методах.
можно пример?
Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration
Прислушайтесь к ЕвгенийП #29.
переменные класса должен устанавливать пользователь. программу написал где то на 80% сам поэтому такой бордак, остальное взял с кодов для модулей.
setStopTime(
int
sph,
int
spm): sph это установка завершкния полива часы, spm
это установка завершкния полива минуты.например это должно дать возможность пользователю установить время закрывания клапана полива.
классы так как будильников 18 шт, а разделил на два класса так как так проще связать установку начала полива со слоем меню и установку окончания полива со слоем меню.
какие могут быть обиды на адекватную критику? я действительно почти не знаю язык, начал изучать с++ закончил масссивы, классы понимаю но сложно. а процессинг это не с++ агибрид джава и с, во всяком случае так написано в описании. то что будет работать на с++ не все будет работать в ардуино как я понимаю.
можно пример?
Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration
Прислушайтесь к ЕвгенийП #29.
по вашей ссылки нет классов, только функции.
пока могу код только править, так как весь проект переношу с макетки в корпус автомата.
Пример как обычно в документации: http://www.arduino.cc/en/Reference/FunctionDeclaration
по вашей ссылки нет классов, только функции.
По ссылке пример передачи входящих параметров в функцию (мы ведь говорили о недоступности объекта в области видимости функции). А что Вы будете функции скармливать, простую переменную(в примере int x, int y) или объект како-то класса (у Вас наверное это
setStartTime SSt01()
), это уже полностью от Вас зависит.то есть это должно выглядить приблизительно вот так?
подозреваю что это не правильно, во всяком случае ни в одном примере такого не видел.
В примере показана декларация функции:
Как видите, описан тип входящих параметров и действия которые с ними функция производит.
Использование:
Здесь видим, что функции передаются входящие параметры, реальные экземпляры класса/типа 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, вторая пара строками слоев, мне нужно привязать к строкам отображающимся на экране действия. всеже пойду через функции, к тому же мне сказали что классы слишком тяжелые для чипа.
Тогда в качестве примера набросал, посмотрите:
спасибо огромное, буду разбераться