未在此范围内声明-Arduino
Not declared in this scope - Arduino
当我尝试我制作的代码时遇到了问题:
int ledStart = 30;
boolean commonHigh = true;
void setup() {
Serial.begin(115200);
SetTimer(0, 0, 10); // 10 seconds
StartTimer();
for (int i =0;i<9;++i) {
pinMode (i, OUTPUT);
}
pinMode(9, INPUT);
}
int counter = 0;
bool go_by_switch = true;
int last_input_value = LOW;
void loop() {
// put your main code here, to run repeatedly:
number++;
delay(1000);
if(number>9)
number=0; // If number is bigger than 9, then number is 0
}
// 0 6
// pins A B C D E F G
int ledpins[] = {12, 10, 7, 4, 2, 13, 8};
int pincnt = 7;
int number = 0;
int sevenseg[10][7] = {
// A, B, C, D, E, F, G
{1, 1, 1, 1, 1, 1, 0}, // A-F shall light. G shall not light.
{0, 1, 1, 0, 0, 0, 0}, // A shall not light. B and C shall light.
/*0*/
/*1*/
/*2*/
/*3*/
/*4*/
/*5*/
/*6*/
/*7*/
/*8*/
{1, 1, 1, 1, 1, 1, 1, 1}
if(go_by_switch) {
int switch_input_value = digitalRead(9);
if(last_input_value == LOW && switch_input_value == HIGH) {
counter = (counter + 1) % 10;
}
last_input_value = switch_input_value;
}
else {
delay(500);
counter = (counter + 1) % 10;
}
writeNumber(counter);
}
for (int p=0; p<pincnt; p++) {
pinMode (ledpins[P], OUTPUT);
//It will count from 0 to smaller than 7. {12, 10, 7, 4, 2, 13, 8}; It will count from 0 to smaller than 7.
// 0 1 2 3 4 5 6
digitalWrite(ledpins[P], LOW);
}
for (int x=0; x<pincnt; x++); { //x is smaller than 7. The point is to bring out one of the patterns that will show on the display
if (sevenseg[number][x]) // sevenseg = 7-segment display
digitalWrite (ledpins[x], HIGH); // If it is 1, then there will be light.
else
digitalWrite (ledpins[x], LOW); // If it is 0, then there will not be light.
// A
//F B
// G
//E C
// D
我得到的错误消息是:
_28.10.2015.ino:在函数"void setup()"中:
_28.10.2015.ino:7:20:错误:未在此范围中声明"SetTimer"
_28.10.2015.ino:8:14:错误:未在此作用域中声明"StartTimer"
_28.10.2015.ino:在函数"void loop()"中:
_28.10.2015.ino:22:1:错误:未在此范围中声明"number"
_28.10.2015ino:在全球范围内:
_28.10.2015.ino:52:1:错误:在"if"之前应为"}"
_28.10.2015.ino:52:1:错误:'int[7]'的初始化程序太多
_28.10.2015.ino:52:1:错误:应为","或";"在"if"之前
Feil ved kompilering。
(Feil ved kompilering=编译(挪威语)时出错
问题是,您没有声明这些函数存在错误,也没有声明"number"变量。你需要申报它们,比如:
int number;
void StartTimer( )
{
// function code;
}
或者像@Neil Locketz说的那样,包含一个包含这些函数的".h"。
此代码存在不少问题。
- 我首先注意到的一件事是,用
}
关闭loop()
函数,然后编写更多根本不属于任何函数的代码 - 此外,正如@Raul所指出的,您定义了一个数组
sevenseg[][]
,但不会以分号结束语句 - 上一个
for()
循环缺少右大括号}
- 上一个
for()
循环的大括号前面有一个分号。它不应该在那里 - 您在
loop()
函数中使用了变量number
,但您在使用它之后定义了number
是什么。您必须在使用它之前定义一个变量 - 您可以在
setup()
函数中调用SetTimer()
和StartTimer()
,但这些函数尚未定义。这是因为1,您没有包括定义这些函数的库,或者2,您没有自己定义这些函数。如果您的问题是1,那么我认为您打算使用#include <SimpleTimer.h>
。请注意,您还必须安装该库。关于如何下载并将其添加到Arduino库的说明在这里。最后,您必须创建一个这样的计时器对象:SimpleTimer timer;
,然后您可以调用这样的函数timer.SetTimer(your-parameters-here);
我可能还错过了其他事情,但这应该给你一个起点。看起来你已经创建了很多代码,而没有测试其中是否有任何一个有效。我建议你一步一个脚印。。。编写一个逻辑块,看看它是否有效,然后继续编写下一个想法。这看起来可能需要更多的时间,但最终,这通常是一种更快的编程方式。
我要提出的另一个建议是在使用变量的函数中定义变量。像您所做的那样将所有变量设置为"全局"并不是编写代码的好方法。例如:
void loop()
{
static int number = 0;
number++;
delay(1000);
if (number > 9)
{
number = 0;
}
}
注意关键字static
的使用。这将确保存储在number
中的值在函数结束时不会消失。换句话说,下次调用loop()
函数时,该值仍将存在。
最后,如果我不得不猜测你试图实现什么,我认为你的代码应该看起来更像这样。看起来你好像在尝试不同的东西,所以我在那里留下了一些原始代码的代码片段,这些代码实际上什么都没做:
void setup() {
Serial.begin(115200);
for (int i = 0; i < 9; ++i)
{
pinMode (i, OUTPUT);
}
pinMode(9, INPUT);
}
void loop() {
static int counter = 0;
static int last_input_value = LOW;
static bool go_by_switch = true;
if(go_by_switch)
{
int switch_input_value = digitalRead(9);
if(last_input_value == LOW && switch_input_value == HIGH)
{
counter = (counter + 1) % 10;
}
last_input_value = switch_input_value;
}
else
{
delay(500);
counter = (counter + 1) % 10;
}
writeNumber(counter);
}
void writeNumber (int count)
{
#define PIN_COUNT 7
#define NUM_OF_SEGMENTS 7
#define NUM_OF_NUMBERS 10
// 0 6
// pins A B C D E F G
static const int ledpins[PIN_COUNT] = {12, 10, 7, 4, 2, 13, 8};
static const int sevenseg[NUM_OF_NUMBERS][NUM_OF_SEGMENTS] =
{
// A B C D E F G
{1, 1, 1, 1, 1, 1, 0}, //0
{0, 1, 1, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1}, //2
{1, 1, 1, 1, 0, 0, 1}, //3
{0, 1, 1, 0, 0, 1, 1}, //4
{1, 0, 1, 1, 0, 1, 1}, //5
{1, 0, 1, 1, 1, 1, 1}, //6
{1, 1, 1, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 1, 0, 1, 1}, //9
};
static int number = 0;
int i;
number++;
delay(1000);
if(number >= NUM_OF_NUMBERS)
{
number = 0;
}
/* Clear all segments of the 7-segment display. */
for (i = 0; i < PIN_COUNT; i++)
{
pinMode (ledpins[i], OUTPUT);
digitalWrite(ledpins[i], LOW);
}
/* Set the 7-segment display with the current number. */
for (i = 0; i < PIN_COUNT; i++)
{
if (sevenseg[number][i]) // sevenseg = 7-segment display
digitalWrite (ledpins[i], HIGH); // If it is 1, then there will be light.
else
digitalWrite (ledpins[i], LOW); // If it is 0, then there will not be light.
}
}
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- Arduino C++在构造函数中用参数声明对象数组
- 如何使用自定义类型声明Arduino数组?
- arduino void函数声明
- 在arduino中声明字符串的问题
- Arduino-setup()中声明的变量不在函数范围内
- Arduino 错误:ISO C++禁止声明无类型的'LinkedListItem'
- 错误:将整数设置为 0 时,未在此范围内声明'null' - 光子/Arduino C++
- 未在此范围内声明-Arduino
- Arduino类中未声明的字符串
- Arduino FSR 阅读草图 - 模拟阅读' 未在此范围内声明
- 如何在Arduino中进行结构的前向声明
- 声明函数指针c++ arduino 1.6.11
- 如何为Arduino代码声明C++函数