Arduino 和电子产品初学者
Arduino and electronics beginner beginnering
我正在使用 Arduino Uno 微控制器完成一组初学者练习。 (不过,这是一个通用的,因为这是我所提供的。)
我是 运行 的程序,它根据瞬时开关的状态交替向串行输出发送 1 和 0,已将引脚 2 设置为开关的输入。但。接线时,我一开始不小心将跨接电缆插入了引脚 3,发现按下按钮时它仍然大部分发送 1。有些是 0,但大部分是 1。
最初我以为可能只是电路板有点不可靠,但我想我会尝试一下。当按下按钮时,插入 pin 3 而不是 pin 2 仍然相当一致地发送 1,尽管 1 的流量比在 pin 2 中时的一致性要差一些。相比之下,在 pin 2 中它是完全一致的。所以我尝试了 pin 4,但是那个根本没有任何反应。
我是否正确地假设程序的读数似乎变得有点不响应我将电缆从我编程为输入的引脚移得越远?谁能帮我理解为什么会这样?
很明显我是电子产品的新手。 :)
我上传到开发板的程序如下:
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
int buttonState = digitalRead(pushButton);
// print out the state of the button:
Serial.println(buttonState);
delay(1); // delay in between reads for stability
}
浮动引脚容易产生噪音。如果您实际上没有将任何东西连接到引脚 2,您将读取噪音。连接到引脚 2 的任何电线(甚至电路板上的连接)都将像天线一样接收噪声。在这些情况下,您应该始终使用物理连接的 PIN 码。
让输入引脚保持打开状态会使微控制器读取一个在 0 到 1 之间摆动的浮动值。另外,将开关连接到任何引脚时,请确保连接一些 pull-down 电阻以使输入为 0。
这些对于许多电子产品来说很常见,并且在设计您自己的电路时要适当注意。
您需要查看描述引脚功能的数据表。
MCU的管脚可以通过特殊的寄存器分配各种功能
引脚的两个最常见的功能是输入和输出。 MCU 提供内部上拉和下拉电阻,如果使用得当,可以显着简化电子架构。
如果输入激活为 input
而没有任何 pull-???
那么它的状态未定义并且可以用作随机数生成器的发起者。由于这个原因,最好通过连接 pull-???
电阻来定义输入引脚的默认状态。
在Arduino中IDE你不局限于提供的功能——你仍然可以直接使用register
操作,你只需要学习MCU的内部结构。
如果操作得当,2kbit 的程序通常可以小到几百字节,而且运行速度会快上百倍。
在 C 中操作 registers
与 assembly
没有太大区别,在 C++ 中您会立即获得显着的开销——尽管 registers
的一些好处仍然很重要。
库向程序员隐藏了 MCU 的内部结构,因为它简化了编程并且不需要了解 MCU 的工作原理、哪些寄存器按什么顺序更改。
但是当你知道硬件的进出时——你可以从小型 MCU 中挤出使用库不可能实现的东西(代码将不适合芯片)。 MCU 并不那么复杂 (Atmel) 来了解它的内部结构——好处是显着的。
知识是一种很多人回避的力量。
我正在使用 Arduino Uno 微控制器完成一组初学者练习。 (不过,这是一个通用的,因为这是我所提供的。)
我是 运行 的程序,它根据瞬时开关的状态交替向串行输出发送 1 和 0,已将引脚 2 设置为开关的输入。但。接线时,我一开始不小心将跨接电缆插入了引脚 3,发现按下按钮时它仍然大部分发送 1。有些是 0,但大部分是 1。
最初我以为可能只是电路板有点不可靠,但我想我会尝试一下。当按下按钮时,插入 pin 3 而不是 pin 2 仍然相当一致地发送 1,尽管 1 的流量比在 pin 2 中时的一致性要差一些。相比之下,在 pin 2 中它是完全一致的。所以我尝试了 pin 4,但是那个根本没有任何反应。
我是否正确地假设程序的读数似乎变得有点不响应我将电缆从我编程为输入的引脚移得越远?谁能帮我理解为什么会这样?
很明显我是电子产品的新手。 :)
我上传到开发板的程序如下:
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
int buttonState = digitalRead(pushButton);
// print out the state of the button:
Serial.println(buttonState);
delay(1); // delay in between reads for stability
}
浮动引脚容易产生噪音。如果您实际上没有将任何东西连接到引脚 2,您将读取噪音。连接到引脚 2 的任何电线(甚至电路板上的连接)都将像天线一样接收噪声。在这些情况下,您应该始终使用物理连接的 PIN 码。
让输入引脚保持打开状态会使微控制器读取一个在 0 到 1 之间摆动的浮动值。另外,将开关连接到任何引脚时,请确保连接一些 pull-down 电阻以使输入为 0。 这些对于许多电子产品来说很常见,并且在设计您自己的电路时要适当注意。
您需要查看描述引脚功能的数据表。
MCU的管脚可以通过特殊的寄存器分配各种功能
引脚的两个最常见的功能是输入和输出。 MCU 提供内部上拉和下拉电阻,如果使用得当,可以显着简化电子架构。
如果输入激活为 input
而没有任何 pull-???
那么它的状态未定义并且可以用作随机数生成器的发起者。由于这个原因,最好通过连接 pull-???
电阻来定义输入引脚的默认状态。
在Arduino中IDE你不局限于提供的功能——你仍然可以直接使用register
操作,你只需要学习MCU的内部结构。
如果操作得当,2kbit 的程序通常可以小到几百字节,而且运行速度会快上百倍。
在 C 中操作 registers
与 assembly
没有太大区别,在 C++ 中您会立即获得显着的开销——尽管 registers
的一些好处仍然很重要。
库向程序员隐藏了 MCU 的内部结构,因为它简化了编程并且不需要了解 MCU 的工作原理、哪些寄存器按什么顺序更改。
但是当你知道硬件的进出时——你可以从小型 MCU 中挤出使用库不可能实现的东西(代码将不适合芯片)。 MCU 并不那么复杂 (Atmel) 来了解它的内部结构——好处是显着的。
知识是一种很多人回避的力量。