我写了一些代码来驱动外部7段显示使用Arduino Uno板。当在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的只是空白。我在名为int test()
的.cpp文件中运行了一个测试函数,它只返回了一个任意数字,并且运行正常。这让我认为这个包含了他们应该的工作,并且所有三个文件都在进行通信。我在想,出于某种原因,由于某种原因,它并不承认#include "Arduino.h"
,这正在破坏我的digitalWrite()
和pinMode
功能。任何人都可以为我阐明这一点吗?谢谢。
作为Segment和全局常量的成员变量,您都有一个通用g。由于所有对这些参数的引用都在类成员函数中,所以C++将使用未初始化的成员变量。 –