c++ - Arduino 使用 Visual Studio 在另一个库中包含一个库
问题描述
大家好,我的项目需要帮助。
我不明白如何将一个库包含到我为我的项目构建的另一个库中。我正在编写一个库 Encoders.h 能够控制我的编码器的运动和按钮点击。为了阅读机芯,我使用了著名的 Encoder.h 库,您可以在此处找到。
这是我的代码
编码器.h
#ifndef ENCODER_h
#define ENCODER_h
#include <Arduino.h>
#include <Timer.h>
#include <joyconf.h>
#include <Encoder.h>
class Encoders_ {
private:
// one encoder input
int _clk;
// the other encoder input
int _dt;
// click push button
int _sw;
// read state of sw
int _sw_read;
// last sw state
int _sw_last_state;
// current state encoder pin A
int _current_clk;
// current state encoder pin B
int _current_dt;
// last state pin A
int _last_clk;
// last state pin B
int _last_dt;
// last direction state
int _last_res;
//last saved direction result
int _res;
//ready to encode?
int _ready;
// timer class to debounce clicks
Timer_ _Timer1;
// timer class to debounce directions
Timer_ _Timer2;
// set pinA and pinB in the external lib
Encoder _Myenc(uint8_t pina, uint8_t pinb);
//Encoder _Myenc;
public:
/**
* to initialize the encoder with input pins and click pin.
* All af them are digital inputs.
*/
Encoders_(int clk, int dt, int sw);
/**
* give the direction (one step change)
*
* @param how long time give the same output before reset to 0 output
*
* @return 1 if clockwise (right) or 0 if no changes or -1 if anticlock-wise (left)
*/
int direction(long out_t);
/**
* return the SW push button state. It is debounced to avoid false clicks.
* Please check the mechanical condition of every encoder.
* Some encoder can need longer delay.
*
* @param long deboucing time
*
* @return int 0 LOW (clicked) or 1 HIGH (released).
*/
int click(long deb_time);
/**
* return the last direction state of the encoder
*
* @return int 1 (right), -1 (left).
*/
int lastState();
};
#endif
编码器.cpp
#include <Encoders.h>
#include <Encoder.h>
Encoders_::Encoders_(int clk, int dt, int sw){
_Myenc(clk,dt);
_clk = clk;
_dt = dt;
_sw = sw;
_last_clk = HIGH;
_last_dt = HIGH;
_current_clk = HIGH;
_current_dt = HIGH;
_sw_last_state = HIGH;
_last_res = 0;
_ready = 0;
}
int Encoders_::direction(long out_t){
long newPosition = _Myenc.read();
newPosition;
}
int Encoders_::click(long deb_time){
// read the state of the switch into a local variable:
// normal open state is HIGH
_sw_read = digitalRead(_sw);
/*if(_sw_read) Serial.println("HIGH");
else Serial.println("LOW");*/
/*save the state before timer check to not stuck on a
specific state*/
_sw_last_state = _sw_read;
//Serial.println(_sw_last_state);
if(_Timer1.expired(deb_time)){
_Timer1.update();
if (!_sw_read){
return 0;
} else {
return 1;
}
}
return _sw_last_state;
}
int Encoders_::lastState(){
return _res;
}
请注意,带有“s”的编码器是我的库,没有“s”的是外部库。
在long newPosition = Myenc.read();
我收到错误“'Myenc' 未在此范围内声明”和“表达式必须具有类类型”
我不明白如何包含编码器库并使用两个参数对其进行初始化。我遵循与 Timer.h 库相同的逻辑,但不一样(在 Timer_ 中,我的构造函数为空,这使一切变得简单)
非常感谢你帮助我。
解决方案
_Myenc
是一个函数,而不是一个对象。您可能打算写_Myenc().read()
而不是_Myenc.read();
.
推荐阅读
- android - 应用程序在后台时未接收位置更新
- javascript - Laravel 全局 js ReferenceError
- deep-learning - 越来越多的使用 DCGAN 生成的人工图像
- python - Python 从特定的字符串行开始写?
- javascript - 在 Ramda.js 中编写特定对象映射器的更简洁方法
- node.js - DialogFlow Fulfillment 不回复 Twilio
- python - 如何在树莓派的多线程中使用opencv“detectMultiScale()”函数
- react-native - Expo Developer Tools 与 Expo CLI 断开连接。找不到模块'./validators/Presets'
- php - 带有 exec() 函数的 PHP Cron 作业
- reactjs - 使用 react-testing-library 测试 mxGraph