Floppy Disk Drive Arduino

[Solved] Floppy Disk Drive Arduino | Basic - Code Explorer | yomemimo.com
Question : floppy disk drive +arduino

Answered by : bewildered-badger-3gntqg09orr5

//constants
static const int IN = LOW;
static const int OUT = HIGH;
static const int pulseDelayTime = 6;
//pins
int indexPin = 2; //8 on the drive INDEX
int track0Pin = 3; //26 on the drive. TRACK 0
int dirPin = 6; //18 on the drive. DIRECTION
int stepPin = 7; //20 on the drive. STEP
int motorEnableBPin = 9; //16 on the drive. MOTOR ENABLE B
unsigned long motorSpinTime = 1000UL; //in ms
void setup() { //initial delay delay(3000); //setup serial monitor Serial.begin(9600); //setup pins. pinMode(dirPin, OUTPUT); pinMode(stepPin, OUTPUT); pinMode(motorEnableBPin, OUTPUT); pinMode(indexPin, INPUT_PULLUP); pinMode(track0Pin, INPUT_PULLUP); //turn the motor off initially digitalWrite(motorEnableBPin, HIGH); //print state here. printState("Setup done."); //spin the disk some. printState("Begin to spin motor"); spinMotorForThisManyMs(motorSpinTime); spinMotorForThisManyMs(motorSpinTime); printState("Done spinning motor"); //step read/write head all the way in. stepAllTheWayIn(); //spin the disk some more. printState("Begin to spin motor"); spinMotorForThisManyMs(motorSpinTime); spinMotorForThisManyMs(motorSpinTime); printState("Done spinning motor"); //step read/write head all the way out. stepAllTheWayOut(); //spin the disk even more. printState("Begin to spin motor"); spinMotorForThisManyMs(motorSpinTime); spinMotorForThisManyMs(motorSpinTime); printState("Done spinning motor"); //never completes. waitForIndex();
}
void loop() {
}
//spins the disk motor for a number of ms and prints the state
void spinMotorForThisManyMs(unsigned long msToSpin) { //start spinning digitalWrite(motorEnableBPin,LOW); //delay.. keep printing the state unsigned long maxTimeMs = millis() + msToSpin; while(millis() < maxTimeMs ) { printState("Spinning"); } //stop spinning digitalWrite(motorEnableBPin,HIGH);
}
//step the read/write head all the way to the center
void stepAllTheWayIn() { for(int i=0;i<100;i++) { printState("Stepping In"); stepInALittle(); }
}
//step the read/write head all the way to the outside
void stepAllTheWayOut() { for(int i=0;i<100;i++) { printState("Stepping Out"); stepOutALittle(); }
}
//print the state of the index and track
void printState(const char* charPrint) { Serial.print(" Index:"); Serial.print(digitalRead(indexPin)); Serial.print(" Track:"); Serial.print(digitalRead(track0Pin)); Serial.print(" "); Serial.println(charPrint);
}
//move the head towards the outside a little
void stepOutALittle() { digitalWrite(dirPin,HIGH); stepPulse();
}
//move the head towards the center a little
void stepInALittle() { digitalWrite(dirPin,LOW); stepPulse();
}
//pulse the step pin
void stepPulse() { digitalWrite(stepPin,LOW); delay(pulseDelayTime); digitalWrite(stepPin,HIGH);
}
//waits for the index to trigger. this never gets completed.
void waitForIndex() { printState("beginning to wait for index pin to pulse"); //start spinning digitalWrite(motorEnableBPin,LOW); //wait for pulse while(digitalRead(indexPin)); //wait for end of pulse 0 while(!digitalRead(indexPin)); printState("end of waiting for index pin to pulse"); //stop spinning digitalWrite(motorEnableBPin,HIGH);
}

Source : https://arduino.stackexchange.com/questions/3702/controlling-floppy-disk-drive-with-arduino | Last Update : Sun, 19 Sep 21

Answers related to floppy disk drive arduino

Code Explorer Popular Question For Basic