簡體   English   中英

Arduino 使用 Visual Studio 在另一個庫中包含一個庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM