Questions tagged «programming»

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


5
C ++以外的编程选项
我可以使用C ++以外的任何其他编程语言对Arduino进行编程吗?如果是这样,哪种编程语言?我需要什么软件来将代码编译并加载到Arduino?

4
是否提供设置和循环以方便使用?
Arduino草图通常具有setup和loop功能。这些功能仅仅是为了方便而提供的,还是实际上具有特殊目的?(例如:在设置和循环中是否禁止或允许某些操作) 这两个代码是否等效: 经典 void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } 无循环 void setup() { pinMode(LED_BUILTIN, OUTPUT); while(true) { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } } void loop() { } 是否可以在没有设置或循环的情况下编写代码,例如提供main方法或其他入口点?
13 programming  c++ 

5
减少arduino和计算机上的处理草图之间的延迟
我目前在Arduino项目书的项目#14中。 我正在尝试使用Arduino控制笔记本电脑上的处理草图。这是通过使用电位器控制图像背景来实现的。 Arduino代码: void setup(){ Serial.begin(9600); } void loop(){ Serial.write(analogRead(A0)/4); } 处理方式: //imports serial library import processing.serial.*; //setups the serial object Serial myPort; //creates an object for the image PImage logo; //variable to store background color int bgcolor = 0; void setup(){ colorMode(HSB,255); logo = loadImage("http://arduino.cc/logo.png"); size(logo.width,logo.height); println("Available serial ports"); …

4
在Arduino中获得真正的随机数
在Arduino中获得真实(而不是伪)随机数的最佳方法是什么,或者至少是最佳近似方法是什么?据我了解,函数randomSeed(analogRead(x))不够随机。 如果可能的话,该方法应仅利用基本的Arduino设置(无需额外的传感器)。如果使用外部传感器的解决方案大大改善了基本设置的随机性,则欢迎使用。

2
无需计算机即可将Arduino作为ISP
有没有人看到或知道一种将固件作为数据预加载(使用计算机或任何其他方式)到设置为作为isp的arduino上,然后使用该arduino将isp接口插入另一个并上传固件的方法。 明确地说-我正在寻找一种方法,使arduino草图的上传成为可能,而无需直接连接到功能完善的计算机。 理想情况下,涉及的步骤是: 编写新的草图/固件 编译固件 将复制固件作为数据写入Arduino A(将Arduino A设置为可作为ISP使用) 从计算机上卸下Arduino A 在单独的位置使用ISP标头将Arduino A连接到Arduino B 使用某种方法(可能是按钮)触发Arduino A将预加载的固件上传到ArduinoB。 我假设从理论上讲它可以工作,因为上传固件只是跨SPI接口的字节交换,但我不确定现实。 我正在考虑的方案是,如果我将arduino(永久地)安装在远离计算机(我没有笔记本电脑,也不想买一台笔记本电脑)的地方,那么重新编程将很麻烦它。 我考虑过的另一种方法是使用DIL封装的ATMEGA,然后可以从板上卸下该板,并在计算机上进行编程,然后返回板上。但是,我宁愿不要冒险弯曲引脚和不必卸下引脚的麻烦。芯片每次我想重新编程。

