Arduino错误代码:|未在此范围内声明“测试” | &| '{'令牌|

时间:2019-06-23 13:29:02

标签: arduino

上下文 你好 当引脚7处于高电平状态时,我试图通过串行向另一个Arduino发送一个名为“ a”的数字值。在代码中,当我尝试对其进行编译时出现错误:-在此范围内未声明'test'-但我不知道这是什么错误。另外,如果我取消隐藏void'send',也就是在循环内部,我会得到错误-在'{'标记之前-不允许使用函数定义。 有人可以帮助我吗? 谢谢

我尝试过的 我试图从书面函数中定义变量'a'

代码

#include <SoftwareSerial.h>

 void setup() {
  SoftwareSerial test (3,2);
  test.begin(1200);
  pinMode(7,INPUT);
 }

 void loop() {
  if ( digitalRead(7) == HIGH ) {
   //void send(){
    test.write(int a=0);
    a++;
    delay(1000);
   //}
  }

 }

预期的结果和错误 我希望编译代码时不会出错errors并创建一个称为send的void,该void传输每个周期增加的数字。

  • 此处不允许在'{'标记之前使用函数定义-当我取消隐藏void send

  • 时 在此范围内未声明
  • 'test'-当我隐藏'send'

2 个答案:

答案 0 :(得分:0)

尝试一下,我修复了您的代码:

#include <SoftwareSerial.h>
    SoftwareSerial test(3, 2);
    int a=0;
     void setup() {
      test.begin(1200);
      pinMode(7,INPUT);

     }

     void loop() {
      if ( digitalRead(7) == HIGH ) {
       //void send(){

        test.write(a);
        a++;
        delay(1000);
       //}
      }

     }

test必须在setup()函数外部声明

答案 1 :(得分:0)

代码错误是:

  • 错误的函数调用。
  • 错误的函数声明。

让我们解决它们:

错误的串行调用

要正确初始化串行通信,我们需要分配变量名称,然后加上引脚。

SoftwareSerial test(3, 2)

如果我们在两者之间写一个空格,则IDLE不知道您要使用哪些引脚。 更准确地说,您正在调用SofwareSerial库中名为SoftwareSerial()的方法,该方法需要属性,rxPin(Arduino开发板接收数据的地方)和txPin(Arduino开发板发送或传输数据的地方) )。您还可以提供一个可选值inverse_logic布尔值。因此,当您输入SoftwareSerial test (3,2)时,不会为该方法提供所需的值。

此错误可以应用于任何方法调用。我们称之为“通话” 因为您没有定义方法,所以您只是在使用它。您 不需要知道它是如何工作的。知道你就足够了 需要提供两个值,以及您将收到的输出。 函数所需的值始终在圆括号内, 在变量后面没有空格。返回的值将是 存储在您创建的变量中,在这种情况下为test

现在我们已经了解了问题的原因'test' was not declared in this scope,让我们转到下一个问题。

错误的函数声明

让我们假设,我们要创建一个新函数,而不是调用一个函数。我们可以做到,但是要遵循一系列规则:

  • 指定返回的变量。它可以是您想要的任何东西,布尔变量(False或True),数字等。也许该方法不返回任何东西,在这种情况下,我们使用关键字void。在这种情况下,我们什么都不想接收,因此我们的方法声明以void开头:
    void
  • 为该函数分配一个名称,在这种情况下,我们将其命名为send
    void send 
  • 指定所需的值。所需的属性在圆括号内给出。您需要指定该变量的名称及其类型。如果您需要的不仅仅是价值,可以通过添加,(int value, Boolean otherValue)将它们分开。如果不需要值,只需写()。在这种情况下,我们需要我们要发送的值。
    void send(String message){
  • 返回指定值。在这种情况下,什么也没有,所以我们不键入任何内容。
    void send(String message){
        test.write(message);
    }

有关声明函数的更多信息,请参见here