Arduino

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

3
输入更改时可以自动调用功能吗?
目前,我的草图是每次绕主循环检查一次输入引脚。如果检测到更改,它将调用自定义函数以对此做出响应。这是代码(精简了要点): int pinValue = LOW; void pinChanged() { //... } void setup() { pinMode(2, INPUT); } void loop() { // Read current input int newValue = digitalRead(2); // Has the input changed? if (newValue != pinValue) { pinValue = newValue; pinChanged(); } } 不幸的是,对于输入的非常短的更改(例如短暂的脉冲),这并不总是能正常工作,尤其loop()是在运行缓慢的情况下。 有没有办法让Arduino检测到输入变化并自动调用我的函数?
21 pins  interrupt  isr 

4
EEPROM的实际寿命是多少?
ATMEL说,EEPROM单元的单元寿命约为每单元100,000个写入周期。这实际上是EEPROM在野外的表现吗? 如果我不更改单元格的值,这会延长寿命吗?例如,如果我写的价值0xFF一次又一次同一个小区,这是任何不同的写作0x00,0xFF,0x00等。
21 eeprom 



2
为什么我不能在Arduino IDE的另一个选项卡中声明一个类?
我想将我的一些代码移到Arduino IDE的第二个选项卡中,以使事情井井有条。刚开始,我只是尝试移动一个函数,它似乎运行良好。我可以从setup()主选项卡中的函数调用该函数,并且编译或上传都没有问题。 但是,我尝试将整个课程放到第二个选项卡中,突然它不再起作用。例如: 标签1: TestClass obj; void setup() { obj.init(); } void loop() { //... } 标签2: class TestClass { public: void init() { //... } }; 当我尝试对此进行编译时,它给了我以下错误: tab1:1: error: 'TestClass' does not name a type tab1.ino: In function 'void setup()': tab1:5: error: 'obj' was not declared in this scope …

3
类和对象:使用它们实际上需要多少个文件类型?
我以前没有使用C ++或C的经验,但是知道如何编写C#并正在学习Arduino。我只是想整理我的草图,即使有其局限性,我也对Arduino语言非常满意,但是我真的很想在Arduino编程中采用一种面向对象的方法。 因此,我看到您可以通过以下方式(并非详尽的列表)来组织代码: 单个.ino文件; 同一文件夹中的多个.ino文件(IDE调用并显示类似“选项卡”的内容); .ino文件,在同一文件夹中包含.h和.cpp文件; 与上面相同,但是文件是Arduino程序文件夹中的已安装库。 我也听说过以下方法,但尚未使它们起作用: 在相同的单个.ino文件中声明C ++风格的类(听说过,但从未见过工作-可能吗?); [首选方法]包括一个在其中声明一个类的.cpp文件,但不使用.h文件(这种方法会行得通吗?); 请注意,我只想使用类以使代码更加分区,我的应用程序应该非常简单,仅涉及按钮,LED和蜂鸣器。
20 programming  c++  class 

5
我使用了太多的RAM。如何测量?
我想知道我在项目中使用了多少RAM,据我所知,没有办法真正解决这个问题(除了自己进行计算之外)。我进入了一个相当大的项目的阶段,在此我已经确定我的RAM用完了。 我已经确定了这一点,因为我可以添加一个节,然后在代码中的其他地方毫无理由地打破所有地狱。如果我有#ifndef其他问题,它将再次起作用。新代码在程序上没有任何问题。 我怀疑有一段时间我将要用完可用的RAM。我不认为我使用了太多堆栈(尽管有可能),确定我实际使用多少RAM的最佳方法是什么? 经历并尝试解决它,当我遇到枚举和结构时会遇到问题;它们需要多少内存? 第一次编辑:另外,自开始以来,我已经对草图进行了很多编辑,这些并不是我最初得到的实际结果,但是它们是我现在所得到的。 text data bss dec hex filename 17554 844 449 18847 499f HA15_20140317w.cpp.elf 16316 694 409 17419 440b HA15_20140317w.cpp.elf 17346 790 426 18562 4882 HA15_20140317w.cpp.elf 经过大量编辑后,第一行(带有文本17554)不起作用,第二行(带有文本16316)正在正常工作。 编辑:第三行可以正常工作,进行串行读取,执行新功能等。实际上,我删除了一些全局变量和重复的代码。我之所以这样说是因为(怀疑)这与每个sae的代码无关,而必须与RAM的使用有关。这使我回到了最初的问题,“如何最好地衡量它”,我仍在检查一些答案,谢谢。 我实际上如何解释以上信息? 到目前为止,我的理解是: `TEXT` is program instruction memory `DATA` is variables (unitialised?) in program memory `BSS` is variables occupying RAM …
19 sram 

1
用代码重置Arduino Uno
是否可以从代码(即从草图本身)重置Arduino(即重新启动)?我知道这可以通过特殊电路实现,但是有机会仅通过代码来实现吗? 以下是我的代码,注释//reset是我要强制重置的地方。 #include <TrueRandom.h> int i; int randSeed; long randNumber; void setup(){ Serial.begin(9600); Serial.println("20 pseudo Zufallszahlen:"); for (i=1;i<=20;i++) Serial.print(random(10)); Serial.println(); Serial.println(); //randomSeed(TrueRandom.random()); randSeed = analogRead (A0); randomSeed(randSeed); Serial.print("Der 'seed' Wert: "); Serial.println(randSeed); Serial.println(); Serial.println("20 Zufallszahlen mit analogem 'seed' Wert:"); for (i=1;i<=20;i++) Serial.print(random(10)); Serial.println(); Serial.println("---------------------------"); Serial.println(); delay(500); //reset } void loop() …

1
ATtiny85:功耗与时钟速度的关系
简单明了:使用内部时钟在1 MHz和8 MHz下运行的ATtiny85的功耗是多少?不使用任何睡眠模式。 我在Google上搜索了很多,但找不到任何信息。我问是因为我想知道使用1 MHz来延长电池寿命是否值得。
19 power  attiny 

4
通信协议最佳实践和模式
每次我设计要在两个arduino之间使用的串行协议时,我都会感觉就像是在重新发明轮子。我想知道人们是否遵循任何最佳做法或模式。这个问题不是关于实际代码,而是关于消息的格式。 例如,如果我想告诉arduino闪烁它的第一个LED 3次,我可以发送: ^L1,F3\n '^':开始一个新命令 'L':定义命令,(L:将此命令指向LED) '1':瞄准第一个LED ',':命令行分隔符,此消息中要跟随的新值 'F':Flash子命令 '3':3次(使LED闪烁3次) '\ n':结束命令 有什么想法吗?您通常如何编写新的串行协议?如果我想将查询从arduino 1发送到arduino 2,然后收到响应怎么办?
19 serial 

2
当其他组件/设备连接到Uno时,为什么不能上传草图?
我想制作一个相当简单的电路,使用我的Arduino Uno(更具体地说是SainSmart克隆)来依次闪烁一系列LED。我写了草图,编译得很好。之后,我将8个LED +电阻连接到引脚0到7,然后通过USB将Uno连接到我的计算机。 过去我已经成功上传了草图,所以我确定我的设置和驱动程序等是正确的。但是,这次我尝试上载草图时,它没有用。 我尝试删除与Arduino引脚连接的所有东西,然后突然上传再次起作用。 为什么会这样?这是否意味着我每次上传草图时都必须断开电路板上的所有连接?

2
Arduino Pro Mini(3.3V版本)输入电压范围/公差
我有一些Arduino Pro Mini克隆(廉价的中国货),并希望使用12V电源(与风扇电压相同)供电。根据Arduino Pro Mini规范,RAW引脚可使用3.35-12V(3.3V型号)。实际上,这意味着不能使用12V PSU,因为它们在低负载情况下几乎总是超过12V。我读到该板上的电压调节器可支持高达16V的输入。我尝试插入便宜的12V电源适配器,该适配器在没有负载的情况下读数为15.1V,但arduino克隆板上的一个组件实际上立即爆炸了。当使用USB编程器供电时,该板似乎仍然可以工作。烧坏的元件刚好在VCC,RST和GND引脚上方。 为什么会这样呢?我刚刚损坏了什么,最重要的是要使用什么安全电压水平?我已经有几个12V开关电源,如果不使用它们将是一个耻辱。 解: 最后,似乎是arduino克隆故障,电源适配器故障或质量不佳,或者是在将电源插入板的RAW输入引脚之前先给电源供电的事实。即使我的万用表在加电期间记录到高达30V的电压尖峰,廉价的12V开关电源也可以正常工作。

3
Arduino程序仅在以root身份运行时才能运行
当我以root用户(sudo)运行Arduino程序时,上传简单的草图似乎可以正常工作。我想以普通用户身份运行它。有没有人以前遇到过同样的问题并加以解决? 这是我从中获得的lsusb: $ lsusb Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM) Arduino程序将其标识为/dev/ttyACM0。这是它的权限: $ ls -l /dev/ttyACM0 crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0 这是来自的输出 id groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio), 30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev) 当我从示例中上传草图时,以普通用户的身份遇到此错误: avrdude:stk500_recv(): programmer not responding 欢迎任何建议。

