Arduino

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


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


3
SAM3X8E(Arduino Due)引脚IO寄存器
Arduino Due的IO寄存器如何工作?在Arduino的乌诺刚刚成立DDRx,那么PINx读,PORTx写,我想这样做同样的事情用一个Arduino到期,但它有更多的寄存器,如PIO_OWER,PIO_OSER,PIO_CODR,PIO_SODR等我发现的Arduino UNO和之间没有对应Arduino Due寄存器。 也有一些有用的功能,如pio_clear,pio_set,pio_get,等人,都在这里解释: http://asf.atmel.com/docs/3.19.0/sam3x/html/group__sam__drivers__pio__group.html 现在,我想我已经理解了所提到的三个函数的功能,但其他的函数却无法理解,例如: pio_configure (Pio *p_pio, const pio_type_t ul_type, const uint32_t ul_mask, const uint32_t ul_attribute) 我想不出有什么ul_attribute和ul_type是。

5
在CH340 USB串行设备上设置序列号
阅读http://playground.arduino.cc/Linux/Udev,似乎有一种方法可以写出FTDI USB串行EEPROM来设置给定的SerialNumber,从而使您可以识别给定的nano /其他arduino来专门处理它在UDEV中。 我有一个带有QinHeng Electronics HL-340 USB串行适配器的纳米级插件,它显然不是FTDI芯片,因此FTDI编程器无法工作。有谁知道替代工具/在哪里可以找到与此芯片相同的信息? 当前,设备使用以下方式标识自己: [ 6850.608080] usb 2-1.2: new full-speed USB device number 7 using ehci-pci [ 6850.701496] usb 2-1.2: New USB device found, idVendor=1a86, idProduct=7523 [ 6850.701505] usb 2-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [ 6850.701510] usb 2-1.2: Product: USB2.0-Serial [ 6850.702201] ch341 …

7
I2C LCD串行接口板不显示文本(引脚错误?)
我有一个1602液晶显示屏,它可以正常工作。但是,我想通过使用我单独购买的I2C / IIC LCD控制器来释放一些引脚。 虽然控制器似乎在正确的地址上与我的Arduino UNO通信,但我无法显示文本。默认情况下(无代码),LCD似乎有1行,每行16个实心“正方形”。在我的代码中使用地址27时,LCD将变为2行,每行16平方(见下图)。该代码还要求背光灯闪烁3次,这是可行的。但是我只能得到2行正方形。(完整代码位于此问题的底部)。 我正在使用F Malpartida 的LiquidCrystal_I2C库,该库似乎很常用。 我应该使用更好的库吗? 我想知道代码中是否使用了错误的引脚。我在网上看到的所有草图都使用以下引脚: // addr,en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address 但是,我在网上看到的所有1602 LCD的引脚都与我的引脚相同,如下图所示: 这些引脚似乎是标准的: 让我更加困惑的是,LCD板上的引脚从左侧的1开始,但是默认代码的引脚似乎从0开始!因此,我尝试将代码的针脚更改为LCD板上的数字。LCD不再变为两行正方形,并且不再使背光闪烁。然后,我尝试从每个引脚减去1(从0开始),结果相同。然后,我尝试使用默认接脚减去1,结果相同。因此,默认引脚在某种程度上更正确吗?我究竟做错了什么? 是否有其他人得到了这些I2C控制器中的一种来为它们工作,如果可以,怎么做? 完整代码: /* YourDuino.com Example Software Sketch 16 character 2 line I2C Display Backpack Interface labelled …
9 i2c  lcd 

1
SPI Arduino是否与pinMode()发生冲突,错误?
考虑下面的最小示例,我pinMode在调用SPI函数之前进行了设置: #include <SPI.h> void setup() { pinMode(10, OUTPUT); SPI.begin(10); SPI.setDataMode(10,SPI_MODE1); } void loop() { delay(1000); SPI.transfer(10,1); } 现在,当SPI.transfer(10,1)被调用时loop(),我总是看到从机选择的引脚下降到1.65V,而不是应有的0!(见下图) 如果我们不打电话pinMode(),像这样: #include <SPI.h> void setup() { SPI.begin(10); SPI.setDataMode(10,SPI_MODE1); } void loop() { delay(1000); SPI.transfer(10,1); } 调用时,我们得到了期望的结果SPI.transfer: 这是一个错误还是您对此行为有解释? 非常感谢您的时间和兴趣!

