Простое чтение и запись на дискету.

Я пытаюсь подключить 3,5-дюймовый дисковод для гибких дисков (чтение и запись данных на дискету). Поскольку мне нужно записать на него число длиной всего несколько бит (16 более чем достаточно), я думаю, что смогу записать на него дорожку -мудро (каждая дорожка состоит из одного бита), что теоретически дает мне число длиной 80 бит, поэтому я мог бы написать 4 раза длиной по 16 бит для некоторой избыточности.

Я нашел этот код, который решает задачу считывания данных. Для написания я нашел эту страницу, на которой написано, что написание должно быть таким же простым процессом.

Я прикрепил код, который использую, здесь. Чтение вроде работает, а письмо нет. Интересная часть кода:

void writeData(byte data){
  Serial.println("Writing");
  digitalWrite(writeEnablePin, LOW); //начинаем раскручивать мотор
  digitalWrite(motorEnableBPin, LOW); //включение MotorEnable
  stepAllTheWayOut(); //перемещаем голову к краю диска
  for(unsigned i = 0; i<10; i++){ //повторяем 10 раз
    for(unsigned index = 0; index<=8; index++){ //повторяем 8 раз (всего 80 дорожек)
      digitalWrite(writeDataPin,bitRead(data,index)); //установка вывода данных
      Serial.print(bitRead(data,index)); //распечатываем написанное
      delay(500); //вращаемся некоторое время, чтобы написать по всей дорожке
      digitalWrite(writeEnablePin, HIGH); //шаг не работает, когда writeEnablePin низкий
      stepIn();
      digitalWrite(writeEnablePin, LOW);
    }
    Serial.println("");
  }
  digitalWrite(motorEnableBPin, HIGH);
  digitalWrite(writeEnablePin, HIGH);
}

Выход:

Setup done.
Writing
010101010
010101010
010101010
010101010
010101010
010101010
010101010
010101010
010101010
010101010
Reading
111001000
101010001
110111001
001000101
001011001
111111101
110101101
111110011
111111001
101111110

Вывод не тот, который должен быть записан. (биты меняются каждый раз, когда я запускаю код)

Есть идеи, что я делаю не так, когда пишу?

, 👍1

Обсуждение

Хорошо, у меня мало знаний, но я постараюсь изо всех сил. 1) Пробовали ли вы полностью стереть диск, возможно, вы пытаетесь прочитать уже записанные данные. 2) Проверили ли вы тайминги последовательности байтов. Это все, что я могу придумать, извините, если это не помогло., @Alex


1 ответ


2
for(unsigned index = 0; index<=8; index++)

Думаю, так и должно быть

for(unsigned index = 0; index<8; index++)

Иначе вы пытаетесь прочитать девятый бит в байте.

,

Хороший. Это действительно неправильно. Хотя это совершенно не решает проблему чтения и письма..., @slune