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