Arduino

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

2
Arduino的OOP与内联
我已经编程了一段时间了,但是我是Arduino和AVR编程的新手。我对这些微控制器进行编程的主要问题是,在面向对象的类中设计代码与在许多示例中看​​到的更传统的嵌入式编程之间是否存在重大差异? 换句话说,在Arduino / AVR控制器世界中,使用类或反之亦然可以节省内存和性能吗? 假设我们有一个Class: class SomeClass(){ private: int x; int y; public: void foo(); void bar(); } SomeClass thisClass; thisClass.foo(); thisClass.bar(); 以更内联的方式设计程序是否会提高性能或内存,例如: int x; int y; void foo(){ /*** Do something ***/}; void bar(){ /*** Do more stuff ***/}; 我尝试在Stack Exchange和Google上进行一些搜索,但找不到完全可以找到的答案,我正在寻找的最能找到的就是此Stack Exchange问​​题。 我之所以这样问,是因为我有一个项目,它需要尽可能的轻巧,而且我不清楚在这种环境下应该如何设计程序。 编辑 谢谢您的回答,这为您提供了启示。我还不太清楚一件事。 假设您正在设计一个使用u8glib的类,如下所示: class UserInterface{ private: …

1
Arduino电源自动选择逻辑会短路稳压5V和USB 5V吗?
从Arduino UNO r3的参考设计中,我发现如果Vin低于6.6V,USBVCC将通过mosfet T1连接到+ 5V。如果Vin刚低于6.6V,这两个源极不会短路吗?稳压器U1(NCP1117)的数据表中提到5V版本的输入范围低至6.5V。 在研究是否可以同时通过USB和5V引脚为arduino供电时会想到这个问题。有许多警告不要这样做,有些人则表示可以。我意识到如果未连接Vin / PWRIN或低于6.6V /〜7.3V,这将使USB 5V与我的外部5V短路,但是考虑到这可能是设计使然(如果上述理论正确),这是多么糟糕的事情。 )?

5
直接从Arduino数字引脚直接连接继电器的原因
在研究了通过Arduino控制继电器的各种原理图之后,我注意到,在大多数情况下,晶体管用于将单独的电源切换到继电器线圈中,而不是直接为继电器提供I的5伏输出。 Arduino的/ O引脚。例如,我有一个5伏的DPDT继电器和一个小型的直流电动机。我想使用Atmel328处理器直接从Arduino UNO(SMD克隆)驱动两者吗?进行下去是否明智? 如果不是(很可能): 有人可以提供详细的解释,还可以就当前的限制和内容提供重要的警告吗? 如何在不冒险接触Arduino的情况下控制此类组件?有哪些常用的方法可以做到这一点? 哪些其他设备通常会以类似方式损坏Arduino板(或任何微控制器单元)? 我只是一个初学者,他要非常谨慎。谢谢。


1
木质表面上的7段LED
我不确定这个问题的正确位置,但是没有人知道如何将7段式显示器投影或嵌入到此类产品的木材中吗? 有关完整的产品信息,请访问http://www.amazon.com/Cube-Wood-LED-Alarm-Clock/dp/B00D6DI0LE 另一个例子: 来自:http : //www.selectism.com/2013/11/27/a-wooden-led-alarm-clock-and-wireless-bluetooth-speaker-from-gogroove/
8 led  display 

2
在Arduino系统上以8 MHz和3.3 V运行ATmega328P的含义是什么?
我正在研究一种自定义arduino,它将在3.3 V电压下运行,没有稳压器或USB芯片(用于功耗)。我听说以16 MHz / 3.3 V对芯片进行超频通常是可以的,但是无论如何我都希望保持在规格范围内。 第一:要以8 MHz的频率运行,我是否需要更换晶体?还是我还有什么需要做的? 第二:我是否需要进行任何代码更改以反映新速度?我在这个项目中使用串行,SPI和I2C连接,以及NilRTOS操作系统和millis / delay函数。这些都会被打破吗?代码运行会明显变慢吗? 第三:如何编程芯片?可以在Arduino Uno上以16 MHz进行编程,然后将其移植到自定义的arduino吗? 第四:功耗会在8 MHz时变化吗? 谢谢!
8 atmega328 

4
是否将SoftwareSerial留给ATTiny85 / 84使用?
我想将SoftwareSerial与我的ATTiny85一起使用,当我用google搜索它时,有几个项目声称他们正在使用它...我从https://code.google.com/p/arduino-tiny/下载了硬件,但是当我尝试时添加SoftwareSerial并编译,我得到: fatal error: SoftwareSerial.h: No such file or directory 将董事会换成UNO可以解决问题,所以他们将其排除在外了吗?我怎样才能解决这个问题?

