Für alle die es interessiert. Ich habe die Drehzahlberechnung nun über die Zeit zwischen zwei Impulsen gelöst.
Das Programm funktioniert jetzt ziemlich zuverlässig. Ist bestimmt nicht die Effektivste Art den Code zu schreiben aber für meine Verhältnisse und Ansprüche ist es auf jeden Fall gut genug. Danke an alle die mir hier geholfen haben.
int pin = 3;
unsigned long time; //Zeitwert
unsigned long period; //Abstand zwischen zwei Impulsen
unsigned long Drehzahl =0;//Drehzahl
void setup(){
pinMode(pin, INPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
attachInterrupt(digitalPinToInterrupt(pin),Signal,RISING);
}
void loop(){
Drehzahl=(1/(period*0.000001))*120;
if(Drehzahl<1000){
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>1000&&Drehzahl<2000){
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>2000&&Drehzahl<3000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>3000&&Drehzahl<4000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>4000&&Drehzahl<5000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>5000&&Drehzahl<6000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>6000&&Drehzahl<7000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
if(Drehzahl>7000&&Drehzahl<8000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
}
if(Drehzahl>8000&&Drehzahl<9000){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
}
}
void Signal(){
period = micros() - time;
time = micros();
}