Могу ли я использовать аналоговые выводы на Arduino для своего проекта как цифровые?

Я новичок в использовании Arduino, и у меня есть Arduino Uno. Для проектов, которые я сделал, я использовал только цифровые контакты.

Я строю небольшой автомобиль, который использует шаговые двигатели. У меня закончились контакты для управления двигателями этого автомобиля. Для чего нужны аналоговые пины? Могу ли я использовать аналоговые контакты для управления остальными шаговыми двигателями, которые я подключаю к Arduino, или мне нужно купить Arduino большего размера, чем Arduino Uno, чтобы управлять этим устройством?

Ответы (5)

Да, аналоговые контакты Arduino можно использовать как цифровые выходы.

Это описано в документации по входным контактам Arduino , в разделе Pin Mapping:

Назначение выводов
Аналоговые выводы можно использовать идентично цифровым, используя псевдонимы A0 (для аналогового входа 0), A1 и т. д. Например, код будет выглядеть так, чтобы установить аналоговый вывод 0 в качестве выхода и установить ВЫСОКИЙ:
pinMode (A0, ВЫХОД);
цифровая запись (A0, ВЫСОКИЙ);

Да извини. Помню, было уже поздно, когда я опубликовал это, я засыпал и терял концентрацию. Я удалил комментарий.

Вы всегда можете использовать аналоговые контакты для цифровой записи.

  • 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 (как на входе, так и на выходе). Обратите внимание, что напряжение во время аналогового вывода — это только наблюдаемое напряжение с помощью мультиметра. На самом деле аналоговые контакты посылают импульсы сигналов 0 В и 5 В, чтобы получить выходной сигнал, который «выглядит» аналоговым (это ШИМ).

Что касается количества контактов: имейте в виду, что контакты PWM могут использоваться для аналогового выхода. Если у вас закончились контакты, вы можете использовать мультиплексирование , чтобы сделать больше. Нет необходимости приобретать другой Arduino.

AnalogWrite() не выводит напряжения от 0 до 5 (кроме Due)! AnalogWrite() изменяет только широтно-импульсную модуляцию сигнала. Выходное напряжение по-прежнему составляет 5 вольт (или что-то вроде VCC). Контакты, помеченные как «аналоговые», будут выдавать только 0 В или 5 В. Они не являются переменными и учитываются
@JamesC4S: Хорошая мысль, отредактировано. Спасибо :)
Намного лучше! :)
Являются ли digitalRead() и digitalWrite() на аналоговых выводах медленнее? Если digitalRead() округляет значение, я могу себе представить, что это будет намного медленнее, чем digitalRead() на цифровом выводе?
Это очень кратко и информативно, спасибо, однако я считаю, что есть одна небольшая ошибка. Согласно прекрасным документам : 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.
Одно исключение: дополнительные контакты A6 и A7 Arduino Nano, Pro Mini и Mini могут использоваться только в качестве аналоговых входов, а не цифровых входов или выходов. Это аппаратное ограничение, специфичное для этих контактов, не встречающееся в других моделях.

Как указал Аниндо Гош, аналоговые контакты Arduino можно использовать как цифровые.

Однако, даже если у вас закончились контакты для управления шаговыми двигателями, вам не нужно покупать еще одну плату. Вы можете просто использовать промежуточный компонент, такой как регистр или мультиплексор, для управления соответствующим шаговым двигателем.

Если вы можете себе это позволить, и вы действительно хотите сделать работу со степпером очень простой , попробуйте 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();
}
Это действительно не отвечает на вопрос; было бы лучше в качестве комментария. Не могли бы вы конкретизировать его, чтобы он ответил на вопрос?
@AnnonomusPerson: Драйвер шагового двигателя EasyDriver отображается как активный продукт, в наличии и все такое.

Добавление в качестве ответа, потому что не могу комментировать.

Если коротко ответить, то можно. Пожалуйста, обратитесь к ответу Аниндо Гоша о том, как это сделать.

Обратите внимание , однако, что для Arduino Nano контакты A6 и A7 являются только аналоговыми и не могут использоваться в цифровом режиме.

Обратите внимание, что этот ответ почти содержит только ссылку. Ссылки/веб-сайты могут устареть, что сделает этот ответ бесполезным. Сохраните ссылку, но, пожалуйста, подведите итоги или процитируйте соответствующие части веб-сайта.
@Huisman Честно говоря, ссылки на другие вопросы на EE.SE с меньшей вероятностью устареют или станут недоступными; но краткое изложение, безусловно, улучшит ответ.
@JYelton Я не переходил по ссылке, но ты прав.