Arduino变量与运算符入门

一、认识 Arduino 与变量基础

(一)课前准备

我们要开始玩 Arduino 啦,它就像一个小机器人的“大脑”,能让我们的想法变成现实!先准备好 Arduino 开发环境(软件),想象它是一个神奇的画板,我们要在上面画画(写代码)哟。

(二)变量是什么?

变量就像一个个小盒子,能装不同的东西,比如数字、文字。在 Arduino 里,我们用变量存数据,方便又好玩!

示例 1:简单变量创建与使用(像装糖果进盒子)

void setup() {
  // 初始化串口,这样我们能看到 Arduino 说的“话”,9600 是一种交流速度
  Serial.begin(9600); 
  int a; // 创建一个叫“a”的小盒子,专门装整数(就像装整数颗糖果)
  a = 100; // 把 100 颗“数字糖果”放进“a”盒子里
  Serial.println(a); // 让 Arduino 把盒子里的“糖果数”通过串口说出来,我们就能看到啦
}

void loop() {
  // loop 里暂时没任务,就空着,它会一直循环,不过这里我们 setup 已经做完事啦
}

注释解释

  • int a;:告诉 Arduino 准备一个叫 a 的小盒子,int 表示这个盒子只能装整数,像 1、2、3 这样的数。
  • a = 100;:把数字 100 放进 a 这个盒子,就像往盒子里放糖果。
  • Serial.println(a);:让 Arduino 通过串口(我们电脑上能看到的窗口)把 a 盒子里的数字说出来,这样我们就知道盒子里有啥啦。

示例 2:变量值可以改变(换糖果)

void setup() {
  Serial.begin(9600);
  int a; 
  a = 100; // 先放 100 颗“糖果”
  a = 50; // 哎呀,又换成 50 颗啦,变量里的值能变哟
  Serial.println(a); // 现在说出来的就是 50 啦
}

void loop() {
}

小思考:猜猜串口会显示啥?对啦,是 50,因为后面把值换成 50 啦,变量的值可以随时换!

(三)全局变量和局部变量(盒子的“活动范围”)

  • 全局变量:在函数(像 setuploop 这些大括号里的部分)外面创建的变量,就像家里客厅的大盒子,整个 Arduino 程序都能用到它!
  • 局部变量:在函数(比如 setup 里的大括号)里面创建的变量,像房间里的小盒子,只能在这个房间(函数)里用。

示例 3:全局变量(客厅的盒子)

int a = 50; // 全局变量,整个程序都能用,在函数外面创建的哟

void setup() {
  Serial.begin(9600);
  a = 100; // 在 setup 里也能改全局变量的值,因为它是“客厅盒子”,哪里都能碰
}

void loop() {
  Serial.println(a); //  loop 里也能用到全局变量“a”,会一直打印 a 的值(这里是 100)
}

注释解释

  • int a = 50; 在函数外面,所以是全局变量,setuploop 都能操作它。
  • 运行后,串口会一直打印 100,因为 setup 里把它改成 100 啦,loop 能一直访问这个全局变量。

示例 4:局部变量(房间里的盒子,出错示例让你明白)

void setup() {
  int a = 50; // 局部变量,只能在 setup 里用
  Serial.begin(9600);
}

void loop() {
  // 这里想用 a,就会出错!因为 a 是 setup 房间里的小盒子,loop 房间进不来
  // Serial.println(a);  把这行解开就会报错,小朋友别学错的哟
}

错误原因asetup 里创建,是局部变量,出了 setup 的大括号(房间),loop 就找不到它啦,所以不能用,这样写电脑会提示错误,告诉我们变量没定义,就像找错房间拿不到盒子一样!

二、Arduino 与输入输出(和外界互动)

(一)读取引脚状态(听听 Arduino 外接的“小消息”)

我们可以让 Arduino 读外接传感器(比如按钮)的状态,就像听按钮说“我被按啦”或者“没被按”。

示例 5:读取数字引脚状态(按钮状态)