2
内部和外部电阻的性能
在与内部上拉电阻/外部上拉/下拉电阻连接的按钮之间是否存在重大的性能折衷?我看到很多教程演示了在连接一个简单的按钮(例如this和this)时使用外部电阻的方法。但是,由于阿尔杜伊诺/ AVR包括内部上拉电阻,可以连接一个按钮而没有任何外部电阻所证明这里。 是否有充分的理由使额外的电阻器使您的设计复杂化?

6
无线升级?
我希望能够在arduino上升级软件,而无需实际触摸设备或连接电缆。能做到吗 将选择最简单的无线协议。
8 wifi  bluetooth 

2
如何使用计时器更新ISR中的变量
我正在尝试使用计数器检查Timer3的频率。声明为易失性的计数器的值在ISR中递增,并且每秒在主循环中显示总和,并将该值重置为零。 计时器已正确设置。(如果选择3Hz计时器,我会看到LED闪烁) 问题 计数器不增加。这是输出: Setup Completed tick: 1 tick: 0 tick: 0 tick: 0 码 volatile int cont = 0; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); // Initialize Timer cli(); // disable global interrupts TCCR3A = 0; // set entire TCCR3A register to 0 TCCR3B = 0; // same for …

2
如何将对象作为参数传递给函数?
我正在做一个小游戏,想存储高分。我在草图文件的顶部创建了一个Highscore类,如下所示: class Highscore { public: String name; int score; String toString() { return this->name + " - " + (String)score; } Highscore(String name, int score) { this->name = name; this->score = score; } }; setup() { // etc 现在。在草图底部附近,我有一个函数希望将Highscore对象作为参数,但是编译器不允许我这样做。例: void writeHighscore(Highscore hs) { File f = SD.open("high.txt", FILE_WRITE); // Do …
8 c++ 

2
使用I2C刻录草图
确实不是一个纯粹的Arduino问题。我实际上正在使用独立的ATmega168。到目前为止,我一直在使用AVR-ISP编程器(在AVR Studio中工作)对芯片进行编程。完成所有操作后,芯片将被覆盖,我将只能访问I2C引脚。MISO,MOSI等引脚将无法连接。 我只是想知道是否有一种方法可以使用I2C引脚来更新芯片上刻录的程序。我不需要再次刻录引导加载程序,而仅在需要时更新程序。

2
电源电压混乱
我刚遇到这篇文章:Arduino:什么适配器?。 它说外部电源应为9-12V。这真的让我感到惊讶,因为我的Arduino Uno也可以通过5V的USB供电。 后来他谈到了9V引脚。但是我只能看到5V和3.3V的引脚。他是在谈论Arduino的不同版本吗? 从图片来看,他的Arduino看上去与我的Arduino Uno R3略有不同,但是我无法确定图片上的版本。

4
85。如何刻录引导加载程序?什么过程?
我想使用ATtiny85的所有六个I / O引脚,这意味着也将复位引脚用作I / O引脚,但是,我发现如果禁用RESET引脚,则无法再使用ATtiny85对ATtiny进行编程。 ISP程序员。 但是,我发现有一些ATtiny引导程序,据我所知,它们使我可以通过USB编程ATtiny,而无需RESET引脚。 我的问题是:如何将这样的引导程序(例如微核)刻录到ATtiny85?那之后我需要如何将ATtiny连接到USB(像这样?)?之后如何编程?请记住,就烧录引导程序和修改保险丝而言,我是一个完整的新手。 另外,由于我没有真正的ISP程序员,所以我将ArduinoISP草图用作我的ISP程序员,但是据我所读,这不会有问题。 编辑:我确实有我在eBay上花了几美元买的东西,我不知道如何以及是否需要使用:

2
Arduino中断(引脚更改)
我使用中断函数将接收自的值填充到数组中digitalRead()。 void setup() { Serial.begin(115200); attachInterrupt(0, test_func, CHANGE); } void test_func(){ if(digitalRead(pin)==HIGH){ test_array[x]=1; } else if(digitalRead(pin)==LOW){ test_array[x]=0; } x=x+1; } 问题是当我打印时,test_array会有诸如:111或的值000。 据我了解,如果我CHANGE在attachInterrupt()函数中使用该选项,则数据序列应始终0101010101不重复。 由于数据来自无线电模块,因此数据变化非常快。
8 arduino-uno  c  isr 

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.