Stduino简介¶
Stduino是基于C/C++封装的微控制器开发语言,它可以助您高效开发包括STM32F103系列在内的微控制器,为您省去大量琐碎的底层操作,从而把时间用在更重要的地方。
软件简介¶
Stduino IDE是一款针对32位处理器芯片的集成开发工具,当前已经完成了对STM32F103C8T6芯片的适配,后续将逐一对STM32F系列芯片进行适配;该开发工具为提高代码运行效率,核心底层库函数80%以上直接基于寄存器进行封装;同时兼具Arduino语法函数所有特点,还实现了 代码自动补全提示
, 中英文模式
, UTF-8\GBK编码格式
, 一键格式化
, 一键St-link\串口下载方式
等相关功能,极大地降低了STM32F103C8T6芯片的入门学习及后续开发成本。最后封装库将采用开源共享的理念进行分发,一处分享全球共用,极大保障后续软件维护的动力支撑。
- Win版软件无需安装,下载解压后,双击Stduino.exe即可运行。
- Mac&Linux版软件正在开发中~

教程说明¶
Stduino是一个基于易用硬件和软件的原型平台(开源)。它包括可编程的电路板(简称微控制器)和称为Stduino IDE(集成开发环境)的现成软件组成,用于将计算机代码烧入微控制器。Stduino目前主要支持ST(意法半导体)32位芯片开发。在开始教程之前,您需要提前安装Stduino IDE。
Stduino快速开发教程¶
函数部分¶
数字I/O函数¶
pinMode()¶
描述¶
初始化指定引脚的模式。
语法¶
pinMode(pin,mode)
参数¶
pin:指定需要设置模式的引脚
mode:可选择以下模式设置。
输出模式 | OUTPUT | 推挽输出 |
OUTPUT_PULSE | 脉冲输出 | |
输入模式 | INPUT | 浮空输入 |
INPUT_PULSE | 脉冲输入 | |
INPUT_PULLUP | 上拉输入 | |
INPUT_PULLDW | 下拉输入 | |
INPUT_ANALOG | 模拟输入 |
返回¶
无
例程¶
该例程展示如何改变引脚13引脚状态。
const int LedPin = 13;//定义灯引脚号为常量,即D13引脚
void setup()
{
pinMode(LedPin,OUTPUT);//设置灯引脚为推挽输出模式
}
void loop()
{
digitalWrite(LedPin,LOW);//灯引脚输出状态更改为低电平
delay(1000);//维持现有状态1000ms
digitalWrite(LedPin,HIGH);//灯引脚输出状态更改为高电平
delay(1000);//维持现有状态1000ms
}
注意¶
模拟引脚(A类口)均能作数字引脚(D类口)使用,例如A0,A1等。
digitalRead()¶
描述¶
读取指定引脚的电平状态。
语法¶
digitalRead(pin)
参数¶
pin:需要读取电平状态的引脚号
返回¶
- 0或1
- 0:低电平
- 1:高电平
例程¶
该例程展示一个输入引脚控制输出引脚的状态
const int ButtonPin = 8;//定义按键引脚号为常量,即D8引脚
const int LedPin = 13;//定义灯引脚号为常量,即D13引脚
int ButtonState = 0;//定义按键状态为变量,初始值为0,即低电平
void setup()
{
pinMode(ButtonPin,INPUT);//设置D8引脚为浮空输入模式
pinMode(LedPin,OUTPUT);//设置D13引脚为推挽输出模式
}
void loop()
{
ButtonState = digitalRead(ButtonPin);//读取按键引脚,并赋值给按键状态
if(ButtonState == HIGH)//若是按键状态为高电平
{
digitalWrite(LedPin,HIGH);//灯引脚输出状态更改为高电平
}
else
{
digitalWrite(LedPin,LOW);//灯引脚输出状态更改为低电平
}
}
注意¶
如果引脚输入模式设为INPUT(浮空输入),该引脚若未接入(例如导线断连等),引脚输入易受干扰,返回值不确定(可能为高,可能为低)。
为保证输入更稳定,可设置输入模式为上拉电阻输入或者下拉电阻输入。详细信息可参考pinMode()中描述的各种输入模式。
模拟引脚(A类口)均能作数字引脚(D类口)使用,例如A0,A1等。
digitalWrite()¶
描述¶
设置引脚接受的数字信号
语法¶
digitalWrite(pin,state)
返回¶
无
例程¶
该例程展示如何改变引脚状态。
const int LedPin = 13;//定义灯引脚号为常量,即D13引脚
void setup()
{
pinMode(LedPin,OUTPUT);//设置灯引脚为推挽输出模式
}
void loop()
{
digitalWrite(LedPin,LOW);//灯引脚输出状态更改为高电平
delay(1000);//维持现有状态1000ms
digitalWrite(LedPin,HIGH);//灯引脚输出状态更改为低电平
delay(1000);//维持现有状态1000ms
}
注意¶
模拟引脚(A类口)均能作数字引脚(D类口)使用,例如A0,A1等。
访问Stduino官网 ,了解更多Stduino动态
模拟I/O函数¶
analogRead()¶
描述¶
用于从输入引脚读取模拟信号。
语法¶
analogRead(Pin)
参数¶
pin:被读取的模拟信号接收引脚。
返回¶
0~4095之间的值
例程¶
该例程展示读取引脚的模拟量(电压)值变化,并在串口输出显示
const int PotentiometerPin=A0;//定义电位器引脚号为常量,即A0引脚
int PotentiometerValue = 0;//定义电位器读取值为变量
void setup()
{
Serial.begin(9600); //串口0 开启,波特率设置为9600
pinMode(PotentiometerPin,INPUT_ANALOG);//设置电位器引脚为模拟输入模式
}
void loop(){
PotentiometerValue = analogRead(PotentiometerPin);//将A0输入信号转换为0-4096之间的数值
Serial.println(PotentiometerValue); //通过串口监视器显示电位器读取值
delay(1000);//维持现有状态1000ms
}
注意¶
只有如A1、A2这样的A类端口可以读取模拟信号。
A类端口引脚可接入电位器或其他模拟量元器件,可检测输入电压为0-3.3V。输入电压值0~3.3V将被映射到数值0-4095之间。超过3.3V的视为满值,例如5V,但是不建议接入5V设备。
analogWrite()¶
描述¶
将模拟信号写入引脚。可用于制作呼吸灯或者以不同的速度驱动电动机。
语法¶
digitalWrite(pin,value)
参数¶
pin:要设置的模拟信号引脚(int类型) value:占空比,在0~255之间。
返回¶
无
例程¶
该例程展示一个呼吸灯的制作。
int analogPin = A2;
void setup()
{
pinMode(analogPin,OUTPUT_PULSE);//初始化
}
void loop()
{
for(int i=0; i<4096; i++)
{
//for循环语句,让亮度从0到255
analogWrite(analogPin,i);
delay(15);//变化太快可能看不清
}
for(int i=4095;i>-1;i--)
{
//for循环语句,让亮度从255到0
analogWrite(analogPin,i);
delay(15);
}
}
注意¶
初始化引脚时,需要设置为OUT_PWM模式。
访问Stduino官网 ,了解更多Stduino动态
通讯函数¶
串口通讯函数¶
begin()¶
描述¶
初始化选择的串口,并设置串行数据传输速率(波特率)。
语法¶
Serial.begin(speed)
参数¶
speed为串行数据传输速率(波特率),单位为比特每秒(bit/s)。与计算机进行通信时,常用的波特率为9600和115200两种。更多信息参考串口通讯与波特率。
返回¶
无
例程¶
以下例程通过Serial.begin()实现Stduino UNO与电脑间的串口通讯。
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);//初始化
}
void loop()
{
// put your main code here, to run repeatedly:
Serial.println("Hello,World");
delay(1000);
}
print()¶
描述¶
以人们可理解的ASCII文本形式打印数据到串口监视窗口。
参数¶
data:可以是多种类型。
程序语句 | 监视窗口显示 |
---|---|
Serial.print(78) | 78 |
Serial.print(1.23456) | 1.23 |
Serial.print(‘N’) | N |
Serial.print(“Hello,world!”) | Hello,world! |
格式:可以自己定义输出为几进制(格式);可以是BIN(二进制,或以2为基数),OCT(八进制,或以8为基数),DEC(十进制,或以10为基数),HEX(十六进制,或以16为基数)。对于浮点型数字,可以指定输出的小数数位。(浮点型数据,仅float单精度变量可设置,最多小数点后7位数输出。double双精度不适用于该设置。)例如
format值 | 格式种类 | 程序语句 | 监视窗口显示 |
---|---|---|---|
BIN | 二进制 | Serial.print(78,BIN) | 1001110 |
OCT | 八进制 | Serial.print(78,OCT) | 116 |
DEC | 十进制 | Serial.print(78,DEC) | 78 |
HEX | 十六进制 | Serial.print(78,HEX) | 4E |
阿拉伯数字 | 指定小数位 | Serial.println(1.23456,2) | 1.23 |
返回¶
返回写入的字节数
例程¶
以下例程通过Serial1.print()实现stduino与电脑间的串口通讯,每秒输出”Hello,world!”。
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);//初始化
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print("Hello,World");
delay(1000);
}
println()¶
描述¶
以人们可理解的ASCII文本形式打印数据到串口监视窗口,并且每次传输数据会添加一个回车符与换行符。(ASCII 13, 或 ‘r’及换行符ASCII 10, 或 ‘n’)。
参数¶
data:可以是多种类型。
程序语句 | 监视窗口显示 |
---|---|
Serial.println(78) | 78 |
Serial.println(1.23456) | 1.23 |
Serial.println(‘N’) | N |
Serial.println(“Hello,world!”) | Hello,world! |
格式:可以自己定义输出的基数(整数数据类型)或小数位数(浮点类型);可以是BIN(二进制,或以2为基数),OCT(八进制,或以8为基数),DEC(十进制,或以10为基数),HEX(十六进制,或以16为基数)。对于浮点型数字,可以指定输出的小数数位。例如
format值 | 格式种类 | 程序语句 | 监视窗口显示 |
---|---|---|---|
BIN | 二进制 | Serial.println(78,BIN) | 1001110 |
OCT | 八进制 | Serial.println(78,OCT) | 116 |
DEC | 十进制 | Serial.println(78,DEC) | 78 |
HEX | 十六进制 | Serial.println(78,HEX) | 4E |
阿拉伯数字 | 指定小数位 | Serial.println(1.23456,2) | 1.23 |
返回¶
返回写入的字节数
例程¶
以下例程通过Serial1.println()实现stduino与电脑间的串口通讯,每秒输出”Hello,world!”,并换行。
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);//初始化
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Hello,World");
delay(1000);
}
read()¶
描述¶
读取传入的串口的数据。
语法¶
Serial1.read()
参数¶
为空
返回¶
返回传入的串口数据的第一个字节(如果没有可用的数据,则返回-1)
例程¶
int newByte = 0; // 传入的串行数据
void setup()
{
Serial.begin(9600); // 打开串口,设置数据传输速率9600
}
void loop()
{
if (Serial.available() > 0)
{// 如果接收到数据
newByte = Serial.read();// 读取传入的数据:
//打印得到的数据
Serial.print("I received: ");
Serial.println(newByte);
}
}
write()¶
描述¶
写入二进制数据到串口。发送的数据以一个字节或者一系列的字节为单位。例如Serial.write(78),会传输78的二进制01001110,机器会识别为ASCII码,在串口监视窗口打印“N”(即ASCII码78对应的字符)。
返回¶
返回写入的字节数
例程¶
该例程测试println()和write()参数为78时的不同输出结果。
int byteTest = 78;
void setup(){
Serial1.begin(9600);
}
void loop(){
Serial.println("输出的结果为:");
Serial.print("使用println函数:");
Serial.println(byteTest);
Serial.print("使用write函数:");
Serial.write(byteTest);
delay(1000);
}
available()¶
描述¶
获取从串口读取有效的字节数(字符)。常用来判断串口是否接受到信号
语法¶
Serial.available()
参数¶
空
返回¶
可读取的字节数
例程¶
以下例程实现Stduino与电脑间串口通讯,利用Serial.available()判断串口是否初始化。
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);//串口初始化
}
void loop()
{
// put your main code here, to run repeatedly:
if(Serial.available())
{
//判断是否初始化
if(Serial.read()==49)
{//判断是否接收到了1,49是1的ASCII码值
Serial.println("Hello,world!");
}
}
}
peek()¶
描述¶
返回传入的串行数据的下一个字节(字符)。串口接收到的数据都会暂时存放在接受缓冲区中,使用peek()读取时,不会移除接受缓冲区中的数据。而使用read()读取数据后,会将该数据从接收缓冲区移除。也就是说,连续调用 peek()将返回相同的字符,其他与调用read()方法相同。
语法¶
Seria.peek()
参数¶
无
返回¶
返回传入的串口数据的第一个字节(String类型)(如果没有可用的数据,则返回-1)
例程¶
本例程利用peek()方法打印接受到的信号由于peek()读取的时候不会清除缓存,而是直接将缓存中的数据复制一份。
String newChar= ""; // 传入的串行数据
void setup()
{
Serial.begin(9600); // 打开串口,设置数据传输速率9600
}
void loop()
{
if (Serial.available())
{// 如果接收到数据
newChar = Serial.peek();// 读取传入的数据:
//打印得到的数据
Serial.print("I received: ");
Serial.println(newChar);
}
}
readString()¶
描述¶
从串口缓存区读取全部数据到一个字符串型的变量
语法¶
Serial.readString()
参数¶
无
返回¶
字符串
例程¶
利用Serial.readString()接收串口通讯的所有数据,并打印出来
string serialData ="";
void setup()
{
Serial.begin(9600);
while(Serial.read()>= 0){}
}
void loop()
{
if(Serial.available()>0)
{
delay(100);
seriaData = Serial.readString();
Serial.print("接收数据为:");
Serial.println(" ");
}
}
串口通信可能会影响个别数字引脚,这是由于串口复用了相应的引脚。不同开源板情况可参照下表:
访问Stduino官网 ,了解更多Stduino动态
访问Stduino官网 ,了解更多Stduino动态
时间函数¶
delay()¶
描述¶
delay()函数用来保持某一状态。它接受单个整数,此数字表示这一状态持续的时间(以毫秒为单位)。当程序遇到这个函数时,将会等待时间过去,再继续执行下一命令。然而,delay()函数并不是让程序等待的好方法。
语法¶
delay(ms)
参数¶
ms:延迟的以毫秒为单位的时间
返回¶
无
例程¶
该例程展示一个闪烁灯(接D13引脚),为了让闪烁人眼可见,设置完D13引脚输入电平后,需要等待1000毫秒后,再执行下一语句。
void setup() {
pinMode(D13,OUTPUT);//初始化13号引脚,控制LED
}
void loop() {
digitalWrite(D13,LOW); //LED灯亮
delay(1000); //保持LED灯亮1000毫秒
digitalWrite(D13,HIGH); //LED灯灭
delay(1000); //保持LED灯灭1000毫秒
}
millis()¶
描述¶
用来返回微处理器从开始运行到该条命令的时间(以毫秒为单位)可以一直计时50天左右。50天之后则会溢出,重新归零。
语法¶
millis()
参数¶
无
返回¶
返回一个无符号长整形类型的值
例程¶
该例程利用串口通讯报告程序持续时间
unsigned int time; void setup() {
// put your setup code here, to run once: Serial.begin(9600);
}
- void loop() {
// put your main code here, to run repeatedly:
Serial.print((char*) “Time:”); time = millis(); Serial.println(time); //打印从程序开始到现在的时间 delay(1000); // 等待一秒钟,避免发送大量数据
}
delayMicroseconds()¶
描述¶
函数接受单个整数(或数字)参数。此数字表示时间,以微秒(us)为单位。一毫秒等于一千微秒,一秒等于一千毫秒。
对于超过几千微秒的延迟,应该使用delay()函数。实际上微妙级别的延时会有误差。
语法¶
delayMicroseconds(us)
参数¶
us:延迟的以微秒为单位的时间
返回¶
无
例程¶
void setup() {
pinMode(D13,OUTPUT);//初始化13号引脚,控制LED
}
void loop() {
digitalWrite(D13,LOW); //LED灯亮
delayMicroseconds(1000); //保持LED灯亮1000微秒
digitalWrite(D13,HIGH); //LED灯灭
delayMicroseconds(1000); //保持LED灯灭1000微秒
}
访问Stduino官网 ,了解更多Stduino动态
位操作函数¶
bitRead()¶
描述¶
读取某一个数特定位的值。
语法¶
bitRead(x,n)
返回¶
该位的值(0或1)。
例程¶
该例程展示利用串口通信,从右向左传输11101110的每一位的值。
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
for(int i=0;i <8;i++){
Serial.println(bitRead(0xEE,i));
delay(1000);
}
}
bitWrite()¶
描述¶
修改一个数的某位上的数值。
语法¶
bitWrite(x,n,b)
返回¶
该位的值(0或1)。
例程¶
修改11101110(0xEE)的右边第二位的值为0,并利用窗口通信传输改变后的值。
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(bitRead(0xEE,1));//传输没有修改前的右边第二位值
delay(500);
bitWrite(0xEE,1,0);//修改右边第二位的值为0;
Serial.println(bitRead(0xEE,1));//传输修改后的右边第二的值
delay(500);
}
highByte()¶
描述¶
返回变量高字节。如果该变量有两个以上的字节,则取第二低字节(如有四个字节时,返回的是从右数第二个字节)
一般一个16位(双字节)的数据,比如FF1E(16进制)。那么高位字节就是FF,低位是1E,highByte()返回FF。
如果是32位(四字节)的数据,比如3E68 C16A(16进制)。高位字(不是字节)是3E68,低位字是C16A,但是利用highByte()返回的是C1(第二低字节)。
语法¶
highByte(x)
参数¶
x:被取高字节的变量(可以是任何变量类型)
返回¶
字节(byte)
例程¶
利用highByte()返回整数300的高位字节
int intValue = 300; // 300 的16进制为0x12C
void setup()
{
Serial.begin(9600);
}
void loop()
{
byte hiByte;
hiByte = highByte(intValue); //取出 intValue 的高位
Serial.println(intValue,DEC);//打引输出变量的十进制数值
Serial.println(intValue,HEX);//打印输出变量的十六进制数值
Serial.println(hiByte,DEC);
delay(10000);
}
lowByte()¶
描述¶
返回一个变量的低位(最右边)的字节。
语法¶
lowByte(x)
参数¶
x:任何类型的值
返回¶
字节(Byte)
例程¶
利用lowByte()返回整数300的低位字节
int intValue = 300; // 300 的 16 进制为 0x12C
void setup()
{
Serial.begin(9600);
}
void loop()
{
byte loByte;
loByte = lowByte(intValue); //取出 intValue 的高位
Serial.println(intValue,DEC);//打引输出变量的十进制数值
Serial.println(intValue,HEX);//打印输出变量的十六进制数值
Serial.println(loByte,DEC);
delay(10000);
}
访问Stduino官网 ,了解更多Stduino动态
拓展(Advance) I/O 函数¶
noTone()¶
描述¶
停止由tone()产生的方波。如果没有使用tone()将不会有效果。
语法¶
noTone(pin)
参数¶
pin: 所要停止产生声音接了扬声器等元件的引脚
返回¶
无
例程¶
利用A6和A7引脚接扬声器来制作警报声。
void setup()
{
pinMode(A6,OUTPUT_PULSE);
pinMode(A7,OUTPUT_PULSE)
}
void loop()
{
tone(A6, 440); //A6号引脚发声200毫秒
delay(200);
noTone(A6); //停止A6号引脚发声
tone(A7, 494); //A7号引脚发声500毫秒
delay(500);
noTone(A7); //停止A7号引脚发声
delay(300);
}
tone()¶
描述¶
可以产生固定频率的PWM信号驱动扬声器发声。发出声音的长度和声调(即频率)都可以通过参数来控制。发声持续时间需要利用tone()开启,noTone()来停止发声这种方式来控制。
语法¶
tone(pin,frequency)
返回¶
无
例程¶
利用A6和A7引脚接扬声器来制作警报声。
void setup()
{
pinMode(A6,OUTPUT_PULSE);
pinMode(A7,OUTPUT_PULSE);
}
void loop()
{
tone(A6, 440); //A6号引脚发声200毫秒
delay(200);
noTone(A6); //停止A6号引脚发声
tone(A7, 494); //A7号引脚发声500毫秒
delay(500);
noTone(A7); //停止A7号引脚发声
delay(300);
}
shiftIn()¶
描述¶
将一个数据的字节一位一位的移入。从哪个最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。
语法¶
shiftIn(dataPin,clockPin,bitOrder)
返回¶
读取到的数据
例程¶
shiftOut()¶
描述¶
将一个字节的数据通过移位输出方式逐位输出。数据可以从最高位(最左位)或从最低位(最右位)输出。在输出数据时,当一位数据写入数据输出引脚时,时钟引脚将输出脉冲信号,指示该位数据已被写入数据输出引脚等待读取。
Stduino开发板的普通IO引脚是有限的,必要时要对IO口进行拓展,才能满足外部设备对IO口的需求。如利用74HC595芯片来拓展Stduino的IO口,来设计流水灯。
语法¶
shiftOut(dataPin,clockPin,bitOrder,val)
参数¶
dataPin:输出数据的引脚,引脚需配置成输出模式。 clockPin:时钟引脚。 bitOrder:移位顺序。有高位先出(MSBFIRST)和低位优先(LSBFIRST)两种方式。 val:所要输出的数据值,该数据值将以byte形式输出。
返回¶
无
例程¶
Stduino外接74HC595芯片,用3个IO口控制8路LED灯。
int latchPin = 10;//锁存引脚
int clockPin = 9; //时钟引脚
int dataPin = 8; //数据引脚
void setup ()
{
pinMode(10, OUTPUT);//锁存引脚
pinMode(9, OUTPUT);//时钟引脚
pinMode(8, OUTPUT); //数据引脚
}
void loop()
{
for (int data = 0; data < 255; data++)
{
digitalWrite(10, LOW); //将ST_CP口上加低电平让芯片准备好接收数据
shiftOut(8, 9, LSBFIRST, data);
digitalWrite(10, HIGH); //将ST_CP这个针脚恢复到高电平
delay(1000); //延迟1秒钟观看显示
}
}
注意¶
- 使用shiftOut()函数前,数据引脚(dataPin)和时钟引脚(clockPin)必须先通过pinMode()指令设置为输出(OUTPUT)模式。
- 如果读取数据的设备是在Stduino的时钟引脚脉冲信号上升沿读取Stduino的输出数据,请确保在调用shiftOut()输出数据前,应先通过digitalWrite(clockPin, LOW)语句,将时钟引脚设置为LOW,以确保数据读取准确无误。
- shiftOut一次只能输出1字节(8位)数据。如果需要输出大于255的数值,需要通过两次使用shiftOut()输出数据。
如下程序所示:
// 高位字节先出模式
int data = 500; //待输出数据
shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); // 输出高位字节
shiftOut(dataPin, clock, MSBFIRST, data); // 输出低位字节
// 低位字节先出模式
data = 500; //待输出数据
shiftOut(dataPin, clock, LSBFIRST, data); // 输出低位字节
shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); // 输出高位字节
访问Stduino官网 ,了解更多Stduino动态
访问Stduino官网 ,了解更多Stduino动态
运算部分¶
Math¶
constrain()¶
描述¶
将一个数约束在一个固定范围内
语法¶
constrain(x,a,b)
返回¶
取值范围 | 返回值 |
---|---|
a < x < b | x |
x <= a | a |
x >= b | b |
例程¶
val1 = constrain(10, val1, 30);//将val1的值限定在10到30之间。
注意¶
map()¶
描述¶
将变量从范围A映射到范围B。例如将10位模拟输入结果转换至8位模拟输出、利用模拟输入值控制舵机角度等。
语法¶
x = map(value,fromLow,fromHigh,toLow,toHigh)
返回¶
被映射后的值
例程¶
将一个10位模拟结果转换至8位模拟输出。
void setup()
{
pinMode(A1,Input);//设置A1引脚位输入引脚
pinMode(8,OUTPUT);//设置8号引脚为输出引脚
}
void loop()
{
int x = analogRead(A1);将A1引脚模拟输入值存入x
x = map(x, 0, 1023, 0, 255);将x的值从10位缩放到8位,以符合模拟输出取值范围
analogWrite(8, x);//从8号引脚以PWM方式输出
}
max()¶
描述¶
比较两个数的最大值。
语法¶
max(x,y)
返回¶
参数中较大的那一个
例程¶
int val1 =40;
val1 = max(val1, 30);//将30与val1中最大的值赋给val1
file:///C:/Users/Astilbe/Desktop/Stduino/Stduino_Wiki/source/Computation/chart2.rst
变量部分¶
数据类型¶
string-char数组¶
描述¶
文本可以用两种方式表示。您可以使用 String数据类型
,也可以从 char类型的数组
中生成字符串并以null终止。本页描述了后一种方法。有关 String对象
的更多详细信息,请参阅: String对象 ,
它以消耗较多的内存为代价提供了更多功能。
语法¶
以下节为有效的字符串。
char Str1[15];//声明一个五个字符大小的char数组
char Str2[8] = {'S', 't', 'd', 'u', 'i', 'n', 'o'};//声明一个字符数组,并为其赋值
char Str3[8] = {'S', 't', 'd', 'u', 'i', 'n', 'o', '\0'};//添加空字符
char Str4[] = "Stduino";//声明一个空数组,并赋值
char Str5[8] = "Stduino";//声明8个字符长度的数组,并赋值
char Str6[15] = "Stduino";
例程¶
声明字符串
char *myStrings[] = {
"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5", "This is string 6"
};
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 6; i++) {
Serial.println(myStrings[i]);
delay(500);
}
} // 将浮点数换保留到小数点后三位,并转化为字符串
String()-类¶
描述¶
该语句用来构造 String类
的实例。可以利用不同的数据类型构造字符串(即将这些数据格式化为字符串)
包括:
- 用”“引起来的常量字符串,即char数组
- 用’‘引起来的单个常量字符
- String对象的另一个实例
- 常数整数或长整数
- 指定的基数的常数整数或长整数
- 整数或长整数变量
- 指定基数的整数或长整数变量
- 具有指定位数的浮点数或双精度浮点数(double)
参数¶
val:需要转换为字符串的变量。支持转换的数据类型包括:字符串、字符、字节、整数、长整数、无符号整数、无符号长整数、浮点数、双精度数。
base:(可选)需要转换整数型的基数(即对进制的规定)。
decimalPlaces:仅当val为float或double时,所需的小数位数。
返回¶
String类的一个实例。
例程¶
声明字符串
String stringOne = "Hello,Stduino!"; // 构建一个常量字符串
String stringOne = String("a"); // 将字符转换为字符串
String stringTwo = String("This is a string"); // 将一个常量字符串转化为字符串
String stringOne = String(stringTwo + " with more"); // 将两个字符串连接成一个字符串
String stringOne = String(13); // 将一个常量整数型转化为字符串
String stringOne = String(analogRead(0), DEC); // 将整数换算为十进制,并转化为字符串
String stringOne = String(45, Hex); // 将整数换算为八进制,并转化为字符串
String stringOne = String(255,BIN); // 将整数换算为二进制,并转化为字符串
String stringOne = String(millis(), DEC); // 将长整形数换算为十六进制,并转化为字符串
String stringOne = String(5,698,3); // 将浮点数换保留到小数点后三位,并转化为字符串
访问Stduino官网 ,了解更多Stduino动态
待补充¶
修改记录¶
2020/3/29
- 2020/3/26
- micros()函数更新
- peek()方法更新,返回的是char*类型,而其他人返回的是char
- tone以及noTone更新,tone不能直接控制duration
- 2020/3/22
- Serial1.print()参数需要写成(char* “hello,world”)
- 更新了Serial相关的函数。
- 串口通讯索引页需要再补充更多内容
- 2020/3/7
- 增加了位操作的两个函数bitRead()和bitWrite();时间函数的delayMicrosecond()和millis();
- 2020/6/8
- analogWrite 输出应该分两种写 以及明确输出量范围,是否去掉OUTPUT_ANALOG
访问Stduino官网 ,了解更多Stduino动态