[英]Is it possible to include a library from another library using the Arduino IDE?
[英]Arduino include a library inside another library using 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' 未在此范圍內聲明”和“表達式必須具有 class 類型”
我不明白如何包含編碼器庫並使用兩個參數對其進行初始化。 我遵循與 Timer.h 庫相同的邏輯,但不一樣(在 Timer_ 中,我的構造函數為空,這使一切變得簡單)
非常感謝你幫助我。
_Myenc
是 function,而不是 object。 您可能打算寫_Myenc().read()
而不是_Myenc.read();
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.