Arduino的学习

最近粗糙的学习了Arduino的使用ヾ(≧▽≦*)o

软件下载

https://www.arduino.cc/en/software

下载完后在工具中选择对应的开发板型号和端口

添加其他的开发板

这里使用esp8266mini d1开发板

在文件-首选项-附加开发板管理器网址里填写 http://arduino.esp8266.com/stable/package_esp8266com_index.json

之后在工具-开发板-开发板管理器搜索esp8266安装

20210712210607

初始文件讲解

void setup() {
  // 这里面放的是刚开机会运行的东西,比如串口通信频率

}

void loop() {
  // 这里放的函数将会一直循环,相当于while

}

Arduino函数

引脚定义

pinMode(LED_BUILTIN, OUTPUT)   //定义输出引脚
pinMode(LED_BUILTIN, INPUT)   //定义输入引脚

引脚高低电平设定

digitalWrite(LED_BUILTIN, LOW);  //高低电平设置

引脚高低电平读取

digtialRead(pushButton);   //引脚电平读取

延时函数

delay(1000);  //延时1000ms

串口波特率设置

Serial.begin(9600); //波特率

串口信息输出

Serial.printf(""); //输出字符串   没有格式化

PWM实现

sensorRead= analogRead(PIN);// 数据信号转模拟信号
newdata=map(sensorRead,0,1023,0,100);//数据映射  0~1023是sensorRead的值,0~100是映射的值     1023->100
analogWrite(PIN,newdata);  //PWM

引用同目录头文件

#include "..."   //相比与#include <...>  ,<>里面引用的头文件是Arduino根目录下的libraries里的头文件

伺服电机

棕色线GND 橘色信号线 红色VCC

需要包含头文件 Servo.h

#include <Servo.h>
Servo myservo  //定义电机的名字(结构体)
myervo.attach(PIN); //定义控制电机的引脚(信号线)
myservo.write(90);   //电机转动90度

74HC595

功能

引脚扩展 3个引脚扩展成8个

结构

20210705230129

每个引脚功能

“资料”引脚DS: 编写引脚数据

“活塞”引脚SH:传输每个引脚的数据

“大平台”引脚ST:控制数据上传到每个引脚

编码顺序

//定义3个“资料PIN1”“活塞PIN2”“大平台PIN3”引脚为输出
pinMode(PIN1, OUTPUT)   //定义输出引脚
pinMode(PIN2, OUTPUT)   //定义输出引脚
pinMode(PIN3, OUTPUT)   //定义输出引脚
unsigned char data[8]={1,1,1,1,1,1,1,1};
digitalWrite(PIN3,LOW);   //将“大平台”设置为低,准备接收数据
for(int i=0;i<8;i++)
{
	digitalWrite(PIN2,LOW);     //收起“活塞” 设置为低,准备传输 数据
	digitalWrite(PIN1,data[i]);	//传入数据
        digitalWrite(PIN2,HIGH);     //推动“活塞” 设置为高,传输数据
        if(i==8) digitalWrite(PIN3,HIGH);   //将“大平台”设置为高,接收数据
}

步进电机

采用模块:ULN2003A 那边高电平,对称的位置的接地

20210705232736

步进电机内部结构

20210705233302

启动方法:四根线循环接地

8*8LED

点亮一个灯:L4高电平,C1低电平

20210705234420

红外模块

https://github.com/Arduino-IRremote/Arduino-IRremote

#include <IRremote.h>	//包含头文件
IRrecv irrecv(PIN);			//设置红外接收引脚
decode_results results;		//接收红外信号值
irrecv.enaleIRIn();		//开启红外接收
if(irrecv.decode(&results))	//判断是否接收到红外信号
{
    Serial.println(results.value,HEX);	//将接收数据results.value以16进制输出
    irrecv.resume();	//继续接收
}

ATtiny85

结构

20210706153839

需要Arduino作为烧录器烧录

例程选择ArduinoISP,烧录到Arduino

工具里烧录器改成Arduino as ISP,开发板选择ATtiny85

接线:将Reset,Pin2,Pin1,Pin0接入Arduino

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

analogWrite(PIN,value)//PWM控制灯亮度

ws2812b

#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel strip(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //定义灯的参数
strip.begin();//初始化
strip.show();    //每次setPixelColor设置完,都要执行这个程序

//设置颜色方法1
strip.setPixelColor(n, red, green, blue, white);//n:位置,white:亮度0~255
strip.show();
//设置颜色方法2
uint32_t magenta = strip.Color(red, green, blue);  //RGB颜色转换
strip.setPixelColor(n,magenta);
strip.show();

//使用getPixelColor()方法可以查询某像素的颜色。
uint32_t color = strip.getPixelColor(11);//该方法返回32位颜色值。

uint16_t n = strip.numPixels();//获取LED数量

//设置整体亮度,setBrightness()一般只在setup()中调用
strip.setBrightness(64);//彩带中LED的整体亮度可以用setBrightness()进行调整,该方法只需一个参数,0为关闭,255为最大亮度。 例如,将彩带设置为1/4亮度:
strip.show();