Ich beschäftige zu Zeit mit den Grundlagen von Arduino. Ich habe im internet einen Beispielcode für einen einfachen Soundsensor gefunden. Der läuft auch top nur ich versteh nicht ganz was er macht. könnte mir einer den Code eventuell erklären ? Dankeschön
const int sampleWindow = 50;
unsigned int sample;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long startMillis= millis();
unsigned int peakToPeak = 0;
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(0);
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample;
}
else if (sample < signalMin)
{
signalMin = sample;
}
}
}
peakToPeak = signalMax - signalMin;
Serial.println(peakToPeak);
}
wenn man davon aussgeht das ich vor 1 Monat mit dem ganzen angefangen habe und bis vorhin nichtmal wusste was millis bedeutet ist das denke ich gar nicht so abwegig dass ich nicht alles direkt verstehe
wenn man davon aussgeht das ich vor 1 Monat mit dem ganzen angefangen habe und bis vorhin nichtmal wusste was millis bedeutet
Es ist dir unbenommen, das ganze langsam anzugehen. Aber wofür die Funktion millis() gut ist, solltest du schon selber rauskriegen können. Insofern war Combie's Einwand schon normale Härte. Er setzt sehr auf Eigeninitiative der Fragenden.
Am Rande:
Wie wird es wohl enden, wenn eine erst gemeinte Gegenfrage als Attacke, als Unfreundlichkeit, empfunden wird....
Du bist also nicht bereit diese Frage zu beantworten:
Was verstehst du an dem Programm nicht?
Du möchtest alles erklärt haben?
Dann muss ich dir sagen:
Einen Grundlagen Lehrgang in C++ werde ich hier nicht mit dir durchziehen, es gibt genug Dokumentationen.
Auch werde ich keine 3 seitige Analyse des Programms erstellen.
dass ich nicht alles direkt verstehe
Dann sage WAS du nicht verstehst!
Dann wirst du eine Antwort bekommen.
Hittens:
... ich versteh nicht ganz was er macht. ...
Inzwischen weißt Du wohl, was der Code macht.
Falls Du wieder einmal nicht verstehst, wie ein Code arbeitet, dann versuche, ihn in einen Programmablaufplan zu übersetzen. Mir hat das beim Lernen immer wieder geholfen.
Ansonsten findest Du bei meinem Geschreibsel vielleicht ein paar Sachen, die Dir beim Lernen helfen.
Hittens:
wenn man davon aussgeht das ich vor 1 Monat mit dem ganzen angefangen habe und bis vorhin nichtmal wusste was millis bedeutet ist das denke ich gar nicht so abwegig dass ich nicht alles direkt verstehe
Es gibt hier Menschen, die in ihrer Freizeit helfen wollen, die so ein "einfaches" Programm aber auf Grund ihrer Erfahrung als "selbsterklärend" ansehen.
Wir kennen Dich nicht. Mußt Du also const int sampleWindow = 50; als "hier wird eine Konstante angelegt und mit einem Startwert versehen" erklärt bekommen? Oder siehst Du das als simpel an?
Daher finde ich die Frage, was DU nicht verstehst, absolut legitim.
Über Feinheiten der Formulierung zu streiten, ist hier nicht der richtige Ort, das mußt Du so nehmen, wie es Dir angeboten wird. Ebenso meine veraltete Schreibweise, das habe ich so in der Schule gelernt oder kann es nicht besser.
Würd mir als Helfer auch wünschen, daß der Fragesteller etwas genauer erläutert was er nicht versteht. Es wird nicht das gesamte Beispiel sein sondern nur einige Teile.
Grüße Uwe
uwefed:
Es wird nicht das gesamte Beispiel sein sondern nur einige Teile.
Da habt ihr natürlich alle Recht
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(0);
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample;
}
else if (sample < signalMin)
{
signalMin = sample;
}
}
}
den Teil verstehe ich nicht. Mit dem sample = signalmax dann = signalmin. War mir schon klar das es Irgendwie mit uss irgendwas ist bin aber nicht dahintergekommen wie das da funktioniert.
while (millis()-startMillis<sampleWindow)
Wartet die Zeit (sampleWindow, in Millisekunden), durchläuft dabei immer und immer wieder den Schleifenkörper.
Denke, kurz vor dem while steht startMillis=millis(); - um die Startzeit festzuhalten.
sampel=analogRead(0);
Liest den Analog-Wert von A0 ein
if (sample<1024)
ist Schwachsinn, da der Rückgabewert von AnalogRead 0...1023 ist, also die IF wird immer true sein und kann somit auch gespart werden
if (sample > signalMax)
ist die aktuelle Messung größer als das bisherige Maximum? -> übernehme das Maximum.
If (sample < signalMin)
ist die aktuelle Messung kleiner als das bisherige Minimum? -> übernehme das Minimum.
Mehr steht in der While nicht drin.
Vorher wird die Startzeit auf millis() gesetzt werden, das Minimum auf 1024 (oder größer), das Maximum auf 0 gesetzt werden.
Nach der While ist signalMin das Minimum während der Messzeit, signalMax das Maximum der gleichen Zeit.
Ah okay das klingt Natürlich logisch. Dankeschön
Den Code von dir Combie werde ich morgen Mal ausprobieren danke
Ich denke Mal als 'Hausaufgaben Schnüffler' bin ich gemeint und ja ich bin Schüler und nein das ist keine Hausaufgabe. Ich will mich als Neuling hier nicht zu weit aus dem Fenster lehnen aber ich so ein Forum nicht genau für sowas da ? Ich bin mir fast sicher auch du hast klein angefangen ^^
Habe mehrere Posts zwischen #13 und #14 wegen Beleidigungen / Troll gelöscht. Diese Beiträge betrafen nicht das Tema dieser Diskussion und sind deshalb für das Verständnis des Diskussionsflussen nicht notwendig.
Grüße Uwe
Hittens:
Ich denke Mal als 'Hausaufgaben Schnüffler' bin ich gemeint und ja ich bin Schüler und nein das ist keine Hausaufgabe. Ich will mich als Neuling hier nicht zu weit aus dem Fenster lehnen aber ich so ein Forum nicht genau für sowas da ? Ich bin mir fast sicher auch du hast klein angefangen ^^
Mfg
Denke das 'Hausaufgaben Schnüffler' stammt aus einem gelöschten Beitrag. Ist also nicht so wichtig.
Wir helfen gerne und wir helfen auch Anfängern bei Basis-Verständnis-Problemen. Keine Frage ist zu blöd um sie zu stellen.
Wie Du bereits erfahren hast, möchten wir aber nicht Romane schreiben sondern geben gerne konkrete Antworten auf konkrete Probleme.
Auch solltes Du darauf achten alle Infos zu geben und nicht (was Du auch nicht gemacht hast) Infos in Form von Skeches, Schaltung und genaue Teile zu verheimlichen.
Auf Gegenfragen solltest Du genau Antworten denn diese sind zur besseren Verständnisses des Problems oder dessen Einkreisen gemacht worden.
Also keine Angst, Frage weiter wenn Du was nicht verstehst.