簡體   English   中英

庫可以編譯,但是不會運行

[英]Library compiles, but won't run

我編寫了一些代碼,以使用Arduino Uno板驅動外部7段顯示器。 當在Arduino IDE中作為.ino文件運行時,它可以完美運行。 然后,我決定將其轉換為庫以供將來使用。 我創建了.h和.cpp文件,但是當我嘗試使用以前與.ino相同的功能時,它們現在將無法工作。 這是我的代碼:

.ino

#include <Segment.h>

Segment seg;

void setup() {
}

void loop() {
  seg.display(1);
}

。H

#ifndef Segment_h
#define Segment_h
#include "Arduino.h"

class Segment
{
  public:
    Segment();
    void display(int i);
  private:
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    int g;
    int dot;
};
#endif

的.cpp

#include "Segment.h"

  const int a=6;
  const int b=7;
  const int c=8;
  const int d=10;
  const int e=11;
  const int f=13;
  const int g=12;
  const int dot=9;

Segment::Segment()
{
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(dot, OUTPUT);
}

void Segment::display(int i)
{
  if (i==0){
    digitalWrite(a, LOW);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);   
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(dot, HIGH);
  }  

  else if (i==1){
    digitalWrite(a, HIGH);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);   
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(dot, HIGH);
  }

  else if (i==2){
    digitalWrite(a, LOW);   
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);   
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    digitalWrite(dot, HIGH);
  }

  else if (i==3){
    digitalWrite(a, LOW);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, HIGH);   
    digitalWrite(f, HIGH);
    digitalWrite(g,LOW);
    digitalWrite(dot, HIGH);
}
  else if (i==4){
    digitalWrite(a, HIGH);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);   
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(dot, HIGH);
  } 
  else if (i==5){
    digitalWrite(a, LOW);   
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, HIGH);   
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(dot, HIGH);
  }
  else if (i==6){
    digitalWrite(a, LOW);   
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);   
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(dot, HIGH);
  }
  else if (i==7){
    digitalWrite(a, LOW);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);   
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(dot, HIGH);
  }
  else if (i==8){
    digitalWrite(a, LOW);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);   
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(dot, HIGH);
  }
  else if (i==9){
    digitalWrite(a, LOW);   
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);   
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(dot, HIGH);
    }

  else if (i==10){
    digitalWrite(a, HIGH);   
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);   
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(dot, LOW);
  }

  else if (i==11){
    digitalWrite(a, HIGH);   
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);   
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(dot, HIGH);
  }
}

編譯器沒有給出錯誤,但SSD只是空白。 我在.cpp文件中運行了一個名為int test()的測試函數,該函數僅返回一個任意數字,並且工作正常。 這使我認為include文件可以正常工作,並且所有三個文件都可以通信。 我在想由於某種原因它無法識別#include "Arduino.h" ,這會殺死我的digitalWrite()pinMode函數。 有人可以幫我一下嗎? 謝謝。

正如Brian在評論中指出的那樣,您在Segment類中將變量a,b,c,d,e,f,g和點定義為私有成員,並將它們重新定義為全局常數。 在Segments成員函數中調用pinMode()和digitalWrite()時,這些函數將使用尚未初始化的類成員變量,而不是已初始化的全局變量。

在您的Segment構造函數中,在調用pinMode()之前,初始化您的成員變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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