Arduino学习笔记 (三) -- 语言基本概念

时间:2024-03-02 15:45:29

1、IDE的安装和基本使用

1.1 安装

  Arduino使用Arduino IDE进行开发,IDE的安装很简单,下载页面 在官方网站下载后自行安装即可

1.2 项目示例

  要打开现有项目示例,请选择File→Example→Basics→Blink。 

 

 

1.3  选择Arduino主板。

  转到Tools→Board,然后选择你的板。

 

 

 1.4 选择串行端口

 

 

 1.5 烧录程序

 

 

 

  A - 用于检查是否存在任何编译错误。

  B - 用于将程序上传到Arduino板。

  C - 用于创建新草图的快捷方式。

  D - 用于直接打开示例草图之一。

  E - 用于保存草图。

  F - 用于从板接收串行数据并将串行数据发送到板的串行监视器。

 

  现在,只需点击环境中的“Upload”按钮。等待几秒钟,你将看到板上的RX和TX LED灯闪烁。如果上传成功,则状态栏中将显示“Done uploading”消息。

2、Arduino程序结构

2.1 结构

  软件结构包括两个主要函数:

    Setup()函数

    Loop()函数

  

 

 

 

Void setup ( ) {

}
  • PURPOSE- 草图启动时会调用 setup()函数。使用它来初始化变量,引脚模式,启用库等。setup函数只能在Arduino板的每次上电或复位后运行一次。

  • INPUT - -

  • OUTPUT - -

  • RETURN- -

Void Loop ( ) {

}
  • PURPOSE- 在创建了用于初始化并设置初始值的setup()函数后,loop() 函数,正如它的名称所指,允许你的程序连续循环的更改和响应。可以使用它来主动控制Arduino板。

  • INPUT - -

  • OUTPUT - -

  • RETURN- -

 

3、Arduino数据类型

3.1 所有数据类型

void Boolean char Unsigned char byte int Unsigned int word
long Unsigned long short float double array String-char array String-object

void

  void关键字仅用于函数声明。它表示该函数预计不会向调用它的函数返回任何信息。

Boolean

  布尔值保存两个值之一,true或false。每个布尔变量占用一个字节的内存。

Char

  一种数据类型,占用一个字节的内存,存储一个字符值。字符文字用单引号写成:\'A\',对于多个字符,字符串使用双引号:"ABC"。

  但是,字符是存储为数字。你可以在ASCII图表中查看特定编码。这意味着可以对使用ASCII值的字符进行算术运算。例如,\'A\'+1的值为66,因为大写字母A的ASCII值为65。

unsigned char

  unsigned char是一种无符号数据类型,占用一个字节的内存。unsigned char数据类型编码数字为0到255。

byte

  一个字节存储一个8位无符号数,从0到255。

int

  整数(int)是数字存储的主要数据类型。int存储16位(2字节)值。这产生-32768至32767的范围(最小值为-2^15,最大值为(2^15)-1)。

  int的大小因板而异。例如,在Arduino Due中,int存储32位(4字节)值。这产生-2147483648至2147483647的范围(最小值-2^31和最大值(2^31)-1)。

Unsigned int

  unsigned int(无符号整数)与int相同,存储2字节。然而,它们只存储正值,产生0到65535(2^16)-1的有效范围。Due存储4字节(32位)值,范围从0到4294967295(2^32-1)。

Word

  在Uno和其他基于ATMEGA的板上,一个word存储一个16位无符号数。在Due和Zero上,它存储一个32位无符号数。

Long

  Long变量是用于数字存储的扩展大小变量,存储32位(4字节),从-2147483648到2147483647。

unsigned long

  unsigned long变量是用于数字存储的扩展大小变量,并存储32位(4字节)。与标准的long不同,unsigned long不会存储负数,它们的范围为0到4294967295(2^32-1)。

short

  short是16位数据类型。在所有Arduinos(基于ATMega和ARM)上,一个short存储一个16位(2字节)值。这产生-32768至32767的范围(最小值为-2^15,最大值为(2^15)-1)。

float

  浮点数的数据类型是具有小数点的数字。浮点数通常用于近似模拟值和连续值,因为它们的分辨率高于整数。

  浮点数可以大到3.4028235E+38,也可以低到-3.4028235E+38。它们被存储为32位(4字节)信息。

double

  在Uno和其他基于ATMEGA的板上,双精度浮点数占用四个字节。也就是说,double实现与float完全相同,精度没有增益。在Arduino Due上,double具有8字节(64位)精度。

4、变量和常亮

与其他编程语言逻辑及风格基本相同

变量按作用范围分为局部变量和全局变量,此处略去不讲

5、运算符

运算符类型

  • Arithmetic Operators 算术运算符
  • Comparison Operators 比较运算符
  • Boolean Operators 布尔运算符
  • Bitwise Operators 位运算符
  • Compound Operators 复合运算符

算术运算符

=  赋值

+  相加

-  相减

*  相乘

/  分母除以分子

%  取余数

比较运算符

==  比较值是否相等

!=  比较值是否不等

