Wie lerne ich C? (war Computerprojekt)

Kannst du mir helfen, einen Code für diese Frage zu schreiben, Jungs? Sie haben einen Arduino Uno mit 8 LEDs, die an die digitalen Pins 2 bis 9 angeschlossen sind. Erstelle ein Array von 8 Elementen. Füllen Sie es mit Zufallszahlen zwischen 2 und 9 (all inclusive) Schreiben Sie ein Programm, das die größte Anzahl unter ihnen bestimmt. Speichern Sie diese Nummer in einer Variablen namens max. Drucken Sie diese Nummer auf dem seriellen Monitor. Blinken Sie die LED, die mit dieser Nummer verbunden ist. Die Verzögerungszeit sollte 0,5 Sekunden betragen.

Beachten Sie, dass die Zufallsfunktion zu doppelten Zahlen führen kann. Zum Beispiel kann das generierte Array {3,4, 4, 7,6, 2,5,7} sein.

Die maximale Anzahl ist 7. Da es zweimal im Array aufgetreten ist, sollten Sie es zweimal blinken ^ _ ^ Es ist die maximale Anzahl 3 Mal im Array aufgetreten, dann sollten Sie dreimal blinken, und so für eine beliebige Anzahl von Vorkommen

Ich habe das bisher geschrieben, aber ich bin mir sicher, dass alles falsch ist

int pins[8]={2, 3, 4, 5, 6, 7, 8,9};

void setup() 
{
   pinMode(pins[8], OUTPUT);
}

void loop() 
{
    x=random(0, 8);
    digitalWrite(pins[x], HIGH);
    delay(1000)
    digitalWrite(pins[x], LOW);
    delay(1000)
}
3
Das sind schlecht erklärte Hausaufgaben, da sie nur eine Verzögerung geben, aber ein gemustertes Blinzeln erwarten. Wie auch immer, nähere dich dem, indem du dir vorstellst, dass du ein Roboter bist, dem die Zahlen nacheinander gezeigt werden. Welche sehr effizienten Notizen könnten Sie für einen wiederbeschreibbaren Notizblock verwenden (dh eine minimale Anzahl von Variablen)? Es hilft Ihnen, die beste Lösung zu finden, wenn Sie annehmen, dass die Liste der Zahlen beliebig lang sein könnte ...
hinzugefügt der Autor rossp, Quelle
Ehrlich gesagt gibt es keinen vernünftigen Grund, die Pins überhaupt in ein Array zu setzen, da ihre Reichweite kontinuierlich ist. Das einzige benötigte Array sind die Eingabedaten. Und nur zwei lokale Variablen plus die Iterator-Variable sind erforderlich, um das Problem zu lösen. Grundsätzlich ist das Schreiben von Code verfrüht. Finde den Algorithmus heraus .
hinzugefügt der Autor rossp, Quelle
Es tut mir leid, aber eine Frage "Wie lerne ich C" ist ein bisschen breit für diese Seite. Für eine Sache könnten Sie auf Stack Overflow fragen, welches eine Programmierseite ist. Aber selbst dort werden sie dir wahrscheinlich sagen, dass du ein Buch lesen oder ein Tutorial machen sollst. Stack Exchange wurde entwickelt, um bestimmte Fragen zu beantworten, nicht "teach C" (oder lernen, wie man fliegt oder lernt, wie man kocht). Ich werde diese Frage schließen. Fühlen Sie sich frei, es mit neuen Informationen zu bearbeiten. Danke für Ihr Verständnis und Ihre Kooperation!
hinzugefügt der Autor Nick Gammon, Quelle
@JRobert Ich stecke in der if-Anweisung und Arrays fest ich kann sie wirklich auch nicht verstehen es soll eine for-Schleife sein
hinzugefügt der Autor athanassis, Quelle
Wie würdest du das auf Papier/physisch simulieren? Zum Beispiel mit N Kopf-Schwanz-Münzen als LEDs .....
hinzugefügt der Autor Dave X, Quelle
Nun, für eine Verbesserung sind die Pins [8] undefiniert, da C-Indizes mit 0 beginnen, so dass nur Pins [0] ... Pins [7] in Ihrem Code definiert sind. Vielleicht könntest du deine for (;;) -Schleife dort benutzen? Versuchen Sie auch, Ihren Code zu kompilieren. Wenn der Compiler Fehler erkennt und meldet, kann dies Ihnen helfen, Ihre Logik zu verfeinern.
hinzugefügt der Autor Dave X, Quelle
@ Chris Stratton. Ja ja. Einen Algorithmus vor der Codierung herauszufinden wäre am besten. Aber da das OP bereits Code ohne einen Algorithmus hatte, dachte ich, dass ich sie auf Schritt zwei des Edit-Compile-Testzyklus zeigen würde. Vielleicht würden die Syntaxfehler genügend Hinweise liefern.
hinzugefügt der Autor Dave X, Quelle
Diese Antwort ist für C, das Arduino ziemlich ähnlich ist. Bitte lesen Sie es sorgfältig, es lehren über Arrays: dummies.com/how-to/content/…
hinzugefügt der Autor Nayt Grochowski, Quelle

1 Antworten

Erster Hinweis: pinMode() gilt nur für jeweils einen Pin. Sie müssen es 8 Mal ausführen, um die 8 E/A-Pins zu initialisieren.

Zweiter Hinweis: Wie @ChrisStratton vorgeschlagen hat, erzeuge die zuerst gesetzte Zufallszahl; dann "herausfinden" (setzen Sie einige Variablen im Speicher, die Ihnen sagen werden), was mit dem Terminal-Ausgang und den digitalen I/Os geschieht; dann mach jedes dieser Dinge. Es hilft, ein größeres Problem in kleinere aufzuteilen.

Update: Considering your updated title, How do I learn C?, and since the question reads like a homework assignment, aren't you already taking a class in C or C++? If so, how do you find it lacking, i.e., what additional resources or direction would be most helpful to you? There are a number of good books on the C language, and one of those would be a good place to start. If you don't already have a favorite one, you can't go wrong with The C Programming Language, by Brian Kernighan & Dennis Ritchie, the authors/designers of the C language and its early compilers. It is book on the C language, not on programming per-se, so if you are new to programming as well, a programming tutorial would be an excellent additional choice (sorry I don't have one to recommend).

Zweitens, schlagen Sie die Beispielprogramme an, die mit dem ArduinoIDE mitgeliefert werden: Klicken Sie auf die Schaltfläche "Öffnen" [Pfeilsymbol in der IDE-Symbolleiste; nicht die Datei | Menü öffnen] und Sie sehen ein Menü Ihrer aktuellen Skizzen und, unter der Pause, Kategorien von Beispielprogrammen. Wählen Sie eines der Beispiele, lesen Sie es und versuchen Sie zu verstehen, was es tut und warum es so geschrieben ist, wie es ist. Dann passe das ### p daran an - um zu verstehen, wie es sich anders verhält, und um es zu brechen . Sie werden viel lernen, indem Sie a) Fehlermeldungen des Compilers interpretieren und b) Ihre Fehler finden und beheben. Wenn Sie Ihre Programme nicht mindestens doppelt so oft brechen, wie Sie Erfolg haben, versuchen Sie nicht hart genug!

2
hinzugefügt