RC Auto mit Hinderniserkennung

  }

Der Code ist sicher noch nicht "final"
[/quote]

"Final" im Sinne von, es macht das, was es machen soll. Das da noch einiges an Potential steckt, war mir schon klar. Deswegen schonmal danke an dich, für deine Anmerkungen. Ich werde sie versuchen umzusetzen. :slight_smile:

postmaster-ino:
Trotz der Punkte hier, Die mir aufgefallen waren, macht der Sketch einen guten Eindruck.

Erstmal Danke für dieses "Kompliment" und umso mehr Dank für deine sehr ausführliche Antwort. Die werde ich auf jeden Fall umsetzen! Danke!

Ich melde mich, wenn ich die bisherigen Anmerkungen umgesetzt habe. Danke euch!

Hi

Sichere Dir Deinen Sketch vom jetzigen Zeitpunkt (Werkzeug, Sketch archivieren)!
Nichts ist ärgerlicher, als den Sketch kaputt zu basteln!

MfG

Hey, eine Frage, die ich mir schon die ganze Zeit stelle: Ich habe gelesen, dass ins Setup() nur die PinModi sowie der Initiierung der seriellen Kommunikation gehören. Wäre dementsprechend die Deklaration von beispielsweise zeit = 0, boolean Hindernis_state = false, in meinem Code dort falsch und gehört direkt hinter die Deklaration der Variablen an sich vor dem Setup() ?

Vielen Dank.

Grüße.

Ins setup() gehört alles rein, was beim Starten des Arduino eimalig ausgeführt werden soll. Was das ist, ist abhängig vom Sketch, und das kann eine ganze Menge mehr sein, als nur pinMode und Serial initiieren.

Was dort eher nicht hingehört sind Variablendefinitionen ( außer sie werden nur im setup benötigt ). setup() ist letztendlich eine ganz normale Funktion, und wenn Du in einer Funktion eine Variable definierst, so ist die nur in dieser Funktion gültig.
Deine letzten 3 Zeilen mit dem 'boolean Hindernis_state = false;' usw. sind überflüssig. Sie bewirken schlicht nichts. Es werden 3 Variable angelegt, die dann direkt wieder weggeschmissen werden.

Dass es funktioniert, liegt daran, dass Du unter dem gleichen Namen auch 3 globale Variable definierst.

P.S. da dürften auch ruhig mehr Kommentare drin sein :wink: .

Globale Variable müssen nur initialisiert werden, wenn sie "zu Beginn" einen Wert != [0 | false | 0.0] haben sollen.
Es ist fürs Verständnis evtl. sinnvoll, auch =0 hinzuschreiben, wenn man z.B. betonen will, dass das für die Programm-Logik wichtig ist.

Hab noch nicht untersucht, ob der Compiler das sowieso wegoptimiert.

Wenn der Initialwert eine Konstante ist, würde ich empfehlen, den gewünschten Initialwert gleich bei der Definition hinzuschreiben, anstatt das in setup() zu machen. Wenn die Initialisierung durch etwas Komplexeres (Funktion, Formel mit Variablen, ...) erfolgt, und es evtl. gar auf die Reihenfolge ankommt, ist natürlich setup() die richtige Stelle.

Nabend,

ich habe den Code nochmal mit euren Anmerkungen überarbeitet. Anbei der neue, hoffentlich inzwischen etwas "bessere" Code.

Ich habe alle drei Blinker-Funktionen zu einer verbunden, in welcher abgefragt wird, welcher Fall (Links-Blinken, Rechts-Blinken oder Warn-Blinken) vorliegt. Des Weiteren habe ich nur noch eine Blink-Zeit.

Auch habe ich das Ausschalten der Blinker bei geändertem Lenkeinschlag neu programmiert.

Die Pin-Modi Deklaration habe ich komplett abgeändert von #define in const Byte.

Was noch fehlen würde, wäre das aufstellen eines KV-Diagrammes und programmieren einer etwas schöneren Abfrage als ganz viele ANDs oder ORs.

michael_x:
sizeof(ids) ist 8 bei einem avr-arduino, sonst noch größer.
counter darf aber nur 0 oder 1 sein.

Eine Möglichkeit wäre

const int IDCOUNT = sizeof(ids)/sizeof(long);

...
  for (int counter = 0; counter < IDCOUNT; counter++) {



oder


for (long id:ids)
  if (id == code) {
  ...
  break;
  }

Habe ich leider nicht ganz verstanden, dementsprechend noch nicht umgesetzt.

Was sagt ihr?

Grüße.

Auto.ino (15.3 KB)

Dass dein

  int counter = 0;

for (counter = 0; counter < sizeof(ids) - 1; counter++) {

falsch ist, solltest du jedenfalls verstehen, oder?
Da das ids-Array zur Zeit aus zwei Elementen besteht, sollte counter nur 0 oder 1 werden.
sizeof liefert aber die Größe in Byte, nicht die Anzahl Elemente.

Sonst hat sich schon einiges verbessert, das sehe ich auch so.