arduino刷grbl教程

arduino刷grbl教程,第1张

1到grbl官方网站下载源码,解压缩。
2打开arduino IDE,点打开,定位到所下载的grbl源码,打开grbl项目
3USB连接arduino uno板。
4编译并下载到uno板即可。

一、ShiftIn()函数

      将一个数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。

        注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。

  shiftIn(dataPin,clockPin,bitOrder)

  dataPin:输出每一位数据的引脚(int)

  clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)

  bitOrder:输出位的顺序,最高位优先或最低位优先

二、74HC165概述

      74HC165是一款高速CMOS器件,74HC165遵循JEDEC标准no7A。74HC165引脚兼容低功耗肖特基TTL(LSTTL)系列。
      74HC165是8位并行读取或串行输入移位寄存器,可在末级得到互斥的串行输出(Q7和Q7),当并行读取(PL)输入为低时,从D0到D7口输入的并行数据将被异步地读取进寄存器内。而当PL为高时,数据将从DS输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位(Q0→Q1→Q2,等等)。利用这种特性,只要把Q7输出绑定到下一级的DS输入,即可实现并转串扩展。
      74HC165的时钟输入是一个“门控或”结构,允许其中一个输入端作为低有效时钟使能(CE)输入。CP和CE的引脚分配是独立的并且在必要时,为了布线的方便可以互换。只有在CP为高时,才允许CE由低转高。在PL上升沿来临之前,不论是CP还是CE,都应当置高,以防止数据在PL的活动状态发生位移。
      SH/LD为低,并口数据存入8个位寄存器中。8个位寄存器分别为Q0、Q1、Q2、Q3、Q4、Q5、Q6、Q7。此时Q7里已经有值,可以直接读取了所以,逻辑可以是这样:

      读取Q7的数据,然后IN_CLK_LOW;IN_CLK_HIGH;制造一次上升沿,执行移位 *** 作,使Q6的值移位到Q7中。SH/LD为高,允许移位。一个时钟脉冲,QH向外输出一位数据,同时,从SER采集一位数据补充8位寄存器。

        如上级联情况,右边74HC165的SER悬空,采集数据为0。

        左边74HC165,一个脉冲,QH输出一位数据,同时,从SER采集一位数据补充低位。相当于如下:
开始前:

H1-G1-F1-E1-D1-C1-B1-A1H2-G2-F2-E2-D2-C2-B2-A2

开始传输:

1、1G-1F-1E-1D-1C-1B-1A-2H2G-2F-2E-2D-2C-2B-2A-0

2、1F-1E-1D-1C-1B-1A-2H-2G2F-2E-2D-2C-2B-2A-0-0

3、1E-1D-1C-1B-1A-2H-2G-2F2E-2D-2C-2B-2A-0-0-0

        ……

14、B2-A2-0-0-0-0-0-00-0-0-0-0-0-0-0

15、A2-0-0-0-0-0-0-00-0-0-0-0-0-0-0

16、0-0-0-0-0-0-0-00-0-0-0-0-0-0-0

这样,就把2个级联的74HC165的并口数据,全部以串口形式传输给了MCU。

三、实验

//定义你的PIN在哪儿

intlatchPin=8;

intdataPin=9;

intclockPin=7;

// 定义变量来保存数据 //移位寄存器//从一个非零数字开始可以帮助//故障排除byteswitchVar1=72;//01001000

void setup(){

//启动串行Serialbegin(9600);

//定义引脚模式pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,INPUT);

}

void loop(){

//将其设置为1以收集并行数据digitalWrite(latchPin,1);

//将其设置为1以收集并行数据,等待

  delayMicroseconds(20);//设置为0以串行传输数据 digitalWrite(latchPin,0);

//移位寄存器为串行模式

  //将每个移位寄存器收集到一个字节

  //附在芯片上的寄存器最先出现。

switchVar1=shiftIn(dataPin,clockPin);

//打印结果

//(7, 6, 5等)将被丢弃 //具有高输入的第一个引脚

Serialprintln(switchVar1,BIN);

Serialprintln("-------------------");//因此,所有这些引脚都可以跟上 delay(500);

}

byteshiftIn(intmyDataPin,intmyClockPin){

inti;

inttemp=0;

intpinState;

bytemyDataIn=0;

pinMode(myClockPin,OUTPUT);pinMode(myDataPin,INPUT);  for(i=7;i>=0;i--)

{

digitalWrite(myClockPin,0);

delayMicroseconds(02);

temp=

digitalRead(myDataPin);

if(temp){

pinState=1;

//把比特设置为0

myDataIn=myDataIn|(1<<i);

}

else{

//关掉--只需要调试

pinState=0;

}

//调试打印语句

//串行打印(PopStand);

//串行打印(“”);

digitalWrite(myClockPin,1);

}

//调试打印语句空格

  returnmyDataIn;

}

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教程专栏学习。

Arduino是一种基于开源硬件和软件的电子开发平台,它包括一个基于C/C++编程语言的开发环境和各种模块化的硬件模块。Arduino的核心是一个基于Atmel AVR微控制器的电路板,这个电路板上包含了数字和模拟输入/输出引脚、USB接口、电源接口等。用户可以通过编写Arduino程序,控制这些硬件模块的运作,实现各种功能,如LED闪烁、电机驱动、温度监测、声音识别等等。Arduino的优点在于它简单易用、开源、灵活、价格低廉,适合初学者和专业开发者使用,广泛应用于教育、创客、艺术等领域。


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

原文地址: http://outofmemory.cn/dianzi/12578079.html

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

发表评论

登录后才能评论

评论列表(0条)

保存