未在此范围内声明 - Arduino

Posted

技术标签:

【中文标题】未在此范围内声明 - Arduino【英文标题】:Not declared in this scope - Arduino 【发布时间】:2015-10-28 13:31:54 【问题描述】:

我在尝试这段代码时遇到了问题:

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.2015.ino:在全球范围内:

_28.10.2015.ino:52:1: 错误:在 'if' 之前需要 ''

_28.10.2015.ino:52:1: 错误:'int [7]' 的初始化程序太多

_28.10.2015.ino:52:1: 错误:预期为 ',' 或 ';'在'如果'之前

Feil ved 编译器。

(Feil ved kompilering=编译时出错(挪威语)

【问题讨论】:

看起来您需要包含一些标题。可能类似于顶部的#include 。我不确定,但也请记住,如果您声明全局变量,则必须在使用它们之前声明它们,因此它们应该位于顶部。这就是为什么没有声明“数字” 这行可能是其中一个错误...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您必须使用;结束此语句 我试图格式化你的代码,但它真的很糟糕。请自行格式化此代码,错误会在没有任何帮助的情况下出现。 【参考方案1】:

问题在于您没有声明这些函数会出错,“数字”变量也没有。 您需要声明它们,例如:

int number;

void StartTimer( ) // function code;

或者包括一个包含这些函数的“.h”,就像@Neil Locketz 说的那样。

【讨论】:

【参考方案2】:

这段代码有很多问题。

我注意到的第一件事是你用 关闭了你的loop() 函数,然后你继续编写更多根本不属于任何函数的代码。 另外,正如@Raul 指出的那样,您定义了一个数组sevenseg[][],但您没有以分号结束语句。 您的最后一个 for() 循环缺少右大括号 。 您的最后一个for() 循环在左大括号之前有一个分号。它不应该在那里。 您在loop() 函数中使用变量number,但在使用它之后定义number 是什么。您必须在使用之前定义一个变量。 您在setup() 函数中调用SetTimer()StartTimer(),但这些函数没有定义。那是因为 1,您没有包含定义这些函数的库,或者 2,您没有自己定义这些函数。如果您的问题是 1,那么我假设您打算使用 #include &lt;SimpleTimer.h&gt;。请注意,您还必须安装该库。有关如何下载它并将其添加到您的 Arduino 库的说明是 here。最后,你必须像这样创建一个计时器对象:SimpleTimer timer;,然后你可以像这样调用函数,timer.SetTimer(your-parameters-here);

我可能还遗漏了其他一些事情,但这应该可以为您提供一个起点。看起来您已经创建了很多代码而没有进行测试以查看其中任何一个是否有效。我建议您一次迈出这一步...编写一个逻辑块并查看它是否在之前工作,然后继续编写下一个想法。这似乎需要更多时间,但最终,它通常是一种更快的编程方式。

我提出的另一个建议是在您使用它们的函数中定义变量。像您所做的那样使所有变量“全局”并不是编写代码的好方法。例如:

void loop()

    static int number = 0;

    number++;
    delay(1000);

    if (number > 9)
    
        number = 0;
    

注意关键字static的使用。这将确保存储在number 中的值在函数结束时不会消失。换句话说,下次调用loop() 函数时,该值仍然存在。

最后,如果我不得不猜测您要完成什么,我认为您的代码应该看起来更像这样。看起来好像你在尝试不同的东西,所以我从你的原始代码中留下了一些代码 sn-ps,它们实际上并没有做任何事情:

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.
    

【讨论】:

以上是关于未在此范围内声明 - Arduino的主要内容,如果未能解决你的问题,请参考以下文章

未在此范围内声明 CvSVM 错误

C++ Win API 函数'未在此范围内声明'

C++ 错误:未在此范围内声明类/对象

我正在更换未在此范围内声明

数据“未在此范围内声明的成员”

Arduino:错误:“abs”未在此范围内声明