Hi,
vorab, ich bin ziehmlich neu auf diesem Gebiet und bräuchte daher Unterstützung ![]()
Ich habe eine Ansaugbrücke welche in der Länge der Ansaugwege Variabel ist.
Jetzt hatte ich mir gedacht, man könnte doch die Ansaugwege mit der Drehzahl Frequenz des Motors über ein Servo ansteuern. Hab mir dann dazu den Sketch für ne Drehzahl messung geholt und die steuerung für den Servo mit reingeschrieben. Mein Problem ist leider dass diese Messung mit einer Verzögerung reagiert (ca. 1Sekunde)
liegt es daran, dass die Berechnung so lange dauert oder das system damit so stark ausgelastet ist?
Grüße Leon
#include <Servo.h>
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
Servo motor1;
byte DZM_InputPin = 2;
volatile unsigned long RPM_T2, RPM_Count;
unsigned long RPM , RPM_T1;
int val;
void setup() {
pinMode(DZM_InputPin, INPUT_PULLUP);
RPM_T1 = 0;
RPM_T2 = 0;
RPM_Count = 0;
motor1.attach(9);
attachInterrupt(0, RPM_Meter, FALLING); // Interrupt0 wird bei fallender Flanke auf Pin2
}
void loop() {
char RPMStr[1];
if (RPM_T2 > RPM_T1) {
RPM = (unsigned)(long)(60000 * RPM_Count / (RPM_T2 - RPM_T1));
RPM_T1 = RPM_T2;
RPM_Count = 0;
}
else {
RPM = 0;
}
sprintf(RPMStr, "%4u", RPM);
u8g2.drawStr(0, 20, RPMStr);
u8g2.sendBuffer();
val = (RPM);
val = map(val, 2500, 4000, 100, 80);
Serial.println(val);
motor1.write(val);
delay(0);
}
void RPM_Meter () {
RPM_Count++;
RPM_T2 = millis();
}