Also, ich habe hier erst einmal 2 Arduinos. Der eine sendet eine Frequenz von ca 6k Signalen pro Minute.
Hier mein Sketch für den Sender
unsigned int millisalt;
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
}
void loop() {
int poti = analogRead(A1);
millisalt = millis();
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(10);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
delay (poti);
int zeit = 60000/((millis()-millisalt));
Serial.println(zeit);
}
Das erstmal nebenbei, dieser Sender gibt mir maximal eine Frequenz von 6k Impulsen (laut Serial Monitor). An Pin 9 ist eine LED zur Kontrolle angeschlossen, 8 ist mit dem Anschluss 2 des anderen Arduinos verbunden. Nun meinen Sketch um diese Signale auszuwerten.
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;
void setup()
{
Serial.begin(9600);
attachInterrupt(0, rpm_fun, RISING);
rpmcount = 0;
rpm = 0;
timeold = 0;
}
void loop()
{
if (rpmcount >= 20) {
rpm = 60000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
Serial.println(rpm,DEC);
}
}
void rpm_fun()
{
rpmcount++;
}
Jedoch bekomme ich nun höchstens 5300 UPM angezeigt. Ist mein Lösungsansatz schon gut, oder geht es auch besser? Ich wollte das ganze mit einem Interrupt machen da ich später auch noch ein paar andere Sensoren am analogen Ausgang auslesen wollte.
Liegt es irgendwie am Code oder ist der Arduino Geschwindigkeitsmässig am ende?
EDIT: Es funktioniert nun, ich musste nur die Baudrate erhöhen und die max rpmcount auf 8 setzen (ausprobieren).