未在此范围内声明-Arduino

Not declared in this scope - Arduino

本文关键字:声明 -Arduino 范围内      更新时间:2023-10-16

当我尝试我制作的代码时遇到了问题:

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.
    }
}