Arduino 在';{';代币

Arduino 在';{';代币,arduino,serial-port,Arduino,Serial Port,当检测到某个输入(引脚7处于高电平状态)时,我正试图通过串行端口向另一个Arduino发送一个值。在下面的代码中,我在编译时遇到以下错误: 'test' was not declared in this scope 如果我取消隐藏voidsend,则在循环内部,我会收到另一个错误: a function-definition is not allowed here before '{' token 守则: void setup() { SoftwareSerial tes

当检测到某个输入(引脚7处于高电平状态)时,我正试图通过串行端口向另一个Arduino发送一个值。在下面的代码中,我在编译时遇到以下错误:

'test' was not declared in this scope
如果我取消隐藏void
send
,则在循环内部,我会收到另一个错误:

a function-definition is not allowed here before '{' token
守则:

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

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


创建一个空区,传输每个周期增加的数字。

试试这个,我修复了你的代码:

#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);
       //}
      }

     }
#包括
软件系列测试(3,2);
int a=0;
无效设置(){
测试开始(1200);
pinMode(7,输入);
}
void循环(){
如果(数字读取(7)=高){
//作废发送(){
测试。写入(a);
a++;
延迟(1000);
//}
}
}

测试
必须在
设置()函数
之外声明

代码错误如下:

  • 错误的函数调用
  • 错误的函数声明
让我们来解决它们:

错误的串行呼叫 为了正确初始化串行通信,我们需要分配变量名,后跟管脚

软件串行测试(3,2)

如果我们在两个引脚之间写一个空格,空闲的引脚就不知道要使用哪些引脚。 更准确地说,您正在调用名为SoftwareSerial()的库的一个方法,该方法需要属性、rxPin(Arduino板接收数据的位置)和txPin(Arduino板发送或传输数据的位置)。您还可以提供一个可选值,即反向逻辑布尔值。因此,当您键入
SoftwareSerial test(3,2)时
您没有获得该方法所需的值

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

既然我们了解了问题的原因,
“test”未在此范围内声明
,那么让我们转到下一个问题

错误的函数声明 假设不调用函数,而是创建一个新函数。我们可以这样做,但要遵循一系列规则:

  • 指定返回的变量。它可以是您想要的任何内容,一个布尔值(False或True),一个数字,等等。可能该方法不返回任何内容,在这种情况下,我们使用关键字
    void
    。在这种情况下,我们不希望接收任何内容,因此我们的方法声明以
    void
    开始:
  • 为该函数指定一个名称,在本例中,我们将其称为
    send
  • 指定所需的值。所需的属性在圆括号内给出。您需要指定该变量的名称及其类型。如果您需要多于一个值,请通过添加
    (int-value,Boolean-otherValue)
    。如果不需要值,只需编写
    ()
    。在这种情况下,我们需要要发送的值
  • 返回指定的值。在本例中为nothing,因此我们不键入任何内容

可以找到有关声明函数的更多信息。

测试
设置
方法的范围内定义,因此在
循环
方法的范围内不可用。请将声明移出
设置
以使其在两种方法中都可用。关于
发送
方法。您正在尝试定义在
loop
方法中调用它。将它移出,然后从那里调用它。在任何方法之外声明
test
时,这三个方法都可以使用它。将
a
的声明也移出所有方法。如果您想增加每次调用的值。感谢您的帮助。另外,如果我在void循环它可以工作,但是test.write()中没有定义“a”的任何形式吗?您可以使用前面定义的变量“a”作为send()函数的参数,然后将其传递给test.write(a)函数:void send(int var){……}。我希望这对您有所帮助
    void
    void send 
    void send(String message){
    void send(String message){
        test.write(message);
    }