Arduino

针对与Arduino兼容的开源硬件和软件开发人员的问答

3
PROGMEM:是否必须将数据从闪存复制到RAM才能读取?
我在理解内存管理时遇到了一些困难。 Arduino文档说,可以在程序存储器中将常量(如字符串)或任何我不想更改的常量保留在程序存储器中。我认为它嵌入在代码段中的某个位置,这在von-Neumann体系结构内必须是完全可能的。我想以此来使我的UI菜单显示在LCD上。 但是,我对于那些仅从程序存储器中读取和打印数据的指令感到困惑: strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy. Serial.println( buffer ); 为什么在访问前我必须将该死的内容复制到RAM?如果这是真的,那么所有代码​​会怎样?它在执行之前也已加载到RAM吗?那么仅使用2kiB RAM时如何处理代码(32kiB)?那些拿着软盘的小妖精在哪里? 更有趣的是:像这样的表达式中的文字常量会发生什么: a = 5*(10+7) 在将5、10和7加载到寄存器之前,它们真的被复制到RAM了吗?我简直不敢相信。

4
莱昂纳多(32u4):以编程方式对其进行砌砖的方法
我认为,当莱昂纳多(Leonardo)面世时,我读过一些关于谨慎做事的文章,这可能会导致它不再加载任何新草图,因此必须重写引导程序。因为我计划使用节能选项,例如禁用未使用的硬件组件(例如USB端口),所以我担心会做错事情。 到目前为止,我发现了一个Leonardo美食: 如果禁用了中断,则上传新草图将失败,除非在Arduino IDE显示“正在上传...”后立即按下“重置”按钮。 哪些东西(与通常的硬件相关的想法除外,例如将输出配置的引脚连接到固定电势)会损坏控制器或需要使用新的引导程序重新刷新Leonardo?

3
多个独立的LED模式
我有一个问题,乍一想(是Arduino的新手),我虽然是Arduino的完美应用程序。但是,在尝试并未能实施之后,我怀疑自己! 简而言之-我需要独立控制许多LED,其中许多LED都有自己的样式-例如“ 5秒钟打开-5秒钟关闭”。“连续闪烁”-或诸如“ 2次闪烁,暂停,1次闪烁”之类的序列。显然,如果没有线程的奢侈,我会变得有些困惑。非常高兴听到a)Arduino是最佳选择,b)如果是-我该怎么做! 提前致谢 :)

5
堆栈存储器如何用于功能和局部变量?
我想将一些值保存到EEPROM,还希望通过避免一些变量声明来释放SRAM,但是EEPROM存储器是按字节分配的。 如果要存储一个int值,则必须重复使用一些表达式。我以为我会为它们做一些功能。但是我担心,如果创建一个函数,它仍然会占用SRAM内存,最好声明一个int变量而不是使用EEPROM。 函数和局部变量如何存储在SRAM中?它是否仅存储闪存中功能指针的地址,还是所有变量和命令都存储在堆栈中?

1
如果Arduino Uno只有6个数字PWM引脚,如何支持多达12个伺服器?
根据此: 伺服库在大多数Arduino板上最多支持12个电机,在Arduino Mega上最多支持48个电机。在Mega以外的板上,使用该库会禁用引脚9和10上的AnalogWrite()(PWM)功能,无论这些引脚上是否有Servo。在Mega上,最多可以使用12个伺服器,而不会影响PWM功能。使用12到23个电机将禁用引脚11和12上的PWM。 然而,根据此: 数字I / O引脚14(其中6个提供PWM输出) 那么,如果Uno只有6个可提供PWM输出的数字I / O引脚,那么如何控制6个以上的伺服器呢?

4
Arduino Severino设计用于哪种类型的串行通信?
Arduino变得非常昂贵(我来自Raspberry PI价格的2/3),因此我创建了一个Arduino Severino克隆。 我曾将该设备与RS-232 Usb-Serial转换器一起使用。但是(很长一段时间)后,设备停止工作。我的朋友提出一个观点,即RS-232通信的范围为+6到-6 V(阈值为+3到-3伏)。 因此,我尝试了使用0至5伏电压的FT232。我有一点中文 FTDI芯片旨在实现以下目的: 但是,连接后,它的行为异常。(它使我的PC崩溃了,通信LED一直亮着……)我意识到Arduino板可能由于不同的原因而损坏(很可能会发生意外短路)。 那么,该“ Arduino”设计用于哪种通信类型?
8 serial 

3
曼彻斯特图书馆不会针对Attiny85进行编译
我正在使用Attiny85创建无线传感器。我想将数据发送到arduino uno,所以我从Spark Fun购买了315mhz rf链接套件。由于Attiny85没有TX,因此我决定使用曼彻斯特库,但是它不会在Attiny85上编译。 我遵循了此博客中的步骤:http : //mchr3k-arduino.blogspot.mx/2012/01/wireless-sensor-node-part-2.html?showComment=1338749638806#c853067277980266192 这是我正在使用的代码: #include <WProgram.h> //otherwise it says it can't find Arduino.h #include <Manchester.h> //include the library to comunicate #define TxPin 2 //the pin that is used to send data int sensorPin = 4; int ledPin = 3; int count = 50; void setup(){ pinMode …

