库编译,但不会运行
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只是空白。我在名为int test()
的.CPP文件中运行了一个测试功能,该文件刚刚返回了一个任意号码,并且效果很好。这使我认为其中包括的运作方式是应有的,并且所有三个文件都在交流。我认为由于某种原因,由于某种原因,它没有识别#include "Arduino.h"
,这杀死了我的digitalWrite()
和pinMode
功能。有人可以为我提供一些启示吗?谢谢。
正如布莱恩(Brian)在评论中指出的那样,您有变量a,b,c,d,e,f,g,g,g和dot在您的细分市场中定义为私人成员,然后重新定义它们作为全球常数。当在段成员函数中调用PinMode()和DigitalWrite()时,功能使用尚未初始化的类成员变量,而不是您已经初始化的全局变量。
在您的段构造函数中,在调用pinmode()之前,初始化成员变量。
相关文章:
- 如何在linux终端中同时编译和运行c++代码
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 尝试用java代码编译和运行c++代码
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- 编译并运行后,输出未出现在 Visual Studio 代码中
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- 运行编译的 a.out 后出现分段错误(核心转储)错误
- 如果使用 PHP 运行编译,则无法分配内存
- msys 和 tdm-gcc:配置错误 - 无法运行 C 编译的程序
- Eclipse CDT - 如何在外部控制台 (cmd.exe) 中运行编译.exe
- 无法在 OSX 上运行编译的 C++ 可执行文件,适用于 Debian
- Linphone编译-配置:错误:无法运行C编译的程序
- 错误0xc000007b:试图在没有VS的计算机上运行编译为Release x86的C++.exe文件
- 在windows上使用oud cmd运行g++编译的文件
- Eclipse CDT 无法在 Windows 中运行编译的可执行文件,并显示错误"terminated, exit value: <some number>"
- 运行编译的c++代码与Rcpp
- "Cannot execute binary file"在 Ubuntu for Windows 平台上使用 Eclipse 运行编译的 c++ 程序时
- 如何在未安装 CUDA 工具包的机器上运行编译的 CUDA 代码?
- visualstudio2010-尝试运行/编译我的c++程序