我可以将Arduino上的模拟引脚用作数字项目吗?


27

我是使用Arduino的新手,并且有Arduino Uno。对于我完成的项目,我只使用了数字引脚。

我正在制造一种使用步进电机的小型车辆。我用尽了很多销来控制这辆车的马达。模拟引脚有什么作用?我是否可以使用模拟引脚来控制我连接到Arduino的其余步进电机,还是我必须购买比Arduino Uno大的Arduino来控制这种设备?

Answers:


22

是的,Arduino上的模拟引脚可以用作数字输出。

这在Arduino输入引脚文档的引脚映射部分中进行了记录:

引脚映射
使用别名A0(对于模拟输入0),A1等,可以将模拟引脚与数字引脚相同地使用。例如,代码看起来像这样,将模拟引脚0设置为输出,并进行设置。高电平:
pinMode(A0,OUTPUT);
digitalWrite(A0,HIGH);


是的,对不起。我记得当时发布该消息已经很晚了,而且我变得困倦和注意力不集中。我删除了评论。
匿名企鹅

27

您始终可以使用模拟引脚进行数字写入。

  • 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。


8
AnalogWrite()不会输出0到5之间的电压(Due除外)!AnalogWrite()仅更改信号的脉冲宽度调制。输出电压仍为5伏(或任何VCC)。标有“模拟”的引脚将仅输出0V或5V。它们不是变量,请注意
baldengineer

1
@ JamesC4S:好点,编辑。谢谢:)
Manishearth

好多了!:)
baldengineer

模拟引脚上的digitalRead()和digitalWrite()会变慢吗?如果将digitalRead()取整,我可以想象它比数字引脚上的digitalRead()慢得多吗?
Johncl

这非常简洁且内容丰富,谢谢,但是我相信这里有一个小错误。根据优良的文档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
dotancohen

6

正如Anindo Ghosh所指出的,Arduino上的模拟引脚可以用作数字引脚。

但是,即使您用完了用于控制步进电机的引脚,也确实不需要购买其他电路板。您可以简单地使用寄存器或多路复用器之类的中间组件来控制适当的步进电机。


4

如果您负担得起,并且您真的想使使用步进器超级容易,请查看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();
}

这确实不能回答问题。最好做个评论。您能充实它以便回答问题吗?
Manishearth

@AnnonomusPerson:EasyDriver步进电机驱动器对库存,所有产品都非常活跃。
davidcary
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.