未在此范围内声明 - Arduino

时间:2015-10-28 13:31:55

标签: c++ 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:错误:此范围内未声明“数字”

_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:错误:预期','或';'在'if'之前

Feil ved kompilering。

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

2 个答案:

答案 0 :(得分:1)

问题在于,您没有声明这些功能导致错误,而且#34;数字&#34;变量。 您需要声明它们,例如:

int number;

void StartTimer( ) { // function code; }

或包括&#34; .h&#34;包含这些功能,如@Neil Locketz说。

答案 1 :(得分:1)

此代码存在很多问题。

  • 我注意到的第一件事是您使用loop()关闭}函数,然后继续编写更多不属于任何函数的代码。
  • 另外,正如@Raul指出的那样,你定义了一个数组sevenseg[][],但是你没有用分号结束语句。
  • 您的上一个for()循环缺少其右括号}
  • 您的上一个for()循环在左大括号之前有一个分号。它不应该存在。
  • 您在number函数中使用变量loop(),但在使用后定义了number。您必须在使用之前定义变量。
  • 您在SetTimer()函数中调用StartTimer()setup(),但未定义这些函数。那是因为1,你没有包含定义这些函数的库,或者2,你没有自己定义这些函数。如果您的问题是1,那么我假设您打算使用#include <SimpleTimer.h>。请注意,您还必须安装该库。有关如何下载并将其添加到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()函数时,该值仍将存在。

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

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