Нет связи с *.cpp файлом

Niko004
Offline
Зарегистрирован: 19.01.2021

Всем привет!

Решил создать проект

Хочу связать датчик температуры с 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
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!!!!!!
 

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Niko004 пишет:

выводит ошибку: 

project:21:18: error: 'lm' was not declared in this scope
lm - А его нет в Вашей программе. Видать не то опубликовали. ИМХО.
brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А чего тут помогать ? 

Как считаешь 

TempSens:: getTemp(){

Эта функция что то должна возвращать ?

Чем отличаются две функции

1. TempSens:: getTemp(){

2. int TempSens:: getTemp(){

Считаешь это одно и тоже ?

Кстати это вопросы скорее для песочницы....

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

brokly пишет:

Кстати это вопросы скорее для песочницы....

Золотые слова...

Хей, тычер, извините модератор, переместите, если не сложно.

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

Niko004 пишет:

Хочу связать датчик температуры с LCD1602

Но сделал это при помощи библиотек и классов:

Лучше обычной верёвкой.

Niko004
Offline
Зарегистрирован: 19.01.2021

*************************

Niko004
Offline
Зарегистрирован: 19.01.2021

дело не классах и объектах

даже если создать простые функции, а их реализацию поместить в *.cpp то функция будет вызываться, но то что в ней прописано просто не будет работать:

вот в том же дисплее: его инициализацию я перевёл в *.cpp(объявление функции находится в *.h файле), а то что прописано в функции не работает, нельзя выключить дисплей, вывести текст

Niko004
Offline
Зарегистрирован: 19.01.2021

этот вопрос был именно по программированию

или проблема в файлах? подскажите кто знает!

может нужно изменить что-то в файлах настройки Ардуино?

 

Niko004
Offline
Зарегистрирован: 19.01.2021

Помогите пожалуйста

 

Niko004
Offline
Зарегистрирован: 19.01.2021

'lm' это объект

его же просто пишут рядом с названием класса?

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Niko004 пишет:

дело не классах и объектах

даже если создать простые функции, а их реализацию поместить в *.cpp то функция будет вызываться, но то что в ней прописано просто не будет работать:

вот в том же дисплее: его инициализацию я перевёл в *.cpp(объявление функции находится в *.h файле), а то что прописано в функции не работает, нельзя выключить дисплей, вывести текст

Ничего подобного.

Если написать правильно, все работает. Просто у Вас не прототип и функция, а две разные одноименные функции прописаны в *.h и *.cpp. Вы подключаете *.h, а в нем функция пустая - ничего не делает. Что Вы и наблюдаете. 

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

Niko004 пишет:

даже если создать простые функции, а их реализацию поместить в *.cpp то функция будет вызываться, но то что в ней прописано просто не будет работать:

У всех, кроме Вас, работает.

Сделайте маленькую (в одну строку) функцию и маленький - в три-пять строк скетч. Поместите эту функцию в отдельный файл и попробуйте вызвать. Безо всяких дисплеев и прочей хрени в которой в самой по себе есть до хрена чему не работать.

Если не получится, публикуйте этот код. С ним гораздр быстрее и проще разобраться, чем с Вашими дисплеями.

Niko004
Offline
Зарегистрирован: 19.01.2021

окей попробую

Niko004
Offline
Зарегистрирован: 19.01.2021

я понял ошибку

оказывается *.cpp файл вообще не подключается

я создал новый мини тестовый проект и создал файлы в таком виде:

Папка проекта:

           файл.ino

           папка_библиотеки:

                      файл_библ.h

                      файл_библ.cpp

 

 

в файле *.cpp я написал #include "файл_библ.h"

и всё равно функция возвращает ноль(пустоту, ничего не делает)

в чём может быть ошибка?

 

 

Niko004
Offline
Зарегистрирован: 19.01.2021

попробовал наоборот к *.h файлу подключить *.cpp файл(#include *.cpp)

сейчас компилятор видит *.cpp

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

Niko004 пишет:

в чём может быть ошибка?

В строе №13 кода Вашего нового проекта, видимо.

Niko004
Offline
Зарегистрирован: 19.01.2021

а это нормально вообще делать объявление функции и его действие в файле *.cpp? И подключать *.cpp к *.h, а не наоборот?

Niko004
Offline
Зарегистрирован: 19.01.2021

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

 

Niko004
Offline
Зарегистрирован: 19.01.2021

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

b707
Offline
Зарегистрирован: 26.05.2017

вы ответы читаете вообще? Или только спрашиваете? вам в #10 обьяснили, в чем проблема , а вы продолжаете тупить.

А так, конечно мы лучшие. Только то, что мы лучшие - вовсе не значит что кто-то будет тратить кучу времени, чтобы три раза обьяснять одно и то же.

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

Niko004 пишет:

а это нормально вообще делать объявление функции ...

А это нормально вообще, что Вы задаёте вопрос по коды не приводя кода? Вам намёк в #15 ничего не подсказал?