Ich erstelle einen Code für einen Raddrehzahlsensor als Teil eines größeren Gruppenprojekts. Der Code misst und zeigt die Bodengeschwindigkeit und die zurückgelegte Entfernung für eine autonome Landyacht mit Hilfe eines Hall-Effekt-Sensors und eines am Rad befestigten Magneten. Ich habe den Code geschrieben und es funktioniert vollkommen einwandfrei. Wenn ich jedoch versuche, es dem vollständigen Projektcode hinzuzufügen, scheint es überhaupt nicht zu funktionieren. Der einzige Unterschied ist, dass innerhalb von void loop()
eine Menge anderer Dinge passiert. Ich habe alle Pins und den ganzen Code überprüft und doppelt überprüft, und ich kann es einfach nicht verarbeiten. es wird für eine Drehung des Rades manchmal arbeitet dann scheint es irgendwie, irgendwie eine Schleife zu beenden, wenn die Geschwindigkeit dann 0m/s
immer liest, wenn das Rad und begann wieder zum Stillstand gekommen ist,Kann nicht herausfinden, warum dieser Arduino-Code nicht funktioniert?
Hier ist der Code auf seinem eigenen ist:
int sensorPin1 = 2; // hall effect
float revs;
float rpm;
volatile byte rpmcount;
long fin_time;
long current_time;
long stop_time;
float distance;
const float circumference = 0.31416;
float groundspeed;
const float Pi = 3.14159;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 13);
void setup()
{
Serial.begin(9600);
pinMode(sensorPin1, INPUT);
attachInterrupt(0, RPM, RISING);
}
void RPM()
{
rpmcount++;
revs++;
}
void loop()
{
lcd.clear();
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("GS=");
lcd.setCursor(3,0);
lcd.print(groundspeed,1);
lcd.print("m/s");
lcd.setCursor(10,0);
lcd.print("D=");
lcd.print(distance,0);
lcd.print("m");
if(rpmcount == 1)
{
current_time = time - fin_time;
rpm = ((60000)/current_time);
groundspeed = ((rpm * circumference)/60);
distance = revs*circumference;
rpmcount = 0;
fin_time = millis();
}
stop_time = millis() - fin_time;
if(stop_time >= 2000)
{
rpm = 0;
groundspeed = 0;
delay(20);
}
}
der Code innerhalb des Hauptprojekt die exakt gleiche Struktur einnimmt, ist der einzige Unterschied, dass void setup()
und void loop()
ein paar andere Dinge in Seite haben sie für alle anderen Sensoren auf dem Schiff. Ich habe den Code überprüft und die Hauptarithmetik in meinem Code ist nicht in anderen if
Loops oder irgendetwas anderes als if (rpmcount == 1)
enthalten.
Hat jemand eine Idee?
Ich könnte den vollen Projektcode hochladen, aber es ist Hunderte von Zeilen und diese Frage ist schon lang genug.
Ist es möglich, dass eine bedingte Rückgabe innerhalb des anderen Codes in der Schleife des Hauptprojekts stattfindet? – isick
Vielen Dank für Ihre schnelle Antwort. Es gibt keine Rückgaben innerhalb des Hauptprojektcodes. Einfaches Berechnen von Daten und Anzeigen auf einem LCD innerhalb einer Hauptschleife. @isick –
Was passiert, wenn 'rpmcount' größer als 1 ist? Vielleicht könntest du 'if (rpmcount> 0) versuchen ...' – Amadeus