void setup() {
  Serial.begin(9600); // 还是先打开串口,听 Arduino 说话
  pinMode(4, INPUT); // 告诉 Arduino,第 4 号引脚是用来“听”外界消息的(输入),比如接按钮
}

void loop() {
  int val = digitalRead(4); // 把 4 号引脚听到的消息(0 或 1,0 像没按,1 像按了)存到 val 变量里
  Serial.println(val); // 把消息通过串口说出来,我们就能知道按钮状态啦
  delay(20); // 等一小下,别让消息跑得太快,20 毫秒,就像数 20 下小蚂蚁爬的时间
}

注释解释

  • pinMode(4, INPUT);:设置引脚 4 为输入模式,就像给 Arduino 装了个小耳朵在 4 号引脚,听外面的信号。
  • digitalRead(4);:让小耳朵听 4 号引脚的信号,按按钮的话,可能收到 1,没按就是 0,把结果存到 val 里。
  • delay(20);:暂停 20 毫秒,让我们能清楚看到串口打印的内容,不然太快就看不清啦。

(二)全局变量在输入输出里的巧用(让盒子跨房间传消息)

全局变量能在 setuploop 之间传数据,比如把引脚读到的值存到全局变量,方便到处用!

示例 6:用全局变量存引脚值(跨房间传消息)

int a; // 全局变量,当“传话筒”,存引脚状态

void setup() {
  Serial.begin(9600);
  pinMode(4, INPUT); // 小耳朵装在 4 号引脚
}

void loop() {
  a = digitalRead(4); // 把 4 号引脚听到的消息存到全局变量 a
  Serial.print("按键的值:"); // 先打印文字“按键的值:”
  Serial.println(a); // 再打印 a 里存的状态(0 或 1)
  delay(20); 
}

运行效果:串口会一直显示“按键的值:0”或者“按键的值:1”,按按钮的时候,值就会变,因为全局变量 asetup 能访问的引脚状态,带到 loop 里用啦,就像传话筒把消息从一个房间带到另一个房间!

三、算术运算(让 Arduino 做数学题)

Arduino 还能做数学题哟,加减乘除都不在话下,就像小计算器!

示例 7:算术运算符大集合(做数学题)

void setup() {
  Serial.begin(9600); // 打开串口看结果
  int a = 4, b = 8; // 创建两个变量,a 装 4,b 装 8,像两个数字盒子
  int res; // 准备一个盒子存计算结果

  // 加法:a + b 就是 4 + 8
  Serial.println(a + b); // 串口会打印 12
  // 减法:a - b 就是 4 - 8
  Serial.println(a - b); // 串口会打印 -4(负数也会算哟)
  // 乘法:a * b 就是 4 * 8
  Serial.println(a * b); // 串口会打印 32
  // 除法:b / a 就是 8 / 4
  Serial.println(b / a); // 串口会打印 2(整数除法,只取商)

  // 有括号先算括号里的,(a + b) 是 12,再乘 3
  res = (a + b) * 3; 
  Serial.println(res); // 串口会打印 36
}

void loop() {
  // 这里暂时没事做,setup 里把数学题做完啦
}

数学小知识

  • 加法用 +,减法用 -,乘法用 *,除法用 /
  • 有括号的话,先算括号里的,就像我们做数学题一样,(4 + 8) * 3 先算 4 + 8 得 12,再乘 3 得 36 。
  • 整数除法(像 8 / 4 )会直接得到商,不管余数,所以结果是 2 ,不是带小数的哟。

四、综合小项目:按钮控制与变量联动(好玩的互动)

我们结合前面的知识,做个小项目:读按钮状态(用变量存),然后让串口打印出来,还能简单改值玩!

// 全局变量存按钮状态
int buttonState; 

void setup() {
  Serial.begin(9600); 
  // 设置 4 号引脚为输入,接按钮
  pinMode(4, INPUT); 
}

