工程与技术培训

【工程与技术培训】

content:
1. 认识Arduino
2. 学习常用元器件
3. C语言基本语法

/******************************************************************************/
/---------------------------------------分界线------------------------------------/
/******************************************************************************/

一、 认识Arduino

1.什么是arduino

Arduino 是一个开源电子原型平台基于灵活、易于使用的平台,这个平台包含软件和硬件。这是特意为艺术家、设计师,业余爱好者,和感兴趣的人创建交互式对象和环境。
Arduino能通过各种各样的传感器来感知环境;通过控制灯光、马达和其他的装置来影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于Wiring)和Arduino开发环境(based on Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。

 2.发明人及发明原因

Arduino是意大利人发明的硬件和软件,它的核心开发团队成员包括:Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis 和 Nicholas Zambetti。
当然Arduino的发展也是有故事的:
在这里插入图片描述
据说Massimo Banzi之前是意大利Ivrea一家学校的老师。他的学生经常抱怨找不到便宜好用的微控制器。 2005年冬天,Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Massimo的学生 Mellis为电路板设计编程语言。两天以后,Mellis就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为Arduino。几乎任何人,即使不懂电脑编程,也能用Arduino做出 很酷的东西,比如对感测器作出回应,闪烁灯光,还能控制马达。
后来他们将Arduino相关设计图放在了网上,保持设计的开放源码理念,在共享创意许可下,任何人都被允许生产电路板的复制品,还能重新设计,甚至销售原设计的复制品。你不需要付版税,甚至不用取得 Arduino 团队的许可。唯一被保留的只有Arduino这个名字。它被注册成了商标。如果有人想用这个名字卖电路板,那他们可能必须付一点商标费用给 Arduino 的核心开发团队成员。

3.arduino名字的由来

意大利北部一个如诗如画的小镇“Ivrea”,横跨过蓝绿色Dora Baltea河,它最著名的事迹是关于一位受压迫的国王。公元1002年,国王Arduin成为国家的统治者,不幸的是两年后即被德国亨利二世国王给废掉了。今日,在这位无法成为新国王的出生地,cobblestone街上有家叫“di Re Arduino”的酒吧纪念了这位国王。Massimo Banzi经常光临这家酒吧,而他将这个电子产品计划命名为Aruino以纪念这个地方。

4.开源硬件和开源软件

arduino板就是一种保持了开源理念的硬件,简单来讲就是将设计的原理图进行公布,而且允许生产电路板的复制品,能重新设计,销售原设计的电路板。
开源软件同样也是将程序源码进行开放,拥有开放的源代码库,可以免费调用,不需要重写源代码。
eg:
苹果公司为闭源------IOS

google公司为开源:
小米–MIUI OS
锤子–Smartisan OS
vivo–Funtouch OS

开源就是资源共享,开源的好处可见一斑,可以节省研发费用及研发时间,对社会发展起到很好的推动作用。

5.认识arduino Uno板

在这里插入图片描述
在这里插入图片描述

6.arduino IDE的安装及使用

我们使用的arduino IDE有两个版本,分别适用于windows系统和Linux系统,版本号分别为1.6.5和1.8.7.我已将两个压缩包拷贝到各位老师的PC里,可以在相应的系统下解压直接打开软件使用。在这里插入图片描述
打开后的界面:
在这里插入图片描述

7.基本编程语言使用

void setup 为初始化函数,用来对需要使用的端口进行设置。
void loop 为循环函数(主函数),用来循环执行写入的命令。
我们需要通过串口线将PC机和Uno板进行连接,这被称为串口连接。我们可以通过串口线将我们编好的程序写入Uno板,让Uno板执行相应的命令。
首先通过LED灯来试一下。
在这里插入图片描述

扫描二维码关注公众号,回复: 5492325 查看本文章
/*************闪烁程序************/
void setup()  //为引脚设置输入输出模式
{
	pinMode(2,OUTPUT);  //设置2引脚为输出
	pinMode(3,OUTPUT);  //设置3引脚为输出
}//(只运行一次)

void loop()  //进入循环
{
	digitalWrite(2,HIGH);  //2引脚置高位
	digitalWrite(3,LOW);   //3引脚置低位
	delay(300);            //延时300毫秒
	digitalWrite(2,LOW);   //2引脚置低位
	digitalWrite(3,LOW);   //3引脚置低位
	delay(300);            //延时300毫秒
}//(循环执行)

设置流水灯程序:

/**********流水灯程序*************/

void setup()
{
  pinMode(2,OUTPUT);  //设置为输出引脚
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
}
void loop()
{
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  delay(300);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  delay(300);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
  delay(300);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  delay(300);
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  delay(300);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  delay(300);
}

/******************************************************************************/
/---------------------------------------分界线------------------------------------/
/******************************************************************************/

二、常用元器件的使用

/----------------------------------拓展板---------------------------------/
在这里插入图片描述
我把常用的元器件分为两种:一种叫做传感器,一种叫做执行器。
传感器是将外界的变化以电信号的方式传输回arduino板,得到反馈。
执行器是消耗arduino板的电能,改变外界的环境。

/----------------------------------------传感器------------------------------------/
1.按键的使用

在这里插入图片描述
首先需要知道传感器为数字传感器还是模拟传感器,然后接到相应的针脚。
然后通过串口监视器得到传感器的反馈值。

(串口监视器)
在这里插入图片描述

  /*****************打印Hello!***********************/
  void setup()
  {
    Serial.begin(9600) //初始化串口,一般波特率为9600
  }

  void loop()
  {
    Serial.print("Hello!"); //串口打印
    //Serial.println("Hello!"); //串口换行打印
  }

  /******************打印按键值***************************/
  void setup()
  {
    Serial.begin(9600);
    pinMode(4,INPUT);
  }

  void loop()
  {
    Serial.println(digitalRead(4));
  }

在这里插入图片描述
按键上拉/下拉电阻
在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/

2.电位器的使用

在这里插入图片描述
判断为数字还是模拟传感器
通过串口监视器进行观察

  /******************打印电位器值***************************/
  void setup()
  {
    Serial.begin(9600);
    pinMode(A0,INPUT);
  }

  void loop()
  {
    Serial.println(analogRead(A0));
  }

观察一下模拟信号的变化

3.超声波的使用

超声波的接线:
在这里插入图片描述
VCC - > 正极
GND - > 负极
Trig - > 输出
Echo - > 接收

/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/

超声波原理:
在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
超声波的使用:

#include<SR04.h>
SR04 sr04(6,7); //ECHO & Trig
               // 接收 & 发送
void setup()   
{
  pinMode(6,INPUT); //Echo
  pinMode(7,OUTPUT); //Trig
  Serial.begin(9600);
}
int distance;
void loop()
{
  distance = sr04.Distance();
  Serial.print(distance);
  Serial.println(" cm");
}

需要用到一个 #include<> 来导入特定的库文件
这里导入的库名叫SR04,是超声波专用库,".h"是它的后缀名。
并且需要用到“对象的实例化”-----SR04 sr04(6, 7);

各位可以把SR04这个库比喻成一个盖楼的图纸,只有一个图纸是不能住人的。
需要通过一个实例化把它变成一个实际可用的楼房,才可以被我们使用。

库其实就是开源项目的一个例子,我们想要使用一个复杂元器件,不需要弄清楚具体的原理,仅需要通过库文件来使用它就可以。可见开源对我们的开发有着很大的好处。

4.库文件的导入

/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述

5.LCD1602的使用及I2C通信

在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/

在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述

6.PWM脉宽调制信号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
电位器控制灯亮度:

在这里插入图片描述

void setup()
{
  pinMode(A0,INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  digitalWrite(2,0);
}
int a,b;
void loop()
{
  a = analogRead(A0);
  b = map(a,0,1023,0,255);
  analogWrite(3,b);
}

三 C语言基本语法

1.基本数据类型

在这里插入图片描述
补充一个类型:布尔类型 —> bool :True & False

2.数据运算

在这里插入图片描述
int flag;
自增运算:flag++;
自减运算:flag- -;

/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/

3 if的用法

在这里插入图片描述
按键控制灯程序:

/*********单按键控制灯*******/     (if-else语句)
  void setup()
  {
    Serial.begin(9600); //初始化串口
    pinMode(2,OUTPUT);  //设置2号针脚为输出
    pinMode(3,OUTPUT);  //设置3号针脚为输出
    pinMode(4,INPUT);   //设置4号针脚为输入
  }
  void loop()
  {
    Serial.println(digitalRead(4)); //串口打印4号针脚数值
    
    if(digitalRead(4)==LOW)  //判断如果4号针脚为LOW(注意=和==的区别)
    {
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
    }
    else                     //其他情况
    {
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
    }
  }
  /*********************双按键控制灯********************/
  void setup()
  {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,INPUT);
    pinMode(5,INPUT);
  }
  void loop()
  {
    if(digitalRead(4)==LOW)
    {
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
    }
    if(digitalRead(5)==LOW)
    {
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
    }
  }
/***********************单按键切换灯亮灭**********************/
  void setup()
  {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,INPUT);
  }
  int flag = 0;  //定义一个整型变量(要放在loop循环外面)
  void loop()
  {
    if(digitalRead(4)==LOW)
    {
      flag = flag + 1;    //flag在原来的基础上加 1
      delay(300);         //延时防误判
    }
    if (flag % 2 == 0)  //判断flag为偶数(%为取余数)
    {
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
    }
    if(flag % 2 == 1)   //判断flag为奇数
    {
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
    }
  }
5 for循环的使用

在这里插入图片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割线---------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述
呼吸灯:

int i;//定义int(整型)变量i,用来循环
void setup()
{
pinMode(3,OUTPUT);  //设置3号针脚作为输出针脚

}
void loop()
{
  for(i=0;i<=255;i++)  //使用for循环实现呼吸灯渐亮
    {
      analogWrite(3,i);//模拟量写入当前的亮度级别
      delay(10);       //维持在亮度为i的级别上10毫秒
      }
  for(i=255;i>=0;i--) //使用for循环实现呼吸灯渐灭
    {
      analogWrite(3,i);
      delay(10);
      }
}
6 while循环的使用

在这里插入图片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------while和if的区别-------------------------------------------------------------/
/******************************************************************************************************************************/
在这里插入图片描述

 7 子函数的用法

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37744263/article/details/88379349