arduino 程序解析, 求真正理解单片机的牛人

arduino 程序解析, 求真正理解单片机的牛人,第1张

有以下疑问:

1 SoftPWMSet 这是什么鬼? arduino的pwm输出,可以直接使用analogwrite函数。若是你自己写的,;源文件丢出来给人看看是啥。

2 还有"pins_arduinoh"也是,如果是自己写的,都把它贴出来。

3 arduino的中断,不是这样用的。直接使用<avr/interrupth>,会造成冲突

4 对你这个程序,你遇到的困难是?想跟网友求助那个问题?看了10多分钟,还是一头雾水。你这个我大概看了下,目测你的程序是这样的:3,5,10,9,这四个引脚来控制两个直流电机,直接扩流来驱动电机,引脚8接的是一个LeD,用于显示状态,还有个11引脚,从注释的字面上理解,应该是超声波的相关引脚,但是一个引脚,超声波,我愚钝,看不出来的是干嘛。

看了10多分钟,还没搞懂你想要干嘛,根据超声波测得的距离,来控制小车前进后退?还是前进过程中,超声波检测到障碍来做避障?

根据前面的分析,你这段代码,肯定是不通过编译的,错误提示呢?

你要网友帮你修正程序,但是又不知道你的需求,怎么改?

总之,分给我吧~~~

用Arduino和手机控制LED需要准备材料和工具:Arduino板、LED灯、蓝牙模块、智能手机。

1、先准备一个Arduino板。

2、然后将LED连接到Arduino的第13个引脚和接地,将蓝牙模块的5V引脚连接到Arduino的5V,将模块的接地连接到Arduino。

3、然后用你的手机在官方网站上下载Arduino。

4、进入官网后,点击下载即可下载应用程序。

5、下载应用程序后,打开手机上的蓝牙模块,然后单击“享受”以使用Arduino和手机控制LED。

 使用按键(PUSHBUTTON)控制LED灯号的开关,当按键被按下时打开LED灯号,按键放开时关闭LED灯号。

材料

Arduino的主板×1

LED×1

按钮或开关开关×1

10K电阻×1

面包板×1

单心线X N

接线

把LED接到PIN13,长脚(阳极)接到PIN13,短脚(阴极)接到GND;

按钮一支脚接到+5 V;

PIN2接到按钮的另一支脚,同一支脚位接一个10K的电阻连到GND;

源码如下:

const int buttonPin = 2; // the number of the pushbutton pin

const int ledPin = 13; // the number of the LED pin

// variables will change:

int buttonState = 0; // variable for reading the pushbutton status

void setup() {

// initialize the LED pin as an output:

pinMode(ledPin, OUTPUT);

// initialize the pushbutton pin as an input:

pinMode(buttonPin, INPUT);

}