void loop() {
  // 读按钮状态,存到全局变量
  buttonState = digitalRead(4); 
  Serial.print("按钮状态:");
  Serial.println(buttonState); 

  // 假装做个小运算,比如按钮按下去(状态 1),给变量加加玩
  if (buttonState == 1) { 
    // 自己创建个变量玩,局部变量,只在 loop 里用
    int temp = 0; 
    temp = temp + 1; // 按一次按钮,temp 加 1
    Serial.print("临时变量 temp:");
    Serial.println(temp); 
    delay(2000); 
  }

  delay(20); 
}

项目解释

  • 全局变量 buttonState 存按钮状态,loop 一直读它,串口一直显示按钮是按(1)还是没按(0)。
  • 按按钮的时候,会进入 if 里面,创建局部变量 temp ,每次按按钮,temp 就加 1 ,串口会显示 temp 的值,不过因为 temp 是局部变量,每次 if 结束就会“消失”,下次按又从 0 开始加,好玩吧!

五、学习总结

  1. 变量:像小盒子,装数字等数据,有全局(整个程序用)和局部(只能在函数里用)之分,值还能改变。
  2. 输入输出:用 pinMode 设置引脚为输入,digitalRead 读引脚状态(比如按钮),通过串口 Serial 打印消息给我们看。
  3. 算术运算:Arduino 能做加减乘除,和数学题一样,有括号先算括号里的,整数除法只取商。

小朋友们,现在你们可以用 Arduino 做很多好玩的事啦,比如读按钮、做数学题,快自己试试改改代码,让 Arduino 听你的话,完成更有趣的任务吧! 后续还能学让 Arduino 控制小灯亮灭、驱动小电机,超好玩,继续加油哟!

