单片机学习小组
直播中

李丹

7年用户 1413经验值
私信 关注

什么是arduino呢?arduino有何作用呢

什么是arduino呢?arduino有何作用呢?如何利用arduino去编写程序呢?

回帖(1)

李健

2022-1-24 09:55:24
arduino的初步学习

arduino简介:
由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序 的开发环境组成。它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机,arduino与其他设备进行通讯。
运用的编程软件为:arduino ide
Arduino对库进行了二次编译封装,把端口都打包好了,寄存器啦、地址指针之类的基本不用管。大大降低了软件开发难度,适宜非专业爱好者使用。优点和缺点并存,因为是二次编译封装,代码不如直接使用AVR代码编写精练,代码执行效率与代码体积都弱于AVR直接编译。
函数介绍:
void setup() 初始化变量,调用库函数等
void loop() 连续执行函数内的语句 (循环)
pinMode(pin, mode) 数字IO口输入输出模式定义函数,pin表示为0~13, mode表示为INPUT或OUTPUT。
digitalWrite(pin, value) 数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。(HIGH 为高电平,LOW为低电平。)
int digitalRead(pin) 数字IO口读输入电平函数,pin表示为0~13,value表示为HIGH或LOW。
analogRead(pin) 模拟IO口读函数,pin表示为0~5。
analogWrite(pin, value) - PWM 数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,pin表示3, 5, 6, 9, 10, 11,value表示为0~255。
unsigned long millis() 返回时间函数(单位ms),该函数是当程序运行就开始计时并返回记录的参数
delay(ms) 延时函数(单位ms)
delayMicroseconds(us) 延时函数(单位us)。
attachInterrupt(interrupt, , mode) 外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 下降沿中断。
detachInterrupt(interrupt) 中断开关,interrupt=1 开,interrupt=0 关。
Serial.begin(speed) 串口定义波特率函数,speed表示波特率,如9600
int Serial.available() 判断缓冲器状态。
int Serial.read() 读串口并返回收到参数。
Serial.flush() 清空缓冲器。
Serial.print(data) 串口输出数据

Serial.println(data) 串口输出数据并带回车符。
需要的库文件介绍:
EEPROM - EEPROM读写程序库
Ethernet - 以太网控制器程序库
LiquidCrystal - LCD控制程序库
Servo - 舵机控制程序库
SoftwareSerial - 任何数字IO口模拟串口程序库
Stepper - 步进电机控制程序库
Wire - TWI/I2C总线程序库
Matrix - LED矩阵控制程序库
Sprite - LED矩阵图象处理控制程序库
写程序:
步骤:
1、声明变量及接口名称(int val;int ledPin=13;)。
2、setup()——函数在程序开始时使用,可以初始化变量、接口模式、启用库等(例如:pinMode(ledPin,OUTUPT);)。
3、loop()——在setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。
我写了一个程序,来解释说明一下
这个程序的目的是检测火焰,如果火焰达到阈值,则启动舵机

#include
#include
//以这种方式调用,它使用默认地址0x40。
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
int flame=A5;//定义火焰接口为模拟0 接口
int Beep=8;//定义舵机接口 接口
int val=0;//定义数字变量
void setup()
{
pinMode(Beep,OUTPUT);// 为输出接口
pinMode(flame,INPUT);//为输入接口
Serial.begin(9600);
pwm.begin();
  pwm.setPWMFreq(50); //模拟伺服在60赫兹更新下运行
}
void loop()
{
val=analogRead(flame);//读取火焰传感器的模拟值
Serial.println(val);//输出模拟值,
if(val>=600)//当模拟值大于600 时舵机转
{
  pwm.setPWM(Beep, 0, 180);//转动180度
}
}

}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分