Управление дисководом гибких дисков с помощью Arduino
У меня проблемы с управлением 3,5-дюймовым дисководом для гибких дисков с помощью Arduino Uno.
У меня дисковод гибких дисков питается от включенного блока питания компьютера, а Arduino питается от USB компьютера. Я разрезал ленту 34-контактного разъема IDC, чтобы проложить контакты к моему Arduino. Я могу включить двигатель гибкого диска и перемещать головку чтения/записи вперед и назад, но я никогда не могу считать импульсы с контактов Track-0 или Index.
У меня есть контакты 7, 15, 17, 19 и 25 дискеты, все они заземлены на Arduino, а контакты 8, 16, 18, 20 и 26 дискеты подключены к Arduino в качестве выходных контактов, поэтому Я могу управлять приводом.
Я ожидаю, что индекс будет пульсировать, когда двигатель диска совершает вращение, и что дорожка 0 будет меняться, когда я нахожусь за пределами диска, но оба они всегда НИЗКИЕ. Я что-то упустил?
Вот технические характеристики задней части гибкого диска, которые я нашел
2 /REDWC Input Density Select
4 n/c N/A Reserved
6 n/c N/A Reserved
8 /INDEX Output Index
10 /MOTEA Input Motor Enable A
12 /DRVSB Input Drive Sel B
14 /DRVSA Input Drive Sel A
16 /MOTEB Input Motor Enable B
18 /DIR Input Direction
20 /STEP Input Step
22 /WDATE Input Write Data
24 /WGATE Input Floppy Write Enable
26 /TRK00 Output Track 0
28 /WPT Output Write Protect
30 /RDATA Output Read Data
32 /SIDE1 Input Head Select
34 /DSKCHG Output Disk Change/Ready
Вот схема того, что я подключил (Макетная плата на этой схеме представляет собой разъем IDC, подключенный к 3,5-дюймовому дисководу гибких дисков.)
Вот фотография разъема IDC, и я отметил, какие провода подключены к Arduino.
Вот код, который я запускаю.
//константы
static const int IN = LOW;
static const int OUT = HIGH;
static const int pulseDelayTime = 6;
//pin
int indexPin = 2; //8 на диске ИНДЕКС
int track0Pin = 3; //26 на диске. ТРЕК 0
int dirPin = 6; //18 на диске. НАПРАВЛЕНИЕ
int stepPin = 7; //20 на диске. ШАГ
int motorEnableBPin = 9; //16 на диске. ВКЛЮЧЕНИЕ ДВИГАТЕЛЯ B
unsigned long motorSpinTime = 1000UL; //в мс
void setup() {
//начальная задержка
delay(3000);
//настройка последовательного монитора
Serial.begin(9600);
//установка пинов.
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(motorEnableBPin, OUTPUT);
pinMode(indexPin, INPUT);
pinMode(track0Pin, INPUT);
// изначально выключаем двигатель
digitalWrite(motorEnableBPin, HIGH);
//печать состояния здесь.
printState("Setup done.");
// немного покрутим диск.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//Пошаговое чтение/запись до упора.
stepAllTheWayIn();
// еще немного покрутим диск.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//шаг чтения/записи до конца.
stepAllTheWayOut();
//раскрутить диск еще больше.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
// никогда не завершается.
waitForIndex();
}
void loop() {
}
//раскручивает двигатель диска на несколько мс и печатает состояние
void spinMotorForThisManyMs(unsigned long msToSpin) {
// начинаем крутить
digitalWrite(motorEnableBPin,LOW);
// задержка.. продолжаем печатать состояние
unsigned long maxTimeMs = millis() + msToSpin;
while(millis() < maxTimeMs ) {
printState("Spinning");
}
// остановить вращение
digitalWrite(motorEnableBPin,HIGH);
}
//перемещаем головку чтения/записи до центра
void stepAllTheWayIn() {
for(int i=0;i<100;i++) {
printState("Stepping In");
stepInALittle();
}
}
//перемещаем головку чтения/записи наружу
void stepAllTheWayOut() {
for(int i=0;i<100;i++) {
printState("Stepping Out");
stepOutALittle();
}
}
//выводим состояние индекса и отслеживаем
void printState(const char* charPrint) {
Serial.print(" Index:");
Serial.print(digitalRead(indexPin));
Serial.print(" Track:");
Serial.print(digitalRead(track0Pin));
Serial.print(" ");
Serial.println(charPrint);
}
// немного сдвинем голову наружу
void stepOutALittle() {
digitalWrite(dirPin,HIGH);
stepPulse();
}
// немного сдвинем голову к центру
void stepInALittle() {
digitalWrite(dirPin,LOW);
stepPulse();
}
//импульс ступенчатого штифта
void stepPulse() {
digitalWrite(stepPin,LOW);
delay(pulseDelayTime);
digitalWrite(stepPin,HIGH);
}
//ждем срабатывания индекса. это никогда не будет завершено.
void waitForIndex() {
printState("beginning to wait for index pin to pulse");
// начинаем крутить
digitalWrite(motorEnableBPin,LOW);
// ждем пульс
while(digitalRead(indexPin));
// ждем окончания импульса 0
while(!digitalRead(indexPin));
printState("end of waiting for index pin to pulse");
// остановить вращение
digitalWrite(motorEnableBPin,HIGH);
}
Вот что я получаю.
Index:0 Track:0 Setup done.
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 beginning to wait for index pin to pulse
ОБНОВЛЕНИЕ: Теперь я получаю ожидаемые результаты благодаря геометрическому ответу. Исследуя эту проблему, я нашел несколько примеров кода Arduino для дисковода гибких дисков. Я заметил, что они устанавливали свои входные контакты в HIGH, но я так и не понял, почему они это делают. После решения моей проблемы я нашел это в некоторой документации Arduino (что заставило меня понять, что примеры кода, которые у меня были, использовали более старую версию Arduino IDE):
"До версии Arduino 1.0.1 внутренние подтягивающие устройства можно было настроить следующим образом:"
pinMode(pin, INPUT); // устанавливаем пин на вход
digitalWrite(pin, HIGH); // включаем подтягивающие резисторы`
В Arduino 1.0.1+ вы можете сделать это следующим образом.
pinMode(pin, INPUT_PULLUP);
@jeffctown, 👍15
Обсуждение2 ответа
Лучший ответ:
Согласно этому (мертвая ссылка):
http://bitsavers.trailing-edge.com/pdf/nec/FD1035_Product_Description_Jul84.pdf
Это архивная копия FD1035 3,5-дюймового дисковода для гибких дисков: Описание продукта Июль 1984 г. — PDF:
https://archive.org/details/bitsavers_necFD1035Pl84_876629
Выходы имеют открытый коллектор, поэтому требуется подтягивающий резистор. Вместо этого вы можете включить внутренние подтяжки Arduino на этих контактах,
pinMode(indexPin, INPUT_PULLUP);
pinMode(track0Pin, INPUT_PULLUP);
Я не могу отблагодарить вас достаточно. Это именно то, что мне нужно., @jeffctown
Вы должны заменить int
на unsigned long
во всех местах, где вы имеете дело со временем в миллисекундах.
Дело в том, что millis()
возвращает unsigned long
, таким образом, используя int
для хранения millis()
значение, у вас есть потеря информации из-за автоматического приведения, выполненного компилятором.
Вы должны внести следующие изменения:
unsigned long motorSpinTime = 1000UL; //in ms
и:
//раскручивает мотор диска на несколько мс и печатает состояние
void spinMotorForThisManyMs(unsigned long msToSpin) {
// начинаем крутить
digitalWrite(motorEnableBPin,LOW);
// задержка.. продолжаем печатать состояние
unsigned long maxTimeMs = millis() + msToSpin;
while(millis() < maxTimeMs ) {
printState("Spinning");
}
// остановить вращение
digitalWrite(motorEnableBPin,HIGH);
}
Обратите внимание, что я также выполнил некоторую оптимизацию цикла ожидания, вычислив максимальное время один раз, а затем сравнив millis()
непосредственно с этим значением. Это не обязательно, но я просто нахожу это немного более чистым.
Отличный улов! К сожалению, изменение этого кода не устраняет неожиданный результат, который я получаю. Я все еще получаю все 0 для нулевого индекса и трека. Я все еще в тупике. Я бы сказал, что, возможно, привод плохой, но я купил 2 3,5-дюймовых дисковода для этого проекта, и я получаю одинаковый результат с ними обоими (я думаю, они оба могут быть плохими, но каковы шансы на это?)., @jeffctown
Это потенциально важно, но никоим образом не отвечает на заданный вопрос, так что это тип точки зрения, которую следует сделать в качестве комментария., @Chris Stratton
- Как сбросить или отформатировать Arduino?
- Ошибка модуля часов реального Времени-DS3231
- Сброс при включении с Arduino Uno не происходит. Можно ли это исправить?
- Проблема с настройкой i2c OLED wemos D1 mini shiled (64*24)
- Декодирование порта VGA с помощью Arduino
- Проектирование роботизированной руки с помощью Arduino Uno
- Подтягивание или опускание
- Измерение напряжения переменного тока с использованием Arduino Uno
Оба метода включения подтягивания работают. Второй метод, использующий pinMode INPUT_PULLUP, лучше и потому, что он использует на 1 строку меньше, и потому что его намного легче читать., @Duncan C