You are on page 1of 1

int hallPin = 4; // Hall effect switch pin

int hallState = LOW; // set state to LOW


int IN3 = 6; // motor forward and backward pins
int IN4 = 5;
int ENB = 3; // motor enable pin
int potPin = A6; // potentiometer pin
unsigned long time = 0; // time (ms) per revolution
float hallrpm;
int reading, speed;
void setup()
{
Serial.begin(9600); // set baud rate for Serial Monitor
pinMode(hallPin, INPUT_PULLUP); // pull-up resistor on Hall effect switch pin
pinMode(IN3, OUTPUT); // define motor pins as OUTPUT
pinMode(IN4, OUTPUT);
digitalWrite(IN3,1); // set motor to forward rotation
digitalWrite(IN4,0);
}
void loop()
{
reading = analogRead(potPin); // read potentiometer
speed = map(reading, 0, 1023, 0, 255); // map potentiometer value
analogWrite(ENB,speed); // set motor speed
reading = digitalRead(hallPin); // read Hall switch
if(reading != hallState) // Hall switch state changed
{
if (reading == HIGH && hallState == LOW) // start of new revolution
{
time = millis() - time; // time (ms) since last revolution
hallrpm = 60000.0/time; // revolutions per minute
Serial.print(speed);Serial.print("\t"); // potentiometer value
Serial.println(hallrpm,0); // display motor speed (rpm) with 0DP
time = millis(); // update revolution time
}
hallState = reading; // update Hall switch state
}
}

You might also like