4
为什么草图要占用这么多空间和内存?
当我为Yún编译此草图时: int led = 7; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); } 我得到: Sketch使用了5,098字节(17%)的程序存储空间。 最大为28,672字节。全局变量使用153字节(5%)的动态内存,剩余2407字节用于局部变量。最大为2560字节。 即使当我编译BareMinimum草图时: void setup() { // setup } void loop() { // loop } 我得到: Sketch使用4,548字节(15%)的程序存储空间。 最大为28,672字节。全局变量使用151字节(5%)的动态内存,剩余2409字节用于局部变量。最大为2560字节。 为什么最少的草图要占用分配的程序存储空间的15%?为什么一个非常简单的草图会占据程序存储空间的17%?根据Arduino网站: 通过在程序中包含很多字符串,可以轻松使用所有内容。例如,这样的声明:char message[] = "I support the Cape Wind project.";将33个字节放入SRAM(每个字符占用一个字节,加上'\ 0'终止符)。 但是,在这些草图中都没有声明任何字符串。 似乎它们可能会导入或使用我未指定的其他库/类。也许它会导入系统默认库?或者是别的什么?

6
Arduino中一次性执行的代码
问题:如果我希望每次Arduino启动仅执行一次代码,该将代码放在哪里? 背景:我倾向于使用Arduino执行应该在每个电源周期执行一次的任务。(例如,我的机器人每次打开时都只能向前行驶一次 -超过此次数,它就有可能从桌子上掉下来。) 标准的Arduino IDE“模板”由loop()和setup()函数组成。该setup代码在每个电源循环中运行一次,并且loop每次结束时都会重新启动。 我看到两种编码“ 1次任务”的方法: 方法1:“循环一次” void setup() { //do setup stuff } void loop() { //do task while(1) ; //Repeat forever, preventing function from re-starting } 方法2:“仅安装” void setup() { //do setup stuff //do task } void loop() { //do nothing } 问题的更详细形式: 从硬件/软件的角度来看,这些方法之一是否“更好”?(例如,有关该setup功能的任何“特殊”之处,例如它只能运行这么长时间?) 而且,如果从硬件/软件角度来看它们相同,那么是否存在“最佳实践”或标准的代码编写方式? Arduino社区中的这些情况?

3
带字符串参数的函数
在我的主循环中有以下字符串: String string1; 我有一个函数,它将string1作为参数,并使用它以SMS形式发送此字符串。 sendSMS(string1); 这是sendSMS()函数(不带参数): void sendSMS() { sms.beginSMS(remoteNumber); sms.print(finalstr); sms.endSMS(); lcd.setCursor(0, 0); lcd.print("Message sent!"); delay(10000); } 我的问题是: 如何将字符串输入参数放入sendSMS? 我还需要对sendSMS()使用函数原型吗?(因此它出现了3次,在原型中出现1次,在声明中出现1次,在调用中出现1次)。还是在主loop()之前不需要使用函数原型?
11 programming  c++ 

4
为什么我的实时时钟从PC收到错误的时间?
我希望我的实时时钟将其时间设置为PC上的时间。但是,当我运行以下草图时,实时时钟报告的时间比我的PC所说的时间早32-33秒。 #include <Wire.h> #include "RTClib.h" RTC_DS1307 RTC; void setup () { Serial.begin(57600); Wire.begin(); RTC.begin(); if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled // uncomment it & upload to set the time, date and start run …

2
.ino Arduino Sketch是否可以直接在GCC-AVR上编译?
好的,我们都在网上看到了诸如Arduino vs C ++之类的问题,或者其他类似的问题。除通过抽象信息外,绝大多数答案甚至都不会涉及编译差异。 我的问题旨在解决在将重命名为.cpp文件或c ++的其他类似文件扩展名的.ino文件如何使用GCC-AVR进行编译时的实际差异(而非首选项)。我知道您至少必须包括Arduino头文件,但除此之外,如果使用例如GCC-AVR将.ino编译为.cpp文件,会导致编译错误。为简单起见,让我们使用经典的眨眼示例来说明差异。或者,如果您要使用更好的代码段,请务必在回答中包含该代码段,并彻底解释差异。 请不要就哪种是更好的使用方式或工具发表意见。 仅供参考。我使用Platformio进行开发,并且发现在编译过程中幕后发生了转换过程。我试图了解那里实际发生的情况,因此,当我在Arduino中编写代码时,我也理解“纯” C ++版本。 感谢您提前对我的问题进行周到的回答。

3
有人可以解释一下用来设置计时器的奇怪代码吗?
在看别人写的草图时,我偶尔会遇到一些看起来像这样的代码: TCCR1A = 0; TCCR1B = 0; TCNT1 = 34286; TCCR1B |= (1 << CS12); TIMSK1 |= (1 << TOIE1); 我所知道的是与计时/计时器有关(我认为)。我该如何解密和创建这样的代码?什么是TCCR1A,TCCR1B,TCNT1,CS12,TIMSK1,和TOIE1?

3
通过无线广播同时编程许多Arduino
我将拥有许多基于微控制器的设备,这些设备将彼此独立,但是都将运行相同的程序。 我想通过无线广播将节目同时上传到所有这些节目。理想情况下,用户将USB控制器插入其计算机,然后从Arduino环境上传程序,就好像他/他正在为单个设备编程一样。 为了更好地了解我在说什么,请观看此视频。这是通过Atmel微控制器和定制的非Arduino引导程序实现的。 通过Google搜索“ Arduino红外编程”,这个有趣的项目出现了。主要缺点是仍然必须手动按下重置按钮。理想情况下,我希望这些设备默认情况下处于低功耗状态,并在它们感测到来自控制器的信号时醒来以接收程序。不过,对我而言,这可能是一个很好的起点。 我只是想从熟悉Arduino的人那里获取一些观点,以了解他们在我加入之前是否认为这是可行的。

4
定义I / O引脚的最佳方法是什么?
我读过这样的定义 const int ledPin = 9; 并且 #define ledPin 9 我知道像这样的定义 int ledPin = 9; 如果您不打算更改它(通常不会),这是一个坏习惯,尽管我在Arduino程序中已经多次看到了。其他两个中的哪一个是首选?

3
尽管所有接线正确,为什么我的LCD 16 * 2没有显示任何字符?
最近,我已经将一个典型的16 * 2 LCD(液晶显示器)显示器连接到了我的Arduino Uno,并且已经将所有的引脚都连接了起来。 这是我的联系方式:(首先使用LCD引脚) 1 =接地,2 = + 5v,4 = 11,6 = 12,11 = 5,12 = 4,12 = 3,14 = 2,15 =背光正,16 =背光负 #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set …

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.