4
无效循环之外的功能如何工作?
我习惯了Arduino草图,其中void setup()一部分可以运行一次,而void loop()一部分会不断循环。当main之外具有void函数时会发生什么void loop()?这些都将保持并行循环还是一个接一个地运行?还是某些void函数仅在满足某些条件时才运行(例如while循环)? 例如,在下面的代码中,void receiveData(int byteCount)和void sendData()函数何时运行? //I2C_test //This code demonstrates communication via an I2C bus between a raspberry pi and an arduino. //When the Raspberry pi (master) sends data to the Arduino (slave), the Arduino uses this //data to control a motor. After the Arduino has recieved data …

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 …

2
如何通过Python 3和模块序列号向Arduino UNO发送数字
我是Arduino新手(通常是计算机编程人员),因此,如果这个问题看起来很傻,我深表歉意。 设置基本的arduino-LED连接后,我将无法通过串行端口将INTEGERS发送到arduino。我可以轻松地发送诸如“ m”,“ o”等字符。.但是,如果我发送一个数字,看起来它根本无法接收。 这是Arduino代码,理想情况下,它应该通过python或串行监视器从usb端口获取一个值,然后根据该值调整LED的亮度。(值必须在[0,255]范围内)。 注意:我使用的是ARDUINO UNO和PYTHON 3 // -------------------------- int LED = 10; int number; void setup(){ pinMode(LED,OUTPUT); Serial.begin(9600); } void loop(){ number = Serial.read(); Serial.print(number); Serial.print('\n'); if(number == -1){ number = 0; } else if(number > 255){ number = 255; } else if(number < 0){ number = 0; …

3
Digital Read Serial教程-计算电阻值
Arduino Digital Read Serial教程将指导您完成简单按钮的接线。我的问题围绕电阻器。 为什么需要电阻器? 我想我理解这一点,但是如果我错了,请纠正我。为了确保输入引脚读取低电平信号并且不会浮空,我们应该在不按下按钮时将其接地。按下按钮时,会有5V信号流到引脚和地。基尔霍夫(Kirchhoff)的电压定律规定,闭环中的总电压必须等于零,因此我们必须处理直接流向地面的5V电压。这就是为什么我们在按钮和地面之间放置一个电阻的原因。 如何选择电阻值? 这是我不清楚的。欧姆定律指出... resistance = voltage / current 这是一个5V电源,Arduino Uno规范说该引脚提供40 mA的DC电流。所以.. resistance = 5V / 0.04A = 125 Ohms 在《数字读串行》教程中,为什么我们有一个10K欧姆的电阻器?那是矫kill过正,对吗?这就引出了另一个问题:如果您唯一的目标是消除电压,您是否会在电阻上施加过多的电阻? 预先感谢您的任何反馈!

6
可能有很长的delay()吗?
我正在尝试打开一个应该每12小时打开或关闭的小门。我想知道我是否可以制作一个带有delay()的小型循环脚本12个小时,delay(43 200 000 000); 我猜?但是,我不知道这是否可能和/或值得推荐。一些反馈/替代品(如果需要)将是不错的:)

4
Arduino兼容的串行端口未显示Mac OSX
我购买了atmega8兼容Arduino的Freaduino板(我选择的板类型为Arduino ng或更旧的atmega8)。我在Mac OS X和FTDI驱动程序上安装了Arduino IDE。但是当我连接开发板时,我的串口看起来像这样: 当我尝试上传程序时,这是我得到的错误: 有人可以告诉我这是什么错误吗?我无能为力。 更新:问题是我没有正确安装驱动程序(我想)。我卸载并重新安装了它们,效果很好。还制作了有关此内容的YouTube教程。http://youtu.be/BwatajQO_88

1
当从> 1个ISR访问变量但不在ISR外部共享变量时,是否需要volatile?
有明确记录表明,当与ISR和主程序共享全局数据时,需要声明数据volatile以保证内存可见性(并且仅满足1字节数据;任何较大的数据都需要进行特殊安排以保证原子性) 。这里我们有很好的规则: 仅在ISR外部使用的变量不应是volatile。 仅在ISR内部使用的变量不应是可变的。 在ISR内部和外部使用的变量应该是可变的。 但是volatile,当从1个以上的ISR访问变量但不与ISR共享外部变量时是否需要?例如,我有一个使用static变量维护内部状态的函数: void func() { static volatile long counter; // volatile or not? // Do stuff with counter etc. } 可以通过两种方式调用该函数:从引脚中断和从TimerOne库: attachInterrupt(0, func, CHANGE); Timer1.attachInterrupt(func); 没有原子性问题,因为输入ISR时会自动禁用中断,但这volatile更多是编译器的问题:什么是缓存,什么不是。 当然比后悔好...
9 interrupt  timers  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.