Centrifuge controlled over serial USB:
#include
Servo disk;
int diskpin = 3;
int diskstop = 50, diskmin = 100, diskmax = 165;
int optpin = 8;
void setup()
{
Serial.begin(9600);
pinMode(optpin, INPUT);
digitalWrite(optpin, HIGH);
disk.attach(diskpin);
delay(2000);
disk.write(diskstop);
delay(3000);
}
int cur_time = 0;
int edge_ones = 0;
char last_opt = 0;
void loop()
{
char optstatus = digitalRead(optpin);
if (optstatus == 1 && last_opt == 0)
edge_ones++;
last_opt = optstatus;
int new_time = millis()/1000;
if (new_time != cur_time) {
cur_time = new_time;
Serial.print(edge_ones * 60, DEC);
Serial.print(" RPM ");
edge_ones = 0;
Serial.println(optstatus, DEC);
if (Serial.available()) {
char buf[8] = "";
Serial.readBytesUntil('\n', buf, sizeof(buf));
if (buf[0]) {
int num = atoi(buf);
Serial.println(num, DEC);
if (num == 0)
disk.write(diskstop);
else if (1 <= num && num <= 100)
disk.write(map(num, 1, 100, diskmin, diskmax));
}
}
}
}
Centrifuge controlled via button:
#include
Servo disk;
int diskpin = 8;
int diskstop = 50, diskmin = 100, diskmax = 165;
int optpin = 3;
int btnpin = 12;
int ledpin0 = 13, ledpin1 = 11;
void setup()
{
Serial.begin(9600);
pinMode(optpin, INPUT);
digitalWrite(optpin, HIGH);
pinMode(btnpin, INPUT);
digitalWrite(btnpin, HIGH);
pinMode(ledpin0, OUTPUT);
digitalWrite(ledpin0, HIGH);
pinMode(ledpin1, OUTPUT);
digitalWrite(ledpin1, HIGH);
#if 0
disk.attach(diskpin);
delay(2000);
disk.write(diskstop);
delay(3000);
#else
disk.attach(diskpin);
disk.write(diskstop);
delay(4000);
#endif
digitalWrite(ledpin0, LOW);
digitalWrite(ledpin1, LOW);
}
int cur_time = 0;
int edge_ones = 0;
char last_opt = 0;
int status = 0; // 0: off, 1: on
void loop()
{
char optstatus = digitalRead(optpin);
if (optstatus == 1 && last_opt == 0)
edge_ones++;
last_opt = optstatus;
int new_time = millis()/1000;
if (new_time != cur_time) {
cur_time = new_time;
Serial.print(edge_ones * 60, DEC);
Serial.print(" RPM ");
edge_ones = 0;
Serial.println(optstatus, DEC);
}
char btnstatus = ! digitalRead(btnpin); // button press grounds the pin
if (status == 0 && btnstatus == 1) {
digitalWrite(ledpin0, HIGH);
digitalWrite(ledpin1, HIGH);
disk.write(diskmax);
status = 1;
} else if (status == 1 && btnstatus == 0) {
disk.write(diskstop);
digitalWrite(ledpin0, LOW);
digitalWrite(ledpin1, LOW);
status = 0;
}
}