1
编写第一个库-串行流对象
我已经用Arduino完成了许多项目,但是从来没有做过C语言中的“ Hello World”。我正在编写我的第一个库,并且许多面向对象的内容正在我头顶上。无论如何,我的库正在按预期的方式工作,我向函数传递了一个float并对其进行了正确的格式化并通过串行发送出去。但是,我以笨拙的方式实现了它。在Arduino的API设计指南中提到,似乎更好的方式: 使用串行通信时,允许用户指定任何Stream对象,而不是硬编码“ Serial”。这将使您的磁带库与Mega和Due上的所有串行端口兼容,还可以使用SoftwareSerial等备用接口。可以将Stream对象传递到库的构造函数或begin()函数(作为引用,而不是指针)。有关每种方法的示例,请参见Firmata 2.3或XBee 0.4。 有人可以详细说明如何执行此操作,或向我显示一些代码吗?
8 serial  c++  library 

1
我可以在5v板上编程3.3v芯片吗?
我前一阵子买了一个Gertboard,它具有的功能之一是ATMega328(DIP)。但是,由于Gertboard是为与Raspberry Pi一起使用而设计的,因此它只能在3.3v电压下运行,因此时钟速度被限制在〜12MHz。 但是,通过Raspberry Pi对其进行编程非常麻烦。相反,我想将芯片转移到Arduino Uno板上,以便可以从台式机上载草图。然后,我将其传输回Gertboard以进行正常操作。 问题是我的Uno工作在更典型的5v / 16MHz。 尝试这样做安全吗?我是否需要在IDE中进行任何配置更改以告知它考虑不同的时钟速度?

2
您需要多久轮询一次UI按钮,才能将它们视为迟滞?
尽管可以(有时是希望)使用引脚更改中断来读取按钮的状态,但轮询中的按钮状态更为简单loop()。这是一种常用的技术。 如果loop()执行得足够快,则总是会抓住按钮按下的声音,并且用户将无法感知任何延迟或滞后。 您的循环可能会花费很长时间,从而导致察觉到延迟或延迟。 问题是,用户通常会看到多长时间?
8 button  ui 

1
有没有一种方法可以检测是否正在使用Arduino,Stino或其他IDE /工具链?
我注意到Arduino IDE和Stino之间存在一些令人讨厌的差异(主要是围绕某些头文件)。这些可能是需要与一个或两个参与方跟进的错误,但是与此同时,我希望我的代码无需编辑即可与它们两个一起编译。这是因为我不想让任何用户都无法使用我的代码。 是否有任何可用的宏或类似内容(例如,无需修改工具链或IDE),可以使我检测出正在使用的宏或类似内容? 例如,在许多库中,都有以下代码段: #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif 但是,Stino和Arduino都对此进行了定义。
8 ide  build 

3
没有Grove防护罩的Grove传感器
格罗夫系统中存在各种各样的传感器。通常,这些是通过特殊的防护罩(Grove底座防护罩)访问的。 我可以不带防护罩直接使用这些传感器吗?我特别想将它们与Arduino Pro Mini一起使用。我的猜测是肯定需要Mini的5V版本,但除此之外呢?直接使用这些传感器的安全性如何? 我对使用Grove灰尘传感器感兴趣,但是我也想操作Grove 4位数字显示器。
8 sensors 

2
pulseIn()的计时精度如何?
我一直在使用该pulseIn()函数来处理基于PWM的二进制数据编码。它非常适合区分长度明显不同的脉冲,例如500us与1500us。这就足以处理典型的红外遥控器。 但是,我想制作自己的IR系统,该系统可以使用2个以上的脉冲长度,以便可以更快地进行数据传输。理想情况下,我想使用8种不同的脉冲长度进行八进制编码(例如200us,400us,600us等)。 我注意到pulseIn()虽然(+/- 10%)返回的值有很大的不同。我希望至少其中一些是由红外发射器和接收器模块引入的,但是我没有足够的设备来验证这一点。 假设我可以减轻这种外部误差,是否pulseIn()有足够的精度来区分此类相似的脉冲?
8 pwm  pulsein  timing 

2
将变化的电压读取到Arduino
我正在使用Arduino Nano和电流互感器(CT),试图感应流过120 V 60 Hz线路的电流。 电路图 CT 0-1 V根据其规格输出。该输出偏置AREF/2= 2.5V。 analogRead 价值观 x轴表示ADC样本的索引号,而y轴表示ADC值(0-1024)。采样率约为9 kHz。峰间差异约为1026个样本。 您希望CT产生该波形吗?为什么有些区域的值是平坦的,而不是连续变化的? 此外,如果我们看一下曲线的曲线部分,为什么Arduino 交替读取上方512和下方的值512?它读取一个高于的值512,然后是低于的值512,然后是高于的值512,依此类推。 analogRead在我的设置中,测量所需的时间为110微秒,并且波形峰值之间有1026个样本。这意味着在1秒钟内将有大约9个峰值,尽管由于我们正在感测60 Hz线路,所以我预计会有60个峰值。你从中得到什么?电路中有一个电容器,C1这有什么关系吗? 这些AnalogRead值是否适合用于计算RMS电压,从而计算出流经电线的RMS电流?这样做的最终目的是在确定流过电线的RMS电流之后计算功率使用量。 用于获取绘图值的草图 void setup() { Serial.begin(9600); } void loop() { double sensorValue = analogRead(1); Serial.println(sensorValue) } analogRead凹凸区域中的实际数据点 487 534 487 535 488 537 484 536 487 538 486 536 484 540 484 …

3
是否可以使用Arduino Uno R3对Arduino Pro Mini进行编程?
我最近收到了Arduino Pro Mini的礼物,并且没有外部USB编程器来对Pro Mini进行编程。但是,我确实拥有一个Arduino Uno R3,并且我认为这是有可能的,因为它们都具有相同的时钟速度和微控制器(带有atmega328的16Mhz)。 是否可以使用Arduino Uno对Arduino Pro Mini进行编程?如果是,请问如何做?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.