13
Arduino Nano上传出现错误:avrdude:stk500_recv():程序员未响应
我有一个Arduino Nano(Sainsmart),我正在尝试将草图上传到其中。在Arduino IDE下,选择的设备为Arduino Nano w/ ATmega328。 但是上传草图给我错误 avrdude: stk500_recv(): programmer is not responding 我尝试了两个USB端口(/dev/tty.usbserial&/dev/cu.usbserial),但相同的错误仍然存​​在。Arduino通过USB电缆连接到Macbook Air,并且PWRArduino上的LED指示灯点亮,并且LED指示灯L闪烁。上传到Arduino Uno没问题。 从http://www.ftdichip.com/Drivers/VCP.htm安装最新的FTDI驱动程序(MAC OSX,x64,v2.2.18,FTDIUSBSerialDriver_10_4_10_5_10_6_10_7.mpkg)后重试。但是,这没有帮助。 可能出了什么问题?

2
loop()内的无限循环执行起来会更快吗?
在编写典型草图时,loop()只要Arduino运行,通常就需要反复调用。但是,移入和移出该loop()函数必须引入少量开销。 为了避免这种情况,您大概可以创建自己的无限循环,如下所示: void loop() { while (true) { // do stuff... } } 这是提高性能的可行方法吗?如果loop()永不返回,还会引起其他问题吗?

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.