arduino编程语言入门:
1 关键字
语法符号:
;
;是一条语句结束的标志,供编译器识别,必须得有。
{}
{}将多条语句合成一个复合语句,能划分语句的作用域,增强整体整体的可读性。
//
//行注释,该行//后的所有语句,文字将不被编译器所编译、执行。相似的,还有,在中的所有语句,文字将不被编译器所编译、执行。
if(表达式)
{
语句A;
}
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else if(表达式n)
{
语句n;
}
else
{
语句n+1;
}
for(初始表达式;条件表达式;循环变量表达式)
{
循环体语句;
}
switch(表达式)
{
case 表达式常量1:语句序列1;
case 表达式常量2:语句序列2;
case 表达式常量i:语句序列i;
case 表达式常量n:语句序列n;
default:语句序列n+1;
}
while(条件表达式)
{
循环语句;
循环变量表达式;
}
do
{
循环体语句;
}while(条件表达式);
break;
continue;
return x;
goto 语句标号;
2 数据类型:
3 常量
HIGH | LOW 表示数字IO口的高低电平。HIGH 表示高电(1),LOW 表示低电平(0)。
INPUT | OUTPUT 表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT 表示输出(AVR单片机能提供5V电压 40mA电流)。
true | false true 表示真(1),false表示假(0)。
4 程序结构
声明变量及接口名称(例如:int i;int ledPin=13;)。
void setup() 函数在程序开始时使用,初始化变量,管脚模式,调用库函数等(例如:pinMode(ledPin,OUTUPT);)。
void loop() 在void setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。使用它来运转Arduino。
5 数字 I/O
以下型号为UNO
pinMode(pin, mode);
数字IO口输入输出模式定义函数,pin表示为0~13, mode表示INPUT或OUTPUT。
digitalWrite(pin, value) ;
数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。
必须先定义为输入或输出模式digitalWrite才能生效。
int digitalRead(pin);
数字IO口读输入电平函数,pin表示为0~13,value表示为HIGH或LOW。比如可以读数
字传感器。
6 模拟IO
int analogRead(pin);
模拟IO口读函数,pin表示为0~5(ArduinoDiecimila为0~5,Arduino nano为0~7)。比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。
analogWrite(pin, value) - PWM
数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数通常在引脚的旁边标注~,pin表示3, 5, 6, 9,10, 11,value表示为0~255。比如可用于电机PWM调速或音乐播放。
7 扩展 I/O
shiftOut(dataPin, clockPin, bitOrder,value);
SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。
unsigned long pulseIn(pin, value);脉冲长度记录函数,返回时间参数(us),pin表示为0~13,value为HIGH或LOW。比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间。
8 时间函数
unsigned long millis();返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。
delay(ms);延时函数(单位ms)。
delayMicroseconds(us);延时函数(单位us)。
9 数学函数
min(x, y) ;求最小值。
max(x, y) ;求最大值。
abs(x) ; 计算绝对值。
constrain(x, a, b) ; 约束函数,下限a,上限b,x必须在ab之间才能返回。
map(value, fromLow, fromHigh, toLow,toHigh);约束函数,value必须在fromLow与toLow之间和fromHigh与toHigh之间。
pow(base, exponent);开方函数,base的exponent次方。
sq(x); 平方。
sqrt(x);开根号。
三角函数:
sin(rad);
cos(rad);
tan(rad);
10 随机数函数
randomSeed(seed);随机数端口定义函数,seed表示读模拟口analogRead(pin)函数 。
long random(max);随机数函数,返回数据大于等于0,小于max。
long random(min, max);随机数函数,返回数据大于等于min,小于max。
11 外部中断函数
attachInterrupt(interrupt, , mode;外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 下降沿中断。
detachInterrupt(interrupt);中断开关,interrupt=1 开,interrupt=0 关。
interrupts();中断使能函数,用于使能中断。
noInterrupts();中断禁止函数,禁止中断。
12 串口收发函数
Serialbegin(speed);串口定义波特率函数,speed表示波特率(串行每秒传输数据位数的速率),如9600,19200等。
int Serialavailable() 判断缓冲器状态。
int Serialread();读串口并返回收到参数。
Serialflush();清空缓冲器。
Serialprint(data);串口输出数据。Serialprint(数据,数据的进制) 默认为十进制(DEC)
Serialprintln(data);串口输出数据并带回车符。
13 重要
以上列举了一些较常用的函数,事实上,在Arduino的安装目录下的libraries还有众多函数可以根据需要进行调用和学习。
也可以自己编写函数然后按照libraries目录下其他函数的格式打包好。放置在libraries目录下,然后自己就可以在IDE环境下调用自己编写的函数了。
通过以上介绍,其实大家可以看到arduino编程语言入门并不难,以上内容分享出来给大家作为参考,想要了解更多更专业的arduino编程语言教程可以去DF创客社区Arduino教程专栏学习。
新建一个工程
打开keil uVision5,并新建一个工程
建立一个名为Test的工程
2
新建一个s文件 (1) 工程创建完毕后,对Source Group文件点击右键再点击ADD new item to group (2) 选择文件类型,添加文件 (3)
3
编译 点击左上角编译按钮,开始编译程序,此时0错误,0警告,表示编译成功。
4
stm32程序仿真调试 (一)调试设置 1点击魔法棒设置output一栏,选择
查看更多
关于程序,我们列出初始化部分和主程序,以便让大家对其有个了解。全部代码大家可以 点此下载 。这里要强调一点的是我们使用了ladyadanet设计的电机驱动库AFMotor,大家需要把解压后的文件放到Arduino安装目录libraries的文件夹下。
程序片段如下:
ARDUINO 代码复制打印
/
BOXZ is is an open source robot platform for interactive entertainment!
We connected Arduino,Plexiglass(PMMA) Origami and your idea together,
so we can easily and quickly build a remote robot by ourself!
We can use it to playing football game, racing, fighting or some other interesting things!
Author: Guangjun Zhu
Email: [email]zgj0729@163com[/email]
Code license: Attribution-NonCommercial-ShareAlike 30 Unported (CC BY-NC-SA 30)
/
#include
#include
/
b_motor_stop(): stop motor
b_motor_com(): for Manual Operator
b_servo_ini();
b_servo_com();
b_skill();
/
//-------------------define motor----------------------------------------------//
AF_DCMotor motorL(1,MOTOR12_8KHZ); //connect to M1
AF_DCMotor motorR(2,MOTOR12_8KHZ); //connect to M2
int motor_speed = 200; //[modifid]motor speed 150-200,---min:100;max:255
int motor_delay = 400; //[modifid]delay time in step
//-------------------define servo----------------------------------------------//
Servo hand_l_servo; // create servo object to control a servo
Servo hand_r_servo; // create servo object to control a servo
int hand_l_pos = 90; //
int hand_r_pos = 90; //
int hand_delay = 1; //[modifid] speed of hand
//------------------main program-----------------------------------------------//
void setup()
{
Serialbegin(9600);
b_motor_stop();
b_servo_ini();
delay(2000); //waiting time
Serialprintln(“Hello! BOXZ!”);
}
void loop()
{
int key;
if(Serialavailable() 》 0) {
key = Serialread();
if(key 》= 30 && key 《= 122) {
b_motor_com(key);
b_servo_com(key);
b_skill(key);
}
}
// servo_test();
}
从中我们可以看出,盒仔的主程序很少,调用了不同的功能子程序来实现其功能。盒仔是通过Arduino的串口将数据发送给蓝牙控制板,由笔记本电脑或者手机接收蓝牙串口数据,大家可以使用任何串口终端控制我们的盒仔。目前我们用windows7笔记本,MacBook和Iphone三种终端测试通过了蓝牙和Zigbee两种通讯模块,将来也会推出Wifi通讯。,由于软件还有很多功能需要添加,目前就暂不公布了,不过大家可以用串口助手实现 *** 作,就像我们发布视频中的一样, *** 作也很方便。
盒仔Base的程序是通过接收来自于键盘按键来进行动作判断的,只支持单个的字符。而在盒仔 Pro的版本中我们将采用更强大的字符串通讯方式,让大家拥有更棒的互动体验!
盒仔的 *** 作就像打电脑游戏一样, *** 作方式按键定义如下:
方向控制按键定义:‘w’-前进;‘a’-左转;‘s’-后退;‘d’-右转;‘ ’(空格)-急刹车 (如果你按下键盘的Shift键,将会激活点动模式,配合相应的方向键,例如W为向前一小步,A为向左转90°)
当然在我们提供的代码里面还包括舵机部分的控制,你可以用舵机控制左右手臂的摆动,点动等多种动作,具体定义大家可以看程序的注释,本教程以介绍盒仔 Base的安装为主,就不过多描述。
可以,你说的”电脑编好的程序,烧给Arduino,然后Arduino成为一个独立个体进行代码下的活动“是对arduino编程和烧写,这个环节只要一次。arduino根据你的程序运行之后可以通过串口与电脑进行双向通信(前提是你的arduino程序里有串口通信代码)。与此同时,如果你用的arduino板上的芯片还有其他未用的串行通信接口或者I2C、SPI、CAN接口,也可以与传感器进行通信,这样,就可以将传感器的数据借助arduino传输至你的电脑了。
PS如果你要实现的任务不复杂,用arduino IDE进行编程、汇编是可以的,如果对时效要求较高,譬如想达到1Mbps的串口传输速率或者400kHz的I2C通信或者10KHz以上的方波输出或者尽可能短的程序执行周期,建议在Atmel Studio用gcc直接对avr进行编程。效率很轻松的能达到arduino IDE编译的程序的5到10倍强。
PPS你的电脑上位机程序编写看你个人爱好,如果你之前学过编程有基础,可以用VB,C++,DELPHI如果你的基础不是太牢并且想短时间内看到成果,推荐matlab或者labview。内部集成强大的数学分析工具,可以直接使用,譬如离散卡尔曼,FFT,等等等等。
看你的程序用的是H桥驱动两个直流电机正反转。
调试时不用接电机,H桥驱动有指示灯就可以看到4个端口的状态。
你的else这段不知道怎么回事,是把所有不是123的变为右转。。。
程序修改了一些,刚才试试可以编译通过。在串口调试软件可以看到PC键盘发送1/2/3/4给arduino,能收到arduino的反馈。因为串口有缓冲区,程序自动发送连续的1时会造成arduino 持续响应这个1,而等很久才相应改变后的按键。这点需要仔细调试发送端程序。
这个程序不推荐Ctrl+Shift+M ,用 STC-ISP 676 或更高版本有自动发送字符功能,更容易调试串口。PC键盘串口调试好后再换成蓝牙串口板。
#define p11 9
#define p12 10
#define p21 11
#define p22 12
void setup()
{
Serialbegin(9600);
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
}
void loop()
{
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
int a=0,b=1;
while (Serialavailable() > 0)
{
Serialflush(); //清除串口缓存
delay(500); //等待小段时间
int inChar = Serialread();
inChar=inChar-0x30; // 数字1的 ASCII码是 16进制0x31
if(inChar == 1) //foward
{
Serialprint("key 1 pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(1000); // 按键后作用时长
}
else if(inChar == 2) //back
{
Serialprint("key 2 pressed"); //调试目的
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(1000);
}
else if(inChar == 3) // turn left
{
Serialprint("key 3 pressed"); //调试目的
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(1000);
}
else if(inChar == 4) // turn right
{
Serialprint("key 4 pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(1000);
}
else //其他按键,停止
{
Serialprint("key other pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,LOW);
}
}
}
以上就是关于Arduino编程用的是什么方法全部的内容,包括:Arduino编程用的是什么方法、stm32写arduino程序怎么调试、如何制作arduino测电笔程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)