简单的arduino开发问题关于由电脑控制程序启动和结束

简单的arduino开发问题关于由电脑控制程序启动和结束,第1张

可以,你说的”电脑编好的程序,烧给Arduino,然后Arduino成为一个独立个体进行代码下的活动“是对arduino编程和烧写,这个环节只要一次。arduino根据你的程序运行之后可以通过串口与电脑进行双向通信(前提是你的arduino程序里有串口通信代码)。与此同时,如果你用的arduino板上的芯片还有其他未用的串行通信接口或者I2C、SPI、CAN接口,也可以与传感器进行通信,这样,就可以将传感器的数据借助arduino传输至你的电脑了。

P.S.如果你要实现的任务不复杂,用arduino IDE进行编程、汇编是可以的,如果对时效要求较高,譬如想达到1Mbps的串口传输速率或者400kHz的I2C通信或者10KHz以上的方波输出或者尽可能短的程序执行周期,建议在Atmel Studio用gcc直接对avr进行编程。效率很轻松的能达到arduino IDE编译的程序的5到10倍强。

P.P.S.你的电脑上位机程序编写看你个人爱好,如果你之前学过编程有基础,可以用VB,C++,DELPHI.如果你的基础不是太牢并且想短时间内看到成果,推荐matlab或者labview。内部集成强大的数学分析工具,可以直接使用,譬如离散卡尔曼,FFT,等等等等。

有以下疑问:

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

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

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

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

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

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

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

总之,分给我吧~~~

脉冲宽度调制或PWM是用于改变脉冲串中的脉冲宽度的常用技术。PWM有许多应用,如控制伺服和速度控制器,限制电机和LED的有效功率。

PWM的基本原理

脉冲宽度调制基本上是一个随时间变化而变化的方波。基本的PWM信号如下图所示。

有很多术语与PWM相关:

第 1 页

∙ On-Time(导通时间) - 时间信号的持续时间较长。

∙ Off-Time(关断时间) - 时间信号的持续时间较短。

∙ Period(周期) - 表示为PWM信号的导通时间和关断时间的总和。

∙ Duty Cycle(占空比) - 它表示为在PWM信号周期内保持导通的时间信号的百分比。

周期

如图所示,Ton表示导通时间,Toff表示信号的关断时间。周期是导通和关断时间的总和,并按照以下公式计算:

第 2 页

占空比

占空比用于计算为一段时间的导通时间。使用上面计算的周期,占空比计算为:

analogWrite()函数

analogWrite()函数将模拟值(PWM波)写入引脚。它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用analogWrite()函数之后,引脚将产生指

第 3 页

定占空比的稳定方波,直到下一次调用analogWrite()或在相同引脚上调用digitalRead()或digitalWrite()。大多数引脚上的PWM信号频率约为490 Hz。在Uno和类似的板上,引脚5和6的频率约为980Hz。Leonardo上的引脚3和11也以980Hz运行。

在大多数Arduino板上(ATmega168或ATmega328),此功能在引脚3,5,6,9,10和11上工作。在Arduino Mega上,它在引脚2-13和44-46上工作。旧的Arduino ATmega8板仅支持引脚9,10和11上的 analogWrite()。

第 4 页

Arduino Due支持引脚2至13以及引脚DAC0和DAC1上的 analogWrite()。与PWM引脚不同,DAC0和DAC1是数模转换器,用作真正的模拟输出。

在调用analogWrite()之前,不需要调用pinMode()将引脚设置为输出。

analogWrite()函数语法

analogWrite ( pin , value )

value − the duty cycle: between 0 (always off) and 255 (always on).

第 5 页

value - 占空比:0(始终导通)到255(始终关断)之间。

示例

int ledPin = 9// LED connected to digital pin 9

int analogPin = 3// potentiometer connected to analog pin 3

int val = 0// variable to store the read value

void setup() {

pinMode(ledPin, OUTPUT)// sets the pin as output

第 6 页

}

void loop() {

val = analogRead(analogPin)// read the input pin

analogWrite(ledPin, (val / 4))// analogRead values go from 0 to 1023,

// analogWrite values from 0 to 255

}

第 7 页

百度文库

搜索

arduinonano怎么输出脉冲宽度


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

原文地址: http://outofmemory.cn/yw/11957738.html

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

发表评论

登录后才能评论

评论列表(0条)

保存