Questions tagged «programming»

作为Arduino的程序(或草图)的一部分设计和编写源代码的过程。有关将代码上传到Arduino板的问题,请改用[uploading]标签。


4
如何处理millis()转换?
我需要每五分钟读取一次传感器,但是由于我的草图还需要执行其他任务,因此我不能只delay()在两次读数之间进行。有一个“ 无延迟闪烁”教程,建议我按照以下方式进行编码: void loop() { unsigned long currentMillis = millis(); // Read the sensor when needed. if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; readSensor(); } // Do other stuff... } 问题在于,millis()大约49.7天后,该值将回滚为零。由于我的草图打算运行更长的时间,因此我需要确保翻转不会使我的草图失败。我可以轻松检测到翻转条件(currentMillis < previousMillis),但不确定该怎么做。 因此,我的问题是:处理millis()过渡的正确/最简单方法是 什么?



3
对常量使用#define或const int更好吗?
Arduino是一个奇怪的混合体,在嵌入式世界中使用了某些C ++功能-传统上是C环境。确实,很多Arduino代码都非常像C。 C传统上将#defines用于常量。有许多的原因: 您不能使用设置数组大小const int。 您不能将其const int用作case语句标签(尽管在某些编译器中确实可以使用) 您不能用初始化const另一个const。 您可以在StackOverflow上检查此问题以获取更多理由。 那么,我们应该为Arduino使用什么?我倾向于#define,但是我看到一些代码正在使用,const而有些则使用了混合。

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 

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()永不返回,还会引起其他问题吗?


4
如何声明可变大小的数组(全局)
我想制作三个相同长度的数组。根据文档,必须将int myArray[10];Array 定义为可以用10代替已知长度(另一个整数)或用array填充的数组{2, 3, 5, 6, 7}。 但是,当我尝试声明一个值int arrSize = 10;,然后再声明一个基于该大小的数组时int myArray[arrSize];,得到以下内容:error: array bound is not an integer constant。 有没有一种方法可以可变地确定数组大小,还是只需要对它们进行硬编码?(我被告知硬编码是不好的,要不惜一切代价避免。)


5
使用结构和类时有哪些开销和其他注意事项?
嵌入式系统上的C传统上使用结构来保存结构化数据。 Arduino将C ++引入了表格,因此我们可以改用类。 假设我们有两个不同的数据结构,可以认为它们非常相似: typedef struct { int valueOne; int valueTwo; int valueThree; } value_t; 和: class Value { public: int valueOne; int valueTwo; int valueThree; } 在内存方面,这会有什么不同? 我仍然看到大量使用struct技术-为什么这样做?

6
如何自动测试Arduino源代码(持续集成)?
我想在源代码控制下通过连续测试来管理我的Arduino源代码(项目和库)。如何使用持续集成工具自动编译代码,以确保每个版本都能干净地编译?在最佳情况下,应该能够为多个处理器配置构建,可以选择运行单元测试并检查最大二进制大小。


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.