Answers:
是的,Arduino上的模拟引脚可以用作数字输出。
这在Arduino输入引脚文档的引脚映射部分中进行了记录:
引脚映射
使用别名A0(对于模拟输入0),A1等,可以将模拟引脚与数字引脚相同地使用。例如,代码看起来像这样,将模拟引脚0设置为输出,并进行设置。高电平:
pinMode(A0,OUTPUT);
digitalWrite(A0,HIGH);
您始终可以使用模拟引脚进行数字写入。
digitalRead()
适用于所有引脚。它只会舍入收到的模拟值并将其提供给您。如果analogRead(A0)
大于或等于512,则为digitalRead(A0)
1,否则为0。digitalWrite()
适用于所有引脚,允许的参数0或1。digitalWrite(A0,0)
与相同analogWrite(A0,0)
,与digitalWrite(A0,1)
相同analogWrite(A0,255)
analogRead()
仅适用于模拟引脚。它可以取0到1023之间的任何值。analogWrite()
适用于所有模拟引脚和所有数字PWM引脚。您可以提供0到255之间的任何值。模拟引脚使您可以读取/写入模拟值-基本上,它们可以提供介于0到5之间的电压范围(既作为输入又作为输出),而不是给出0或5的电压(与数字电压相同)。请注意,模拟输出期间的电压仅是用万用表观察到的电压。实际上,模拟引脚发送0V和5V信号脉冲以获得“看起来”模拟的输出(这是PWM)。
关于引脚数:请记住,PWM引脚可用于模拟输出。如果引脚用完了,则可以使用多路复用来制造更多引脚。不需要另外一个Arduino。
the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)
这与这篇文章中的说法矛盾If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0
。
如果您负担得起,并且您真的想使使用步进器超级容易,请查看Easy Stepper。我非常高兴。
http://www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414-080645.jpg
Example 1: Basic Arduino setup
This is the most basic example you can have with an Arduino, an Easy Driver, and a stepper motor. Connect the motor's four wires to the Easy Driver (note the proper coil connections), connect a power supply of 12V is to the Power In pins, and connect the Arduino's GND, pin 8 and pin 9 to the Easy Driver.
Then load this sketch and run it on your Arduino or chipKIT:
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void loop() {
digitalWrite(9, HIGH);
delay(1);
digitalWrite(9, LOW);
delay(1);
}
同样在同一页面上,以下是一些示例代码,该代码示例使用加速/减速功能通过两个easystepper板运行两个电机:http : //www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414- 081018.jpg
#include <AccelStepper.h>
// Define two steppers and the pins they will use
AccelStepper stepper1(1, 9, 8);
AccelStepper stepper2(1, 7, 6);
int pos1 = 3600;
int pos2 = 5678;
void setup()
{
stepper1.setMaxSpeed(3000);
stepper1.setAcceleration(1000);
stepper2.setMaxSpeed(2000);
stepper2.setAcceleration(800);
}
void loop()
{
if (stepper1.distanceToGo() == 0)
{
delay(500);
pos1 = -pos1;
stepper1.moveTo(pos1);
}
if (stepper2.distanceToGo() == 0)
{
delay(500);
pos2 = -pos2;
stepper2.moveTo(pos2);
}
stepper1.run();
stepper2.run();
}