Arduino 基础语法
- 声明变量
- setup()函数的意义
- loop()函数的意义
- pinMode(接口,INPUT or OUTPUT)
- digitalWrite(接口,HIGH or LOW)
- digitalRead(接口)
- analogWrite(接口,数值)
- analogRead (接口名称)
- delay(几毫秒)
- Serial.begin(波特率)
- Serial.read()
- Serial.print(数据,进制)
- Serial.println(数据,进制)
- 一般情况LED单色灯泡节230Ω左右电阻
数字信号输入和输出
数字信号之分两种0或1
所以在digitalWrite函数中把High可以改写成1,LOW可以改写成0
e.g 点亮小灯泡
void setup(){
pinMode(1,OUTPUT);
}
void loop(){
digitalWrite(1,1);
delay(100);
digitalWrtie(1,0);
}
串口的输入输出
记得要先Serial.begin()哦!
输入
Serial.read()都会一直返回,无论是否有输入输出,没有数据的时候会输出’-1’,这个函数只会从端口读取一个ASCII码,本身自带缓冲区(128字节即128个ASCII码)。在Arduino的板子上的 TX RX对应串口输入的 1/0 端口,可以插入LED当作硬盘灯。(我忘了电压是多少了。。)
e.g:
当输入一个数据的时候小灯泡亮
int ledPin = 13;
int val;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
val = Serial.read();
if (-1 != val) {
if ('H' == val) {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
}
}
}
在这个过程中我们疯狂输入数据发现小灯泡不暗说明Arduino的串口读入有缓冲区,我们可以使用
(int) Serial.available()
来看缓冲区还有多少数据。
还有很多的串口读取,但是!!没啥子用
输出
把输入反过来。。emm没什么可讲的
e.g “Hello World!”
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World!");
delay(1000);
}
此处用的是println,还有print,区别是是否还行
当输出数字的时候默认是DEC(十进制),当然也可以改成别的
Serial.println(a,HEX);
//改写成16进制,东西类似于c++中的
// cout << setbase(int) << num;
模拟输入和输出
输入
emm本质上其实是测电压,把5V电压分成0~1023,共1024份,所以精度就是5V/1023,但是由于比较精准,很容易受到影响。
e.g: 电位器电压测定
我们使用电位器来经行学习♂(手动滑稽)
接线柱从上到下依次为:5v,A5,GND
(网上找的图凑活看看)
代码
int analogPin = A5;
int val = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
val = analogRead(analogPin)/1023;
Serial.println(val);
delay(1000);
}
输出
模拟输出采取的方案是PWM输出,通过开关的时间比*5V来计算出实际电压,大多数方案采取这样的方法是因为比较容易实现低成本的电压精准调控,Arduino的PWM频率是500Hz,即2ms一次PWM信号,看图
我们接下来使用PWM可以经行对于支持PWM信号的马达的控制或者LED。
看你的Arduino板子上面输出接口前面带“~”的代表支持PWM输出,分别有3,5,6,9,10,11,在经行analogWrite()的时候可以不用设置 pinMode()
切记,analogWrite()模拟输出和 analogRead()毫不相干
语法解释
analogWrite(pinNum,value);
// pinNum表示在第几个输出口上
// value从0~255,再高无用
引脚5和6的PWM输出将产生高于预期的占空比。这是因为millis()和delay()函数,它们共享同一个内部定时器用于产生PWM输出所产生的相互作用。这提醒我们引脚5和6在多数低占空比的设置(如0- 10)的情况下0数值的结果并没有完全关闭。
e.g 电位器控制小灯泡电压:
代码
int ledPin =3;
int analogPin =A5;
int val = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
}
小思考:为什么除以4而不是除以5呢?
按键开关
按键的本质是横着的是联通的,竖着的是不连通的,按下时联通
对应针脚:
1 2
3 4
在这个开关之中1,2是通路,3、4是通路
e.g 开关控制灯泡
方法一:
直接接到不通的两侧,按下两等
方法二:
int LED=13;
int SW=11;
void setup()
{
pinMode(LED,OUTPUT);
pinMode(SW,INPUT);
// digitalWrite(SW,HIGH);
}
void loop()
{
boolean val=digitalRead(SW);
if(val){
digitalWrite(LED,HIGH);
}
else{
digitalWrite(LED,LOW);
}
}
抢答器项目:
花里胡哨LED项目:
带开关的流水灯
按一次开关切换一种花里胡哨的样子
把当前花里胡哨的流水灯传输到电脑之中