Arduino编程用的是什么方法

Arduino编程用的是什么方法,第1张

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测电笔程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9799211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存