2 条评论

  • @ 2025-7-7 11:51:15

    Arduino变量与运算符入门

    一、什么是变量?

    变量就像是一个容器,用来存储数据。想象成一个贴了标签的盒子,你可以往里面放东西(赋值),也可以随时查看里面的东西(读取),还能更换里面的东西(重新赋值)。

    void setup() {
      int a;  // 创建一个叫"a"的整数类型变量(盒子)
      a = 100;  // 把100放进这个盒子里
      Serial.begin(9600);  // 初始化串口通信
      Serial.println(a);  // 查看盒子里的内容并打印
    }
    
    void loop() {
      // 循环函数,这里暂时为空
    }
    

    二、变量的创建与使用规则

    1. 先创建,后使用
      必须先声明变量才能使用,就像先要有盒子才能放东西

      void setup() {
        Serial.begin(9600);
        // a = 200;  错误!还没创建变量a就使用了
        int a;  // 正确:先创建变量
        a = 200;  // 现在可以使用了
        Serial.println(a);
      }
      
    2. 变量的赋值方式

      • 初始化:创建时直接赋值
      int a = 6;  // 创建变量a的同时赋值6(初始化)
      
      • 动态赋值:创建后再赋值
      int a;  // 先创建变量
      a = 6;  // 之后再赋值(动态赋值)
      
    3. 连续创建多个变量

      int a, b = 100, c;  // 同时创建a、b、c三个变量,其中b初始化为100
      

    三、变量的命名规则

    给变量取名很重要,好的名字能让代码更容易理解:

    1. 允许使用的字符:大写字母、小写字母、下划线(_)、数字、$符号
    2. 禁止规则
      • 数字不能放在开头(如3as是错误的)
      • 不能使用系统关键字(如intvoid等)
      • 不能包含特殊字符(如#-等)
    3. 命名建议
      • 见名知意(如buttonState表示按键状态,ledPin表示LED引脚)
      • 不要太长,简洁明了
    // 正确的变量名示例
    int score;
    int studentAge;
    int _count;
    int a1;
    
    // 错误的变量名示例
    // int 2name;  // 数字开头
    // int my-score;  // 包含特殊字符
    // int int;  // 使用关键字
    

    四、变量的作用域:局部变量与全局变量

    变量的作用域就是变量能被使用的范围

    1. 局部变量

      • 在函数内部创建的变量
      • 只在该函数内部有效
      • 函数执行结束后会被销毁
      void setup() {
        Serial.begin(9600);
        int localVar = 10;  // 局部变量,仅在setup()中有效
        Serial.println(localVar);  // 正确,可以使用
      }
      
      void loop() {
        // Serial.println(localVar);  错误!loop()中不能使用setup()的局部变量
      }
      
    2. 全局变量

      • 在所有函数外部创建的变量
      • 整个程序都能使用
      • 从创建位置到程序结束都有效
      int globalVar;  // 全局变量,所有函数都能使用
      
      void setup() {
        Serial.begin(9600);
        globalVar = 20;  // 在setup()中赋值
      }
      
      void loop() {
        Serial.println(globalVar);  // 在loop()中使用,完全没问题
        delay(1000);
      }
      

    五、算术运算符的使用

    变量经常需要进行计算,Arduino支持多种算术运算:

    运算符 功能 示例 结果
    + 加法 3 + 5 8
    - 减法 3 - 5 -2
    * 乘法 3 * 5 15
    / 除法 10 / 5 2

    运算顺序遵循数学规则:先算括号内,再算乘除,最后算加减

    void setup() {
      Serial.begin(9600);
      int a = 4, b = 8;
      int result;
      
      Serial.println(a + b);  // 打印12(4+8)
      Serial.println(a - b);  // 打印-4(4-8)
      Serial.println(a * b);  // 打印32(4*8)
      Serial.println(b / a);  // 打印2(8/4)
      
      result = (a + b) * 3;  // 先算括号内的4+8=12,再乘以3
      Serial.println(result);  // 打印36
    }
    
    void loop() {
      // 循环函数为空
    }
    

    六、实际应用示例:读取按键状态

    结合变量和串口通信,读取按键状态并打印:

    // 全局变量:存储按键状态
    int buttonState;
    
    void setup() {
      Serial.begin(9600);  // 初始化串口通信,波特率9600
      pinMode(4, INPUT);  // 设置引脚4为输入模式(接按键)
    }
    
    void loop() {
      buttonState = digitalRead(4);  // 读取引脚4的状态并保存到变量
      Serial.print("按键的值:");  // 打印提示文字
      Serial.println(buttonState);  // 打印按键状态(0或1)
      delay(20);  // 延时20毫秒
    }
    

    常见错误及解决方法

    1. 变量未声明就使用
      错误提示:'a' was not declared in this scope
      解决:先创建变量(如int a;)再使用

    2. 变量重复声明
      错误提示:redeclaration of 'int a'
      解决:同一个作用域内不能有同名变量

    3. 局部变量跨函数使用
      错误提示:'a' was not declared in this scope
      解决:如果需要在多个函数中使用,改为全局变量

    通过以上内容,你已经掌握了Arduino中变量的基本概念、使用方法和运算符的应用。多写代码练习,就能熟练掌握这些基础知识点了!

    • @ 2025-7-7 11:45:38

      Arduino入门教程:变量与基础运算

      欢迎来到Arduino的世界!本教程专为中小学生设计,通过简单易懂的例子,带你学习Arduino编程中的变量和基础运算知识。

      什么是Arduino?

      Arduino是一种开源电子原型平台,包含硬件(开发板)和软件(编程环境)。我们可以通过编写代码,让Arduino板实现各种有趣的功能,比如控制LED、读取传感器数据等。

      第一个程序:读取引脚状态

      让我们从一个简单的程序开始,看看Arduino如何工作:

      // 程序开始时运行一次的函数
      void setup() {
        // 初始化串口通信,波特率为9600
        Serial.begin(9600);
        // 设置引脚4为输入模式
        pinMode(4, INPUT);
      }
      
      // 程序启动后反复运行的函数
      void loop() {
        // 读取引脚4的状态并通过串口打印
        Serial.println(digitalRead(4));
        // 延时20毫秒
        delay(20);
      }
      

      代码解释

      • setup():Arduino上电或重启时会执行一次这里的代码
      • Serial.begin(9600):开启串口通信,9600是通信速率
      • pinMode(4, INPUT):设置数字引脚4为输入模式,用于接收外部信号
      • loop()setup()执行完后,会一直重复执行loop()里的代码
      • digitalRead(4):读取引脚4的状态(0或1)
      • Serial.println():将内容通过串口发送到电脑
      • delay(20):暂停20毫秒再执行下一次循环

      变量:程序中的"容器"

      变量就像一个容器,可以用来存储数据。想象一下,变量就像一个贴了标签的盒子,我们可以把东西放进去,也可以把里面的东西换掉。

      变量的创建与使用

      void setup() {
        // 创建一个整数类型的变量a
        int a;
        // 给变量a赋值100(把100放进标有a的盒子里)
        a = 100;
        // 初始化串口通信
        Serial.begin(9600);
        // 打印变量a的值
        Serial.println(a);
      }
      
      // 循环函数为空,什么也不做
      void loop() {
        
      }
      

      代码解释

      • int a;:创建变量,int表示整数类型,a是变量的名字
      • a = 100;:赋值语句,把100保存到变量a中
      • 变量的值可以随时改变,后面的赋值会覆盖前面的值

      变量值的更新

      void setup() {
        int a;       // 创建变量a
        a = 100;     // 先给a赋值100
        a = 50;      // 再给a赋值50(现在a的值是50)
        Serial.begin(9600);
        Serial.println(a);  // 会打印出50,而不是100
      }
      
      void loop() {
        
      }
      

      注意:变量就像一个盒子,一次只能装一个值,新的值会把旧的值替换掉

      变量的规则

      1. 先创建,后使用
      void setup() {
        // a = 200; 这行代码会报错,因为还没有创建变量a
        int a;     // 先创建变量a
        a = 100;   // 现在可以使用了
        a = 50;
        Serial.begin(9600);
        Serial.println(a);
      }
      
      void loop() {
        
      }
      

      如果在创建变量前就使用它,会出现错误:'a' was not declared in this scope(变量a未声明)

      1. 同一作用域内,变量名不能重复
      void setup() {
        int a;     // 创建变量a
        // int a; 这行会报错,因为变量a已经创建过了
        a = 100;
        a = 50;
        Serial.begin(9600);
        Serial.println(a);
      }
      
      void loop() {
        
      }
      

      重复创建同名变量会出现错误:redeclaration of 'int a'(重复声明int类型的a)

      1. 可以同时创建多个变量
      void setup() {
        // 同时创建三个变量
        int a, b, c;
        // 也可以分开创建
        // int a;
        // int b;
        // int c;
        
        a = 10;
        b = 20;
        c = a + b;
        
        Serial.begin(9600);
        Serial.println(c);  // 会打印30
      }
      
      void loop() {
        
      }
      

      变量的生命周期与作用域

      变量有自己的"生命周期",也就是它从创建到消失的时间段。

      局部变量

      在函数内部创建的变量叫做局部变量,它只在这个函数内部有效:

      void setup() {
        // 在setup()函数里创建局部变量a
        int a = 50;
        Serial.begin(9600);
      }
      
      void loop() {
        // 这里会报错,因为a是setup()里的局部变量,在loop()里不存在
        Serial.println(a);  // 错误:'a' was not declared in this scope
      }
      

      为什么会报错?

      • 局部变量就像你放在卧室里的玩具,只能在卧室里玩,拿到客厅就找不到了
      • 当setup()函数执行结束后,它里面的局部变量就会被"销毁"

      全局变量

      在所有函数外部创建的变量叫做全局变量,整个程序都可以使用:

      // 在函数外部创建全局变量a
      int a;
      
      void setup() {
        Serial.begin(9600);
        Serial.println("程序启动啦!");
        // 设置引脚4为输入模式
        pinMode(4, INPUT);
      }
      
      void loop() {
        // 在loop()函数里使用全局变量a
        a = digitalRead(4);  // 读取引脚4的状态并保存到a中
        Serial.print("按键的值");  // 打印文字,不换行
        Serial.println(a);        // 打印变量a的值
        delay(20);                // 延时20毫秒
      }
      

      全局变量的特点

      • 从创建的地方开始,到整个程序结束都有效
      • 所有函数都可以使用和修改全局变量
      • 就像放在客厅里的玩具,家里所有人都可以玩

      变量的初始化

      创建变量时可以直接给它赋值,这叫做初始化:

      void setup() {
        // 创建变量的同时赋值(初始化)
        int a = 5;  // 变量a的初始值是5
        a = 10;     // 之后可以修改为10
        Serial.begin(9600);
        Serial.println(a);  // 会打印10
      }
      
      void loop() {
        
      }
      

      也可以同时创建多个变量并初始化:

      void setup() {
        // 同时创建多个变量
        int a = 4, b = 8;  // a=4,b=8
        int res;           // 只创建不初始化
        
        Serial.begin(9600);
        // 可以直接使用变量进行计算
        Serial.println(a + b);  // 打印a加b的结果:12
        Serial.println(a - b);  // 打印a减b的结果:-4
        Serial.println(a * b);  // 打印a乘b的结果:32
        Serial.println(b / a);  // 打印b除以a的结果:2
        
        // 计算后将结果保存到变量中
        res = (a + b) * 3;  // 先算括号里的a+b,再乘以3
        Serial.println(res);  // 打印结果:36
      }
      
      void loop() {
        
      }
      

      算术运算符

      Arduino支持多种算术运算,就像我们数学课上学的加减乘除:

      运算符 功能 例子 结果
      + 加法 3 + 5 8
      - 减法 3 - 5 -2
      * 乘法 3 * 5 15
      / 除法 10 / 5 2

      运算时遵循数学中的优先级:先算括号里的,再算乘除,最后算加减。

      void setup() {
        Serial.begin(9600);
        // 创建三个变量
        int a, b, result;
        a = 3;  // a的值是3
        b = 5;  // b的值是5
        
        // 各种运算示例
        Serial.println(a * b);  // 乘法:3*5=15
        Serial.println(a + b);  // 加法:3+5=8
        Serial.println(a - b);  // 减法:3-5=-2
        Serial.println(10 / 5); // 除法:10/5=2
        
        // 带括号的运算
        result = (a + b) * 2;  // 先算3+5=8,再算8*2=16
        Serial.println(result);  // 会打印16
      }
      
      void loop() {
        
      }
      

      综合练习:使用变量读取传感器

      让我们结合前面学的知识,编写一个读取传感器并使用变量存储数据的程序:

      // 创建全局变量存储传感器值
      int sensorValue;
      
      void setup() {
        // 初始化串口通信
        Serial.begin(9600);
        // 设置引脚2为输入模式,连接传感器
        pinMode(2, INPUT);
      }
      
      void loop() {
        // 读取传感器值并保存到变量中
        sensorValue = digitalRead(2);
        
        // 打印传感器值
        Serial.print("传感器当前值:");
        Serial.println(sensorValue);
        
        // 简单判断
        if (sensorValue == 1) {
          Serial.println("传感器检测到信号");
        } else {
          Serial.println("未检测到信号");
        }
        
        // 延时100毫秒,避免数据刷新太快
        delay(100);
      }
      

      总结

      通过本教程,你已经学会了:

      1. 变量的概念:像盒子一样存储数据的容器
      2. 如何创建变量:数据类型 变量名;(如int a;
      3. 如何给变量赋值:变量名 = 值;(如a = 10;
      4. 变量的两种类型:
        • 局部变量:在函数内部创建,只在该函数内有效
        • 全局变量:在函数外部创建,整个程序都可以使用
      5. 基本算术运算:+(加)、-(减)、*(乘)、/(除)

      下一课,我们将学习如何使用变量来控制LED灯和其他电子元件,让你的Arduino项目动起来!

      • 1