<  小于

>  大于

<=  小于等于

>=  大于等于

布尔运算

&&  逻辑与(and)

||  逻辑或(or)

!  逻辑非(no)

位运算符

&  and(与)

|  or(或)

^  xor(异或)

~  not(非)

<<  shift left(左移)

>>  shift right(右移)

复合运算符

++  自增

--  自减

+=  复合加

-=  复合减

*=  复合乘

/=  复合除

%=  复合模(B %= A等效于B = B % A)

|=  复合按位或(A |= 2与A = A | 2相同)

&=  复合按位与(A &= 2与A = A & 2相同)

6、控制语句

If 语句

  它采用括号中的表达式,后面跟随语句或语句块。如果表达式为真,则执行语句或语句块,否则跳过这些语句。

If … else 语句

  一个 if 语句后面可以跟随一个可选的else语句,当表达式为false时执行。

If … else if … else 语句

  if 语句后面可以跟随一个可选的 else if ... else 语句,其对于测试各种条件非常有用。

switch case 语句

  类似于if语句, switch ... case 通过允许程序员指定应在各种条件下执行的不同代码来控制程序的流程。

条件运算符 ? :

  条件运算符? :是C语言中唯一的三元运算符。

7、循环

while循环

  while循环将会连续、无限循环,直到括号()内的表达式变为false。必须用一些东西改变被测试的变量,否则while循环永远不会退出。

do…while循环

  do ... while循环类似于while循环。在while循环中,循环连续条件在循环开始时测试,然后再执行循环体。

for循环

  for循环执行语句预定的次数。循环的控制表达式在for循环括号内完全的初始化,测试和操作。

嵌套循环

  C语言允许你在另一个循环内使用一个循环

无限循环

  它是没有终止条件的循环,因此循环变为无限。

8、函数

函数声明

函数在循环函数之上或之下的任何其他函数之外声明。

我们可以用两种不同的方式声明函数:

第一种方法是在循环函数上面写入被称为函数原型的函数的一部分,它包括:

  • 函数返回类型
  • 函数名称
  • 函数参数类型,不需要写参数名称

函数原型后面必须加上分号(;)。

 

以下示例为使用第一种方法的函数声明的示范。

例子

int sum_func (int x, int y) // function declaration {
   int z = 0;
   z = x+y ;
   return z; // return the value
}

void setup () {
   Statements // group of statements
}

Void loop () {
   int result = 0 ;
   result = Sum_func (5,6) ; // function call
}

第二种方法,称为函数定义或声明,必须在循环函数的下面声明,它包括:

  • 函数返回类型
  • 函数名称
  • 函数参数类型,这里必须添加参数名称
  • 函数体(调用函数时执行的函数内部的语句)
 

以下示例演示了使用第二种方法的函数声明。

例子

int sum_func (int , int ) ; // function prototype

void setup () {
   Statements // group of statements
}

Void loop () {
   int result = 0 ;
   result = Sum_func (5,6) ; // function call
}

int sum_func (int x, int y) // function declaration {
   int z = 0;
   z = x+y ;
   return z; // return the value
}

9、字符串

字符串字符数组示例

此示例将显示如何创建字符串并将其打印到串口监视器窗口。

void setup() {
   char my_str[6]; // an array big enough for a 5 character string
   Serial.begin(9600);
   my_str[0] = \'H\'; // the string consists of 5 characters
   my_str[1] = \'e\';
   my_str[2] = \'l\';
   my_str[3] = \'l\';
   my_str[4] = \'o\';
   my_str[5] = 0; // 6th array element is a null terminator
   Serial.println(my_str);
}

同样的例子可以用更方便的方式编写,如下所示:

void setup() {
   char my_str[] = "Hello";
   Serial.begin(9600);
   Serial.println(my_str);
}

 

10、字符串对象

void setup() { 
   String my_str = "This is my string.";
   Serial.begin(9600);

   // (1) 打印字符串对象
   Serial.println(my_str);

   // (2) 将字符串对象转为大写
   my_str.toUpperCase();
   Serial.println(my_str);

   // (3) 字符串对象重写
   my_str = "My new string.";
   Serial.println(my_str);

   // (4) 字符串内容替换
   my_str.replace("string", "Arduino sketch");
   Serial.println(my_str);

   // (5) 获取字符串对象的长度
   Serial.print("String length is: ");
   Serial.println(my_str.length());
}

11、时间函数

delay() 函数

  delay()函数的工作方式非常简单。它接受单个整数(或数字)参数。此数字表示时间(以毫秒为单位)。

delayMicroseconds() 函数

  delayMicroseconds()函数接受单个整数(或数字)参数。一毫秒内有一千微秒,一秒内有一百万微秒。

millis() 函数

  此函数用于返回Arduino板开始运行当前程序时的毫秒数。

micros() 函数

  micros()函数返回Arduino板开始运行当前程序时的微秒数。该数字在大约70分钟后溢出,即回到零。

12、数组

下面以一个int数组示例来学习数组相关

// n is an array of 10 integers
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ;

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element\'s value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}