Модуль TM1637. Не проходит проверка прошивки.
- Войдите на сайт для отправки комментариев
Ср, 05/02/2020 - 00:04
Здравствуйте. Сегодня пришел модуль ТМ1637.Первый раз с ним работаю. Если честно в программировании не особо. Загрузил готовую прошивку для проверки ТМ1637. Но при проверке выдает ошибку по строке tm1637.init(). Пишет:"ciass TM1637 has no member named 'init'"(нет имени...). Подскажите в чем засада? Заранее спасибо.
#include "TM1637.h" // Подключаем библиотеку для работы с модулем
int8_t DispMSG[] = {1, 2, 3, 4}; // Настройка символов для последующего вывода на дислей
//Определяем пины для подключения к плате Arduino
#define CLK 3
#define DIO 2
//Создаём объект класса TM1637, в качестве параметров
//передаём номера пинов подключения
TM1637 tm1637(CLK, DIO);
void setup()
{
//Инициализация модуля
tm1637.init();
//Установка яркости горения сегментов
/*
BRIGHT_TYPICAL = 2 Средний
BRIGHT_DARKEST = 0 Тёмный
BRIGHTEST = 7 Яркий
*/
tm1637.set(BRIGHT_TYPICAL);
}
void loop()
{
//Задание на включение разделителя
tm1637.point(true);
//Выводим массив на дисплей
tm1637.display(DispMSG);
//Задержка
delay(1000);
//Задание на выключение разделителя
tm1637.point(false);
//Выводим массив на дисплей
tm1637.display(DispMSG);
//Задержка
delay(1000);
}
Библиотека не та подключена.
Спасибо. А какая нужна?
Пробовал несколько разных. Везде ошибки выдает.
Посмотрите внутри библиотеки правильный вызов метода инициализации. Там в пабликах...
Вот эти паблики. Строка void init(void). Мне ее надо вписать в тот скетч ?
Или несколько строк надо менять ?
Попробуй вот это, заодно и потестируешь на дисплеях с точками, у меня на этот момент их нет
https://github.com/DetSimen/TM1637
Никаких init-ов не надо и аффтар всегда здесь, пока и отсюдова не выпилили. :)
До setup() поставь одно из обьявлений
Другие библиотеки тм1637 удалить или они не мешают? А готовые скетчи есть для проверки вашей библиотеки?
const uint8_t CLK = 11; // Clock на 11 ноге const uint8_t DAT = 10; // Data на 10 ноге TM1637 Display(CLK, DAT); // часы с двоеточием void setup(){ Display.SetBrightness(7); Display.Print("Err0"); delay(3000); Display.Print(100); delay(3000); Display.PrintTime(20,46); for (uint8_t i=0; i<10; i++){ Display.ToggleColon(); delay(500); } delay(3000); Display.PrintDeg(-15); delay(5000); Display.Clear(); }Другие библиотеки тм1637 удалить или они не мешают?
удали, это недолго. Просто перемести в любую папку за пределами Arduino\libraries, чтобы при необходимости можно было просто вернуть взат. А мои 2 файла, наоборот, создай директорию, например ..\Arduino\libraries\dts и скопируй их туда. Тока, IDE перезапустить не забуть.
На диске с в этой папке нет библиотек 1637. Может когда сам устанавливаешь библиотеки они в другую папку устанавливаются. У меня дисплей с точками. Мне нужно выводить значение с датчика давления. У меня все работает наLCD1602. Хочу переделать на тм1637 . Не знаю получится ли.
#include <LiquidCrystal.h> const int D = 0; //Аналоговый вход 0 для подключения датчика разряжения int V = 0; float V1 = 0; float P = 0; LiquidCrystal lcd(2, 3, 4, 5, 6, 7); void setup() { lcd.begin(16, 2); lcd.clear(); } void loop() { V = analogRead(D); V1 = ((4.92 / 1023.0) * V); P = (8.62 * V1 - 4.31); P = constrain(P, 0, 34.48); lcd.setCursor(5, 0); lcd.print(P); lcd.setCursor(11, 0); lcd.print("BAR"); delay(500); }Пробуй.
Подскажите.
01 #include <LiquidCrystal.h> 02 const int D = 0; //Аналоговый вход 0 для подключения датчика разряжения 03 int V = 0; 04 float V1 = 0; 05 float P = 0; 06 07 LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 08 09 10 11 void setup() { 12 lcd.begin(16, 2); 13 lcd.clear(); 14 } 15 16 void loop() { 17 18 V = analogRead(D); 19 V1 = ((4.92 / 1023.0) * V); 20 P = (8.62 * V1 - 4.31); 21 P = constrain(P, 0, 34.48); 22 23 lcd.setCursor(5, 0); 24 lcd.print(P); 25 lcd.setCursor(11, 0); 26 lcd.print("BAR"); 27 delay(500); 28 29 }Не разберусь. Как вывести значение датчика давления на ТМ1637? Подскажите какие значения задать. Как переделать вот этот код под ТМ1637? Бары не нужны. Только цифры.
Для вывода на TM1637 используется функция tm1637.display(dispMSG), где dispMSG - это массив из четырех цифр.
Соответственно любое число, которое необходимо вывести, надо преобразовать в элементы этого массива.
Число рассматриваем как целое, четырехзначное. Пример выводит число 1234 на дисплей, а затем 34 на дисплей (два старших разряда заполняется нулями):
#include "TM1637.h"//Библиотека для работы с индикаторным модулем #define CLK A0 // CLK модуля подключен к А0 ардуино #define DIO A1 // DIO модуля подключен к А1 ардуино (через эти пины реализуется IIC) TM1637 tm1637(CLK, DIO);//Объявляем сам модуль int8_t DispMSG[] = {0, 0, 0, 0}//Массив на отображение int P=1234; int temp; void setup() { tm1637.init();//Инициализация модуля } void loop() { P=1234; temp=P; //Последовательно заполняем массив остатками от деления DispMSG[3]=temp%10; temp=temp/10; DispMSG[2]=temp%10; temp=temp/10; DispMSG[1]=temp%10; temp=temp/10; DispMSG[0]=temp%10; temp=temp/10; //Выводим массив на дисплей tm1637.display(DispMSG); delay(1000);//Задержка необходима, так как IIC модуля работает гораздо медленнее, чем Arduino :) delay(3000);//Ждем три секунды ,чтобы вывести следующее число P=34; temp=P; //Последовательно заполняем массив остатками от деления DispMSG[3]=temp%10; temp=temp/10; DispMSG[2]=temp%10; temp=temp/10; DispMSG[1]=temp%10; temp=temp/10; DispMSG[0]=temp%10; temp=temp/10; //Выводим массив на дисплей tm1637.display(DispMSG); delay(1000);//Задержка необходима, так как IIC модуля работает гораздо медленнее, чем Arduino :) delay(3000);//Ждем три секунды ,чтобы вывести следующее число }Далее, если данный код будет у вас работать - вставить вывод конкретно значения давления P - дело техники.
Касательно библиотеки - у меня всё компилится. Не знаю, здесь можно файлы передавать (в смысле библиотеку), или нет...
const uint8_t CLK = 11; // Clock на 11 ноге const uint8_t DAT = 10; // Data на 10 ноге TM1637 Display(CLK, DAT); // часы с двоеточием void setup(){ Display.SetBrightness(7); Display.Print("Err0"); delay(3000); Display.Print(100); delay(3000); Display.PrintTime(20,46); for (uint8_t i=0; i<10; i++){ Display.ToggleColon(); delay(500); } delay(3000); Display.PrintDeg(-15); delay(5000); Display.Clear(); }void loop(){}Arduino: 1.6.6 (Windows 7), Плата:"Arduino/Genuino Uno" DetSimen при компиляции TM1637.ccp выдаёт такую ошибку. как исправить. C:\Users\08A4~1\AppData\Local\Temp\buildd1a1442ca84ccb5425f0ed64563a8ef5.tmp\sketch\TM1637.cpp: In member function 'void TM1637::Print(int, uint8_t)': TM1637.cpp:189: error: invalid conversion from 'void*' to 'char*' [-fpermissive] char *buf = alloca(16); ^ C:\Users\08A4~1\AppData\Local\Temp\buildd1a1442ca84ccb5425f0ed64563a8ef5.tmp\sketch\TM1637.cpp: At global scope: TM1637.cpp:199: error: default argument given for parameter 2 of 'void TM1637::Print(double, uint8_t)' [-fpermissive] void TM1637::Print(const double AValue, const uint8_t APrecision = 1) { ^ In file included from C:\Users\08A4~1\AppData\Local\Temp\buildd1a1442ca84ccb5425f0ed64563a8ef5.tmp\sketch\TM1637.cpp:1:0: TM1637.h:86: error: after previous specification in 'void TM1637::Print(double, uint8_t)' [-fpermissive] void Print(const double AValue, const uint8_t APrecision = 1); ^ In file included from C:\Users\08A4~1\AppData\Local\Temp\buildd1a1442ca84ccb5425f0ed64563a8ef5.tmp\sketch\TM1637.cpp:3:0: C:\Users\08A4~1\AppData\Local\Temp\buildd1a1442ca84ccb5425f0ed64563a8ef5.tmp\sketch\TM1637.cpp: In member function 'void TM1637::Print(double, uint8_t)': TM1637.cpp:201: error: invalid conversion from 'void*' to 'char*' [-fpermissive] char *buf = alloca(12); ^ C:\Users\08A4~1\AppData\Local\Temp\buildd1a1442ca84ccb5425f0ed64563a8ef5.tmp\sketch\TM1637.cpp: In member function 'void TM1637::PrintDeg(int8_t)': TM1637.cpp:249: error: invalid conversion from 'void*' to 'char*' [-fpermissive] char *buf = alloca(10); ^ exit status 1 invalid conversion from 'void*' to 'char*' [-fpermissive]щас поправлю
Upd. Выклалъ. Пробуй.
щас поправлю
Upd. Выклалъ. Пробуй.
ОК заработало, но если до сетапа раскоментировать какую либо из этих строк
то идет ошибка
Arduino: 1.6.6 (Windows 7), Плата:"Arduino/Genuino Uno" tm1637:4: error: 'Clock' was not declared in this scope TM1637 Display(Clock, Data, enTM1637Type::Time); //для индикатора СЃ двоеточ ^ tm1637:4: error: 'Data' was not declared in this scope TM1637 Display(Clock, Data, enTM1637Type::Time); //для индикатора СЃ двоеточ ^ tm1637:7: error: redefinition of 'TM1637 Display' TM1637 Display(CLK, DAT); // часы СЃ двоеточием ^ tm1637:4: error: 'TM1637 Display' previously declared here TM1637 Display(Clock, Data, enTM1637Type::Time); //для индикатора СЃ двоеточ ^ exit status 1 'Clock' was not declared in this scopeЭти строки там только для примера. Не нада их раскомментировать
Эти строки там только для примера. Не нада их раскомментировать
ОК, пойду заряжать колону, будешь в Чите угощу.
дисплейчика с точками нет, проверил только на часовом
Привет, не могу запустить для проверки дисплей в ардуино TM1637, разные библиотеки пробовал, ничего не получается, при компиляции ошибка exit status 1'class TM1637' has no member named 'init'инициализации, третий день мучаюсь, разобраться не могу(
сам скетч:
Программу правильно вставьте.
Привет, не могу запустить для проверки дисплей в ардуино TM1637, разные библиотеки пробовал, ничего не получается, при компиляции ошибка exit status 1'class TM1637' has no member named 'init'инициализации
Используй правильную библиотеку, https://github.com/DetSimen/TM1637 там нет никаких init(). Все остальные удали, или перемести на другой диск на время, чтоб можно было быстро вернуть взат.
Привет, не могу запустить для проверки дисплей в ардуино TM1637, разные библиотеки пробовал, ничего не получается, при компиляции ошибка exit status 1'class TM1637' has no member named 'init'инициализации
Используй правильную библиотеку, https://github.com/DetSimen/TM1637 там нет никаких init(). Все остальные удали, или перемести на другой диск на время, чтоб можно было быстро вернуть взат.
Так init прописан в самой программе, я не могу её скомпилировать, эту библиотеку тоже пробовал, не получается, я хочу лишь пока проверить дисплей, как он работает, в теме новичок, но код я не менял, по ютубу пробовал по нескольким видео, не работает дисплей, другие скетчи нормально прошиваются.
/* // нумерация портов слева направо! disp.display(port, num); // вывести цифру num (0-9) в порт port (0-3) disp.display(ARRAY); // вывести ARRAY, где ARRAY - массив из 4х цифр ( byte ARRAY[4] = {0, 1, 2, 3}; ) disp.displayByte(port, Byte); // вывести символ Byte в порт port (0-3) (Byte вида 0x7d) disp.displayByte(ARRAY_BYTE); // ARRAY_BYTE - массив кодов ( 0x7d, 0x7d, 0x7d, 0x7d ) disp.displayByte(Byte1, Byte2, Byte3, Byte4); // вывести побайтово // для вывода некоторых букв доступен вывод вида _A, _b, _h. Полный список смотри в TM1637.h disp.displayInt(value); // вывести 1-4 значное число disp.displayIntZero(value); // вывести 1-4 значное число с нулями СЛЕВА // бегущая строка символов из массива arrayBytes, число символов sizeof(arrayBytes), интервал delay_time в миллисекундах disp.runningString(arrayBytes, sizeof(arrayBytes), delay_time); disp.point(state); // включить/выключить двоеточие (1 и 0 соответственно) disp.clearDisplay(); // очистить дисплей disp.set(7); // яркость, 0 - 7 (минимум - максимум) */ #include "TM1637.h" #define CLK 3 #define DIO 2 TM1637 disp(CLK, DIO); byte i = 0; void setup() { Serial.begin(9600); disp.init(); // инициализация disp.set(7); // яркость, 0 - 7 (минимум - максимум) } void loop() { byte welcome_banner[] = {_t, _E, _S, _t, _empty, _empty, _O, _F, _empty, _d, _i, _S, _P, _L, _a, _y}; disp.runningString(welcome_banner, sizeof(welcome_banner), 300); delay(700); disp.clearDisplay(); disp.displayByte(0x38, 0x79, 0x5e, 0x6d); // вывод символов и текста delay(2000); disp.clearDisplay(); disp.displayByte(_L, _E, _d, _S); // вывести LEdS, используя буквы из библиотеки delay(2000); disp.clearDisplay(); i = 12; // вывести переменную с нулями слева disp.displayIntZero(i); delay(2000); disp.clearDisplay(); i = 48; // вывести переменную без нулей слева disp.displayInt(i); delay(2000); disp.clearDisplay(); for (int j = 0; j < 1235; j += 5) { // простой счётчик 0-1235 без нулей disp.displayInt(j); delay(20); } disp.clearDisplay(); for (byte i = 0; i <= 3; i++) { // вывод цифр 0-9 по очереди в каждый порт for (byte j = 0; j <= 9; j++) { disp.display(i, j); delay(100); } disp.clearDisplay(); } disp.clearDisplay(); for (byte j = 0; j < 10; j++) { disp.displayByte(0x64, 0x64, 0x64, 0x64); delay(100); disp.displayByte(0x49, 0x49, 0x49, 0x49); delay(100); disp.displayByte(0x52, 0x52, 0x52, 0x52); delay(100); } for (byte j = 0; j < 10; j++) { disp.displayByte(0x24, 0x24, 0x24, 0x24); delay(100); disp.displayByte(0x09, 0x09, 0x09, 0x09); delay(100); disp.displayByte(0x12, 0x12, 0x12, 0x12); delay(100); } disp.clearDisplay(); for (byte j = 0; j < 5; j++) { disp.displayByte(1, 0x01); delay(100); disp.displayByte(1, 0x02); delay(100); disp.displayByte(1, 0x40); delay(100); disp.displayByte(1, 0x10); delay(100); disp.displayByte(1, 0x08); delay(100); disp.displayByte(1, 0x04); delay(100); disp.displayByte(1, 0x40); delay(100); disp.displayByte(1, 0x20); delay(100); } disp.clearDisplay(); for (byte j = 0; j < 255; j++) { // вывести 0-99 счётчик с нулями слева disp.displayByte(1, j); delay(200); } disp.clearDisplay(); delay(1000); }Библиотека не та подключена.
привет, у меня тоже проблема с подключением дисплея тм1637, ошибка при компилировании, я так понял инициализация дисплея не проходит, в чем может быть причина?
Дословно такая ошибка:exit status 1
Программа для проверки -> пост №9 только не забудь добавить void loop () {}
Ссылка на библиотечку -> пост №7
СПАСИБО ОГРОМНОЕ, ЗАРАБОТАЛО!!!! осталось дописать в конце
voidloop(){}const uint8_t CLK = 11; // Clock на 11 ноге const uint8_t DAT = 10; // Data на 10 ноге TM1637 Display(CLK, DAT); // часы с двоеточием void setup(){ Display.SetBrightness(7); Display.Print("Err0"); delay(3000); Display.Print(100); delay(3000); Display.PrintTime(20,46); for (uint8_t i=0; i<10; i++){ Display.ToggleColon(); delay(500); } delay(3000); Display.PrintDeg(-15); delay(5000); Display.Clear(); }Единственное это нахимичил с библиотеками и их местом поиска #include <TM1637.h> #include "TM1637.h" //TM1637 Display(Clock, Data, enTM1637Type::Time); //для индикатора с двоет const uint8_t CLK = 11; // Clock на 11 ноге const uint8_t DAT = 10; // Data на 10 ноге TM1637 Display(CLK, DAT); // часы с двоеточием void setup(){ Display.SetBrightness(7); Display.Print("Err0"); delay(3000); Display.Print(100); delay(3000); Display.PrintTime(20,46); for (uint8_t i=0; i<10; i++){ Display.ToggleColon(); delay(500); } delay(3000); Display.PrintDeg(-15); delay(5000); Display.Clear(); } void loop(){}Ну, начт, нальешь при случае
У кого непонятки, вот вам для поиска, там и описаловка идёт
Ардуино для школьников. Индикатор на TM1637, LCD 1602 HD44780
Ну, начт, нальешь при случае
Без проблем, будеш в Перми - стучись.
Вопщем реально раздраконил эту тему, СПАСИБО всем!!!