Hallo,
ich bin neu hier im Forum und ebenso neu im Programmieren mit dem Arduino.
Wir haben an der Uni die Aufgabe bekommen ein Carrera-Auto umzubauen, damit es selbstständig die Geschwindigkeit ändert.
Ich und meine Gruppenmitglieder sind diese Aufgabe mit einem Hall-Sensor angegangen und haben es damit geschafft zwischen 2 Geschwindigkeiten zu unterscheiden.
Nun würden wir gerne versuchen mit 2 Sensoren zu arbeiten und damit 3 Geschwindigkeiten zu fahren.
Wir haben und nun überlegt über einen Attachinterrupt den intspeed zu verändern, jedoch hat keines unserer Programme bisher funktioniert.
Deshalb frage ich, ob hier jemand vlt schon mal einen solchen Interrupt verwendet hat um einen Speed o.ä. zu ändern.
Lim96:
Nun würden wir gerne versuchen mit 2 Sensoren zu arbeiten und damit 3 Geschwindigkeiten zu fahren.
Wir haben und nun überlegt über einen Attachinterrupt den intspeed zu verändern, jedoch hat keines unserer Programme bisher funktioniert.
Deshalb frage ich, ob hier jemand vlt schon mal einen solchen Interrupt verwendet hat um einen Speed o.ä. zu ändern.
Warum mit 2 Sensoren ?
Was sind das für Sensoren ? Bitte Link posten.
Warum überhaupt mit einem Interrupt ?
Und poste bitte den Sketch.
Setze den bitte in Code-Tags.
Verwende dazu die Schaltfläche </> oben links im Editorfenster. Das kannst du auch nachträglich machen. Dazu den Sketch markieren und die Schaltfläche klicken.
Unsere Idee ist es gewesen den Motor dauerhaft mit dem schnellsten Speed zu betreiben und dann den Speed zu verändern sobald der Sensor ein Signal abgibt. Da haben wir gedacht wenn Sensor 1 ein Signal abgibt wird der Speed zu Speed 1 verändert und beim zweiten Sensor dann zu Speed 2. Die Idee das mit einen Interrupt umzusetzen kam von unserem Professor, also wenn es einen einfacheren gibt wäre das auch gut.
Unser Problem beim ersten Sketch war nämlich, dass der Motor sofort in die Ausgansgeschwindigkeit zurückkam sobald der Sensor der Magneten passiert hat und das würden wir durch das Ändern vom Speed lösen.
der bisher verwendete Sketch nutze nur einen Sensor und 2 Geschwindigkeiten und den Interrupt nur, um die langsamere Geschwindigkeit zu halten. (was unser Professor als sehr unschön erachtet hat)
//Motor 1
const int motorPin1 = 9;
const int motorPin2 = 10;
//Hallsensor
const int hallPin = 11;
int hallState = 0;
void setup(){
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(hallPin, INPUT);
attachInterrupt(0,hallPin,CHANGE);
}
void loop(){
digitalWrite(motorPin1,LOW);
analogWrite(motorPin2,HIGH);
hallState = digitalRead(hallPin);
if (hallState==LOW){
digitalWrite (motorPin1, LOW);
int speed = 150;
analogWrite (motorPin2,speed);
delay(3000);
}
}
Der Magnet-Sensor sitzt auf dem Carrera-Auto und die Magnete sind an der Strecke befestigt. So soll das Auto an den Stellen an denen es langsamer fahren soll die Magnete passieren und dadurch verlangsamt werden.
Dein Sketch nutzt überhaupt keinen Interrupt.
Das funktioniert so nicht. Du musst ja auch einen Funktion definieren, die beim Auslösen des Interrupt ausgeführt wird. Lies dir mal genau die Beschreibung von attachInterrupt durch.
Auf welchen Pins das überhaupt möglich ist, hängt auch vom Arduino ab.
Um dir helfen zu können, wird auch eine ordentlich Beschreibung deines Aufbaus benötigt. Wir können ja nicht hellsehen . Ob's da überhaupt einen Interrupt braucht, ist eine andere Frage. Aber man kann dann zumindest lernen, wie das mit den Interrupts funktioniert.
P.S. ok, hat sich überschnitten - jetzt ist es etwas klarer. Wenn die Carrera-Flitzer schnell unterwegs sind, könnte ein Interrupt schon sinnvoll sein.
Schreib auch mal, welche HW Du einsetzt.
Meine Carrera-Zeiten sind schon etwas vorbei - damals hatte man noch einen Controller in der Hand, Der im Wesentlichen aus einem fetten Draht-Poti bestand - man also analog die Fahrspannung verstellte - mehrere Autos auf einer Spur waren somit auch nicht wirklich möglich (nur wer lässt sich von solch Kleinigkeiten stören gg).
Denke, heute sehen die Dinger etwas anders aus - die Autos bekommen wohl Dauerspannung und werden per aufmodulierter Befehle gesteuert - oder?
Als Student solltest Du ganz schnell lernen, eine Aufgabenstellung verständlich zu formulieren. Sonst arbeitest Du ganz toll, aber Dein Chef schneist Dich raus, weil er es nicht versteht. Das wäre doch blöd! In diesem Thema ist Dir das bislang mißlungen.
Ich vermute mal so: Ein Wagen fährt mit einer Grundgeschwindigkeit. Wird Magnet M1 überfahren, wird die Geschwindigkeit des Wagens für die Zeit t1 auf v1 verändert, wird Magnet M2 überfahren, wird die Geschwindigkeit für die Zeit t2 auf v2 verändert, werden beide Magnete M1 und M2 überfahren, wird die Geschwindigkeit für die Zeit t3 auf v3 verändert. Die in der Fahrbahn untergebrachten Magnete werden durch Hallsensoren im Wagen detektiert.
Was Ihr benötigt, ist eine Ablaufsteuerung (Finite State Machine) mit einer Zeitnahme durch millis(), da delay() eine Sackgasse ist. Eine Suche hier im Forum nach "agmue anleitung" bringt Text von mir und weiterführende Links hervor, auch zur Nachtwächtererklärung. Das sollte zum Verständnis beitragen.