void loop(){

// read the state of the pushbutton value:

buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed

// if it is, the buttonState is HIGH:

if (buttonState == HIGH) {

// turn LED on:

digitalWrite(ledPin, HIGH);

}

else {

// turn LED off:

digitalWrite(ledPin, LOW);

}

说明:

L01〜L02:定义按键与LED的脚位,按键接在PIN2码,而LED接在PIN13;

L16:读取按键的状态并保存到buttonState变数里;

L20〜L26:这支程式的目的是按下按键时要打开LED灯号,放开按键时要关闭的LED灯号,因此,假如buttonState为高,代表按键状态是按下(压制)的,此时要打开LED,反之,假如buttonState为低,代表按键状态是放开的,此时要关闭LED。

注:这支是Arduino的内建的程序,点选

File > Examples > 2Digital > Button

就可以找到。

什么是中断

简单的来说就是停止现在的事情来做另一件事情,做完在返回继续一开始的任务

3中断的定义

中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。

中断系统特点:

①分时 *** 作。CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用率;

②实时响应。CPU 能够及时处理应用系统的随机事件,系统的实时性大大增强;

③可靠性高。CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高

中断过程

对于单片机来讲,中断是指CPU在处理某一时间A时,发生了另一事件B请求CPU立刻去处理(中断发生或中断请求);CPU暂时停止当前的工作(中断响应),转而去处理事件B(中断服务),待CPU处理事件B完成后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。这一过程称为中断,注意是整个过程,而不是单一的停止一件事的意思。

举例:你打开火,烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断

4中断程序的结束与退出

volatile boolean 状态;

void attachInterrupt_fun_FALLING_2() {

状态 = !状态;

digitalWrite(4,状态);

}

void setup(){

状态 = false;

pinMode(2, INPUT_PULLUP);

pinMode(4, OUTPUT);

attachInterrupt(digitalPinToInterrupt(2),attachInterrupt_fun_FALLING_2,FALLING);

}

void loop(){

}

复制

按键第一次按进入中断程序,第二次按退出中断

布尔型变量 只有两种结果 例如非真即假 0和1 这种

注释 :第一次状态为真时,第二次按下就为假,这样便可以达到一开一关的效果

不采用变量实现一开一关

注释 第一次按下状态假设为1,松开后变0,则第二次的初始状态为0,按下时与前一次状态不同,执行关闭

5程序的优先级

单片机的运行是一个代码运行的,中断程序就相当于一个优先级,可以打断单片机的运行,从而先运行其他程序

6空程序的运行

满足条件则运行空格里的程序,可当空语令运行,卡死在这一步,按键按下,数字输入变0,按住不放时,程序不变卡在空语句。状态不变,松开时,数字信号变为高电平1,则跳出中断语句

执行空语句时,空语句需要放入中断程序中,否则不运行

7数字信号的打印

void setup(){

Serialbegin(9600);

pinMode(4, INPUT);

}

void loop(){

pinMode(4, INPUT);

Serialprintln(digitalRead(4));

}

复制

注释:管脚模式一定要选好是输入还是输出

一开始想打印出按钮按下的数字信号,因为没有设定好管脚模式,导致检测不出来数字信号

上图所用的按扭为共阴按钮,因此数字信号管脚检测模式要设置为上拉输入,上拉输入可检测出 ##低电平

上拉输入的检测原理

8…程序错误的检测

先检测主程序是否错误

若串口数据不显示,则为设置程序模块有问题

跟检测主程序一样,加入打印串口数据,便可检测出是哪一步出现了问题

所有模块

所有模块代码

#include <PinChangeInth>

void attachPinInterrupt_fun_FALLING_2() {

digitalWrite(5,LOW);

digitalWrite(6,LOW);

digitalWrite(7,LOW);

digitalWrite(7,HIGH);

while (digitalRead(2) == 0) {

Serialprintln("卡死了");

}

}

void setup(){

Serialbegin(9600);

pinMode(2, INPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(2, INPUT_PULLUP);

PCintPort::attachInterrupt(2,attachPinInterrupt_fun_FALLING_2,FALLING);

}

void loop(){

digitalWrite(5,HIGH);

delay(1000);

digitalWrite(5,LOW);

digitalWrite(6,HIGH);

delay(1000);

digitalWrite(6,LOW);

digitalWrite(7,HIGH);

delay(1000);

digitalWrite(7,LOW);

}

复制

arduino

家用水泵多少钱一台

精选推荐

广告

51单片机,按键控制流水灯,流水灯控制

216下载·3评论

2012年6月26日

STM32复习之路——按键控制流水灯中断

4896阅读·2评论·4点赞

2019年12月19日

Arduino笔记-MsTimer2库通过中断实现两种流水灯样式

55阅读·1评论·0点赞

2022年10月21日

zigbee按键中断点亮流水灯

1435阅读·0评论·2点赞

2019年10月28日

Stm32的按键控制流水灯

2737阅读·1评论·3点赞

2022年4月18日

51基础——外部中断:手动按键实现流水灯

1354阅读·0评论·1点赞

2022年5月7日

一字粗跟凉鞋

精选推荐

广告

51按键外部中断控制流水灯

15W阅读·3评论·24点赞

2021年1月1日

51单片机外中断流水灯

4097阅读·1评论·7点赞

2021年12月3日

单片机组合实验一——中断控制流水灯

4300阅读·0评论·5点赞

2020年2月22日

STM32学习(5)按键控制流水灯(中断实现)

17W阅读·1评论·8点赞

2019年10月19日

STM32cubeIDE之外部中断控制LED流水灯(按键控制流水灯方向)

9059阅读·0评论·10点赞

2022年4月4日

51单片机 按键控制LED流水灯模式

3154阅读·0评论·4点赞

2022年7月30日

按键控制流水灯的运行与暂停

14W阅读·4评论·10点赞

2019年1月21日

利用中断控制流水灯的启停

4213阅读·2评论·8点赞

2020年4月14日

蓝桥杯51单片机之数码管从点亮到动态时钟的实现单片机开发初学者必掌握

1503阅读·0评论·4点赞

2020年12月25日

中断响应流水灯控制程序

10W阅读·0评论·7点赞

2017年12月11日

51单片机(中断系统)按键控制LED流水灯模式(2)

5953阅读·4评论·4点赞

2022年3月4日

STM32cubeIDE学习汇总(二)----外部中断控制LED和流水灯

7148阅读·2评论·4点赞

2022年3月12日

中断控制流水灯c语言程序,51单片机按键中断控制流水灯

3281阅读·0评论·0点赞

2021年6月6日

去首页

看看更多热门内容

有的‘阶新科技’,以下是控制程序:

LED 单线翻转归零码驱动例子

说明: 由于数据脉宽最短只有几百纳秒, 需要使用示波器根据资料时序调驱动。

void Send_8bit(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{

DAI=1;

if(dat&0x80) // CODE_1

{

DAI=1;_nop_();_nop_();_nop_();

DAI=1;_nop_();_nop_();_nop_();

DAI=1;_nop_();_nop_();_nop_();_nop_();

DAI=0;_nop_();

} e

lse // CODE_0

{

DAI=1;_nop_();_nop_();_nop_();

DAI=0;_nop_();_nop_();_nop_();

DAI=0;_nop_();_nop_();_nop_();

DAI=0;_nop_();_nop_();_nop_();

} d

at=dat<<1;

}

} v

oid Send_24bits(uchar dat1,uchar dat2,uchar dat3)

{

Send_8bit(dat1);

Send_8bit(dat2);

Send_8bit(dat3);

} v

oid Rst(void ) // Data-Low>>50 us

{

uint s;

DAI=0;

for(s=0;s<50;s++){_nop_();_nop_();_nop_();}

}

GPIO ( General Purpose Input Output ) 全名为通用输入输出,是单片机的一种管脚,即可以做输入、也可以做输出, 常用于将开关、按键、LED、传感器等接到单片机。

       数字IO脚有两个状态: HIGH 或 LOW,  HIGH就是高电压(5V,  表示1), LOW是低电压(0 V, 表示0)   可以通过软件控制管脚的电平状态, 从而实现对外围设备的控制

2, Arduino 模块

Arduino 模块就是把电子元件做在一个电路板上,  引出几个管脚  使用者只需把管脚连接到Arduino板, 即可组成电路  这样做很方便,  初学者甚至不需要懂得元件或 电路, 就能开展电子制作

Arduino 模块种类非常多,包括:LED, 开关, 各类传感器等 

俺在淘宝上购买一个Arduino 37件模块套装(约70元)

以下进入本次实验学习

二、点亮LED灯(使用LED模块)

1, LED模块

如下图:

这种LED模块上面有一个发光二极管(即LED),  有两个状态:亮或灭

模块有三个引出管脚,  GND接地, VCC接5V, IN 接IO脚   

不同厂家的模块对管脚标注方法可能不同,    有的厂家把GND标为 "-"号,  把 IN 标为 S (即 Signal 信号的意思)

2, 接线

用杜邦线把LED模块的三个脚接到Arduino板上,    GND接地, VCC接5V, IN 接 D5脚 (IO脚可以随便选)

3, 在Arduino IDE中写个Arduino程序控制D5脚上的LED灯

int pin = 5; //LED的管脚

void setup() {

pinMode(pin, OUTPUT); //设置管脚为输出模式

}

void loop() {

digitalWrite(pin, 1); //向管脚写入1, 设置为高电平, 则LED灯亮

}

运行效果:   LED灯亮起

4, 再写个程序,让LED灯闪烁

int pin = 5; //连接LED的IO脚

void setup() {

pinMode(pin, OUTPUT); //设置管脚为输出模式

}

void loop() {

digitalWrite(pin, HIGH); //将管脚设置为高电平, 则LED灯亮

delay(1000); //等待1000毫秒

digitalWrite(pin, LOW); //将管脚设置为低电平, 则LED灯灭

delay(1000); //等待1000毫秒

}

运行效果:   LED灯闪烁 (亮1秒, 灭1秒)

三、点亮LED灯  (使用LED元器件自已搭电路)

1, 准备元器件和器材

     发光二极管(LED) 一个

     面包板一块

     1K 电阻一个

      杜邦线若干

 

2, 了解LED

     发光二极管(LED) 是一种单向导电的二极管  有两个脚 两个脚有一长一短,短的是连接GND,长的是连接正极 (注意: 接反了不会亮的)

     当适当的电流通过时,  LED将发光

    一般的LED发光时电流值为 3- 10 mA,  电流太小不发光,  电流过大则会烧坏LED  电流小则亮度低, 电流大一些则更亮  

    LED两端电压不能太大, 一般在1 -  2 V  连接在电路中时, LED会产生压降,约为17V

    LED接线的 电路原理图如下:

    

      上图中:   LED压降约为17V,   当GPO脚输出为5V时,  电阻R两端电压为33V, 根据欧姆定律计算电流  =   33V / 1000 = 33mA  由于33mA电流通过 LED, 则LED将发光

       当GPIO脚输出0V时, 两端无电压, 无电流,则LED灭

       上图中,如果把电阻换为 330欧姆, 当GPO脚输出为5V时,   则电流 = 33V / 330 = 10 mA  电流更大一些,则LED会更亮一些

    

3, 用面包板接线

把LED和电阻插入面包板, 用杜邦线接线,  示意图如下:  

4, 在Arduino IDE中写个Arduino程序控制D5脚上的LED灯

以上就是关于arduino 程序解析, 求真正理解单片机的牛人全部的内容,包括:arduino 程序解析, 求真正理解单片机的牛人、怎样用Arduino和手机控制LED、如何用arduino来用按钮控制RGB LED等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存