Нет связи с *.cpp файлом
- Войдите на сайт для отправки комментариев
Втр, 19/01/2021 - 22:06
Всем привет!
Решил создать проект
Хочу связать датчик температуры с LCD1602
Но сделал это при помощи библиотек и классов:
Основной *.ino файл:
#include "libraries\display\display.h" #include "libraries\lm_35\lm_35.h" TempSens lm(0); void setup() { displayInit(); Serial.begin(9600); } void loop() { Serial.println(lm.getTemp()); }
display.h:
#pragma once #include <Arduino.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void displayInit(){}
display.cpp:
#include "display.h" #include <Arduino.h> void displayInit(){ lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hello"); }
lm_35.h:
#pragma once #include <Arduino.h> class TempSens { public: TempSens(byte pin); int getTemp(); private: byte _pin; }
lm_35.cpp:
#include "lm_35.h" #include <Arduino.h> TempSens:: TempSens(byte pin){_pin = pin;} TempSens:: getTemp(){ int val; val = analogRead(_pin); val = (val * 125) >> 8; return val; }
Вот так вот
Сначала я делал в lm_35.h/.cpp только функции
Но вот беда: функция возвращала 0, с функцией из cpp ни как не связывалась(хотя компилятор видит ошибки в .cpp)
если функции перенести в .h файл то всё работает.
Та же проблема в display.*
Дисплей не инициализируется, текст не выводится, а если перенести реализацию функции displayInit() в .h файл то всё работает
Ещё одна проблема:
TempSens lm(0);
выводит ошибку:
project:21:18: error: 'lm' was not declared in this scope
exit status 1
expected initializer before 'lm'
(lm) это объект класса TempSens
но что то не так
хотя в интернете люди пишут точно так и у них happyend
!Если что библиотеки находятся в папке libraries в папке с файлом ino
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!!!!!!
выводит ошибку:
А чего тут помогать ?
Как считаешь
Эта функция что то должна возвращать ?
Чем отличаются две функции
Считаешь это одно и тоже ?
Кстати это вопросы скорее для песочницы....
Кстати это вопросы скорее для песочницы....
Золотые слова...
Хей, тычер, извините модератор, переместите, если не сложно.
Хочу связать датчик температуры с LCD1602
Но сделал это при помощи библиотек и классов:
Лучше обычной верёвкой.
*************************
дело не классах и объектах
даже если создать простые функции, а их реализацию поместить в *.cpp то функция будет вызываться, но то что в ней прописано просто не будет работать:
вот в том же дисплее: его инициализацию я перевёл в *.cpp(объявление функции находится в *.h файле), а то что прописано в функции не работает, нельзя выключить дисплей, вывести текст
этот вопрос был именно по программированию
или проблема в файлах? подскажите кто знает!
может нужно изменить что-то в файлах настройки Ардуино?
Помогите пожалуйста
'lm' это объект
его же просто пишут рядом с названием класса?
дело не классах и объектах
даже если создать простые функции, а их реализацию поместить в *.cpp то функция будет вызываться, но то что в ней прописано просто не будет работать:
вот в том же дисплее: его инициализацию я перевёл в *.cpp(объявление функции находится в *.h файле), а то что прописано в функции не работает, нельзя выключить дисплей, вывести текст
Ничего подобного.
Если написать правильно, все работает. Просто у Вас не прототип и функция, а две разные одноименные функции прописаны в *.h и *.cpp. Вы подключаете *.h, а в нем функция пустая - ничего не делает. Что Вы и наблюдаете.
даже если создать простые функции, а их реализацию поместить в *.cpp то функция будет вызываться, но то что в ней прописано просто не будет работать:
У всех, кроме Вас, работает.
Сделайте маленькую (в одну строку) функцию и маленький - в три-пять строк скетч. Поместите эту функцию в отдельный файл и попробуйте вызвать. Безо всяких дисплеев и прочей хрени в которой в самой по себе есть до хрена чему не работать.
Если не получится, публикуйте этот код. С ним гораздр быстрее и проще разобраться, чем с Вашими дисплеями.
окей попробую
я понял ошибку
оказывается *.cpp файл вообще не подключается
я создал новый мини тестовый проект и создал файлы в таком виде:
Папка проекта:
файл.ino
папка_библиотеки:
файл_библ.h
файл_библ.cpp
в файле *.cpp я написал #include "файл_библ.h"
и всё равно функция возвращает ноль(пустоту, ничего не делает)
в чём может быть ошибка?
попробовал наоборот к *.h файлу подключить *.cpp файл(#include *.cpp)
сейчас компилятор видит *.cpp
в чём может быть ошибка?
В строе №13 кода Вашего нового проекта, видимо.
а это нормально вообще делать объявление функции и его действие в файле *.cpp? И подключать *.cpp к *.h, а не наоборот?
может кто знает какие у компилятора могут быть синдромы?
ладно спасибо всем. Вы лучшие, парни. Буду делать пусть и говнокод но все равно код
вы ответы читаете вообще? Или только спрашиваете? вам в #10 обьяснили, в чем проблема , а вы продолжаете тупить.
А так, конечно мы лучшие. Только то, что мы лучшие - вовсе не значит что кто-то будет тратить кучу времени, чтобы три раза обьяснять одно и то же.
а это нормально вообще делать объявление функции ...
А это нормально вообще, что Вы задаёте вопрос по коды не приводя кода? Вам намёк в #15 ничего не подсказал?