Hello, im using arduino uno with lm393 speedometer. And getting rpm values like 2000 rpm or so from 250 rpm robot is this normal?
here is my code
#include <SoftwareSerial.h>
#include<Servo.h>
#include "TimerOne.h"
SoftwareSerial bt_iletisim(9, 8);
float sure = 0, distance = 0;
int pin1 = 4;
int pin2 = 5;
int pin3 = 6;
int pin4 = 7;
const byte MOTOR1 = 2; // Motor 1 Interrupt Pin - INT 0
const byte MOTOR2 = 3; // Motor 2 Interrupt Pin - INT 1
unsigned int counter1 = 0;
unsigned int counter2 = 0;
float diskslots = 20.00;
// Interrupt Service Routines
// Motor 1 pulse count ISR
void ISR_count1()
{
counter1++; // increment Motor 1 counter value
}
// Motor 2 pulse count ISR
void ISR_count2()
{
counter2++;
// increment Motor 2 counter value
}
void ISR_timerone()
{
Timer1.detachInterrupt(); // Stop the
Serial.print("Motor Speed 1: ");
float rotation1 = (counter1 / diskslots) *60; // calculate RPM for Motor 1
Serial.print(rotation1);
Serial.print(" RPM - ");
counter1 = 0; // reset counter to zero
Serial.print("Motor Speed 2: ");
float rotation2 = (counter2 / diskslots) * 60; // calculate RPM for Motor 2
Serial.print(rotation2);
Serial.println(" RPM");
counter2 = 0; // reset counter to zero
Timer1.attachInterrupt( ISR_timerone ); // Enable the timer
}
void setup() {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
Timer1.initialize(1000000); // set timer for 1sec
attachInterrupt(digitalPinToInterrupt (MOTOR1), ISR_count1, RISING); // Increase counter 1 when speed sensor pin goes High
attachInterrupt(digitalPinToInterrupt (MOTOR2), ISR_count2, RISING); // Increase counter 2 when speed sensor pin goes High
Timer1.attachInterrupt( ISR_timerone );
Serial.begin(9600);
bt_iletisim.begin(9600);
}
void sol() {
digitalWrite(pin1, HIGH);
digitalWrite(pin4, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
delay(1000);
digitalWrite(pin1, LOW);
digitalWrite(pin4, LOW);
}
void sag() {
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin1, LOW);
digitalWrite(pin4, LOW);
delay(1000);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
}
void geri() {
digitalWrite(pin2, HIGH);
digitalWrite(pin4, HIGH);
digitalWrite(pin1, LOW);
digitalWrite(pin3, LOW);
delay(1000);
digitalWrite(pin2, LOW);
digitalWrite(pin4, LOW);
}
void ileri() {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
delay(1000);
digitalWrite(pin1, LOW);
digitalWrite(pin3, LOW);
}
void loop() {
if (bt_iletisim.available())
{
char data = bt_iletisim.read();
String stringOne = String(data);
switch (data) {
case 'w':
Serial.print(data);
ileri();
break;
case 's':
Serial.print(data);
geri();
break;
case 'a':
Serial.print(data);
sol();
break;
case 'd':
Serial.print(data);
sag();
break;
case 'q':
Serial.print(data);
break;
default:
break;
}
}
ileri();
}
is that normal?