-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Benachrichtigungen - Takeshi

#76
0815 / Re: Ebay
17. März 2022, 00:22:47
Ich denke bei SEPA-Lastschrift dauert es etwas länger, weil das mit anderen Kosten verbunden ist und Paypal abwartet, ob nicht vielleicht noch eine Abbuchung hinzukommt, die sie zusammen abbuchen können. Bei der Kreditkarte ist es vermutlich günstiger und es geht sowieso sofort, also machen die das auch sofort.
#77
0815 / Re: Ebay
15. März 2022, 10:17:07
Paypal gehört zwar nicht mehr zu ebay, aber ich haue es trotzdem mal hier rein.

Um herauszufinden, wie ich meine Kontodaten ändere, musste ich erst mal im Internet suchen. Was für eine beschissene Seite. Dann war mir schon lange klar, dass Paypal ein Drecksunternehmen ist, das wurde mir bei dem Versuch aber noch einmal bestätigt. Früher lief das so ab, dass die einen Cent auf mein Konto überwiesen, mit dem ein Sicherheitscode geschickt wurde und den gebe ich ein. Nun wollen die für 90 Tage Zugriff auf mein Konto haben und alle getätigten Transaktionen verfolgen! Haben die einen Knall? Ich glaube sogar von meiner Bank ist mir das untersagt denen Zugriff auf mein Konto zu gewähren, ich würde mich nicht an meinen Vertrag mit der Bank halten.
Ein bisschen wie bei es bei den Cookie-Bannern mit dem Ablehnen-Button ist, gab es versteckt noch die Möglichkeit mit der Testüberweisung. Nachdem ich dort meine Kontodaten angab, war dort, wo ich den Weiter-Button erwartet hätte, wieder der, um denen Zugriff auf mein Konto zu gewähren. Auch da war der Button zum Bestätigen versteckt. Das ist echt so ein Drecksladen!
#78
0815 / Re: Was ist das?
15. März 2022, 10:08:58
Oh ja, Schnitzel mit Spargel, der Klassiker :)

Schwarzwurzel nennt man auch den Arme-Leute-Spargel. Ist vermutlich nicht so zimperlich im Anbau und war bei den Reichen offenbar nicht so beliebt, was auch Gründe haben wird. Schwarzwurzel ist nicht so "zwart", nicht so weich wie Spargel. Schmeckt auch anders. Einige beschreiben es als erdig, was ich aber nicht so beschreiben würde.
#79
0815 / Re: Ebay
14. März 2022, 23:44:57
Ich hatte auch überlegt denen zu schreiben, aber die Formulare und das Menü sehen schon so aus, als ob die das nicht interessiert. Ist ja auch klar, das können die nur nahezu kostenlos anbieten, wenn die niemanden damit beschäftigen müssen Kundenanfragen zu beantworten. Wenn der Mindestlohn bekommt und sich da um so etwas kümmert, braucht er mindestens 15...20 Minuten, was schon grob 3 € sind. Das bekommen die kaum wieder rein.
#80
0815 / Re: Was ist das?
14. März 2022, 23:42:15
Ich mag beides. Jetzt habe ich wieder richtig Lust auf Spargel UND Schwarzwurzel, verdammt!
#81
Zitat von: Anakin94 am 13. März 2022, 14:01:25
Die Abtastrate hatte ich auch im Sinn, nur dann müsste die Tonhöhe auch betroffen dein, ist sie aber nicht.

Nicht unbedingt. So weit ich weiß, speichern gänge Formate die Amplitude von Frequenzen zu gewissen Zeitpunkten. Die Häufigkeit der Zeitpunkte kannst du variieren, ohne dass sich die Frequenz ändert. Das funktioniert, da nicht die Amplitude des Audiosignals gespeichert wird, sondern die Amplitude der enthaltenen Frequenzen.
#82
0815 / Re: Was ist das?
13. März 2022, 20:56:16
Ich tippe eher auf Schwarzwurzel, das passt besser zur Beschreibung.

Also ich finde Schwarzwurzel ja sehr lecker ::)
#83
Zitat von: Anakin94 am 12. März 2022, 09:34:53
Ich habe den Eindruck, dass ich missverstanden werde.

Nach dem, was ich in dem Beitrag lese, habe ich nicht den Eindruck dich falsch verstanden zu haben. Ich bringe vielleicht meine Punkte nicht verständlich genug rüber. Ich überlege echt, wie ich das noch anders erklären kann, ich wiederhole mich teilweise, aber ich vesuche es noch mal ... und merke schon, ich hole ganz weit aus.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Für mich gehört Abstand halten zur Toleranz und da ist für mich das "Du" die korrekte Form und die Form wie mein Gegenüber von mir angesprochen werden möchte.
Ich würde es hassen, wenn man mich Bro nennt oder sogar berührt.

Wie es für dich ist, ist erst einmal deine Sache und du kannst nur drauf hoffen, dass andere das ähnlich sehen oder sich zumindest dir den Gefallen tun sich an deine Wünsche anzupassen, erwarten kannst du es aber nicht.
Wie bereits gesagt, gibt es gesellschaftliche Konventionen, die erst einmal für alle gelten, außer zwei oder mehr Menschen können sich darauf einigen davon abzuweichen. Die Konventionen stimmen glücklicherweise bei den meisten Menschen zu einem Großteil mit ihren eigenen Vorstellungen überein, wodurch sich die meisten Menschen weder anpassen müssen, noch sich ungewünschten Situationen ausgesetzt sehen. Das Zusammenleben ist also recht harmonisch*1. Du hast das Pech, dass deine Vorstellungen stark vom Konsens abweichen. Da hilft fast nur sich von der großen Masse möglichst weit abzukoppeln und dich mit Gleichgesinnten abzugeben.

Zum Glück ist es noch unüblich sich mit "Bro" anzusprechen, deshalb musst du "nur" das Sie ertragen.

Du beschreibst deine Perspektive. Ich denke dir fällt es recht schwer dich in andere hineinzuversetzen, die anders ticken als du, zumal sie selbst selten die nötige Selbstreflexion haben. Für viele Menschen ist es Standard Fremde mit "sie" anzusprechen. Alles andere ist für sie mit Überwindung verbunden. Vermutlich nicht so viel Überwindung wie für dich, aber dennoch. Außerdem wissen die wenigsten, wie es für dich ist und selbst wenn man es ihnen erklärt, ist fraglich, ob sie es verstünden.

Ich lese das so, dass deiner Meinung die verwendete Anrede nur für den Angesprochenen eine Sache ist, nicht aber für denjenigen, der die Anrede verwendet. Du möchtest so angesprochen werden, wie du es dir vorstellst. Würdest du denn andere so ansprechen, wie sie es wünschen? Was, wenn sie mit "eure Majestät" oder "Herr und Gebieter" angesprochen werden möchten? Denen würdest du den Vogel zeigen. Du würdest ihrem Wunsch nicht nachkommen. Es ist bewusst überspitzt dargestellt.

Ich hatte heute so eine Situation, da wollte mich eine mir ziemlich fremde Person mit "du" ansprechen. Das war schon mehr eine geschlossene als eine offene Frage. Damit hat er mich in eine ziemlich missliche Lage gebracht, denn mir ist es unangenehm mit ihm per du zu sprechen, das möchte ich eigentlich nicht. Gleichzeitig ist es unhöflich das Du abzulehnen, womit es mir ebenfalls unangenehm wäre das abzulehnen. Ich habe nur zwei Möglichkeiten und beide sind mir unangenehm. Was nun? Bin ich unhöflich? ;)

Mit Toleranz hat das übrigens nichts zu tun, es ist sogar eher das Gegenteil. Toleranz leitet sich vom lateinischen Wort tolerare ab, das so viel bedeutet wie ,,tragen, ertragen, erdulden" (aushalten). Toleranz ist, wenn du es erträgst/duldest, dass jemand beim Ansprechen das Sie verwendet.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Ich halte sehr wohl den Abstand ein.

Das mag sein, dass du den Abstand physisch einhältst, aber verbal tust du es nicht, missachtest die Wünsche deines Gegenüber und verlangst gleichzeitig, dass er deine Wünsche respektiert. Nüchtern betrachtet ist es genau das, was da passiert.
Dein Gegenüber weiß nicht, was du tun wirst oder was in deinem Kopf vorgeht. Er hat dafür nur Anhaltspunkte durch Beobachtung (die mit der Zeit mehr werden) und die signalisieren teilweise eine geringe Distanz oder zumindest Widerspruch, was fast noch "gefährlicher" ist.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Dank Corona müssen die Menschen Abstand halten, was mir sehr entgegen kommt.
Die Hand gibt man seitdem auch nicht mehr fremden Personen.
Somit fiel das auch weg, was mir entgegen kommt.

Echt jetzt? Klar, die Menschen sollen abstand halten, aber ich beobachte schon lange nicht mehr, dass irgendwer mehr Abstand hält, das ist seit mindestens einem Jahr vorbei.
Ja, Hände schüttelt man weniger, das ist in der Tat so. Zumindest ist es recht leicht möglich sich dem zu verweigern.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Nur warum muss ich immer alles über mich ergehen lassen, was mir unangenehm ist?

Wie oben schon geschrieben, lässt die Aussage völlig außer Acht, was andere über sich ergehen lassen müssen, wenn sie deinen Wünschen nachkommen, auch wenn es viel weniger ist als das, was du im anderen Fall über dich ergehen lassen musst. Aber das versteht kaum einer. Es ist völlig menschliches Verhalten davon auszugehen, dass etwas für andere genau so ist wie für einen selbst, außer es gibt hinreichende Hinweise auf das Gegenteil.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Es gibt auch tolerante Leute, welche mich schon sofort duzen, ohne das ich ein Wort gesagt habe.

Ach das hat absolut nichts mit Toleranz zu tun, im Gegenteil. Für sie ist es einfach normal andere Leute zu duzen und was andere wollen, ist ihnen egal. Sonst würden sie fragen, was dir lieber wäre. Es ist nur so, dass deren Vorstellung mit deiner übereinstimmt und es zufällig passt. Zufällige Übereinstimmung in der Abweichung von der Norm ist keine Toleranz.
Meine Frau ist dagegen immer ziemlich pikiert, wenn sie in Fastfood-Restaurands ungefragt geduzt wird. Das hätte sich vor 50 Jahren auch keiner getraut. Der Kundenkreis der Fastfood-Ketten ist aber nun einmal jung und hip und in der Gruppe ist das Du häufiger als das Sie. Diese 30-jährigen Jugendlichen empfinden das Du als angenehmer, weshalb ich sogar davon ausgehe, dass den Mitarbeitern dort unter Androhung von Strafe vorgeschrieben wird, dass sie die Kunden duzen sollen.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Auch die Polizei und Notärzte haben mich bisher immer geduzt.

Das hat mehrere Gründe. Wenn die Polizei dich nicht gerade verhaften will oder dich anhält, weil du besoffen Auto fährst, dann will sie dir, genau so wie der Notarzt, helfen. Das tun sie, weil du dich in einer unangenehmen Situation befindest und eventuell verängstigt bist. Ein Du vermittelt die angesprochene Nähe, was dir ein Gefühl von Sicherheit gibt, da ein Polizist oder Notarzt (jemand mit Stärke/Macht im weitesten Sinne) an deiner Seite ist. Das ist aus psychologischer Sicht sinnvoll, wenn man eine Person beruhigen möchte. Und das wollen sie nicht nur, damit du ruhig bist, sondern im besten Fall, weil sie dir wirklich helfen wollen. Hinzu kommt, dass es in deinem Alter nicht mehr unüblich ist dich zu duzen, sie können es somit gefahrloser machen. Und zur guter Letzt haben die mit sehr sehr vielen Menschen zu tun und entwickeln ein gutes Gespür dafür, wie eine Person tickt. Anders als der Normalbürger.

Zitat von: Anakin94 am 12. März 2022, 09:34:53
Es ist nur alles so kompliziert. :-[

Das ist es! Das alles funktioniert nur, weil es bei den meisten Menschen unterbewusst funktioniert, keiner denkt darüber nach und für die meisten passt es.



*1 Wir können froh sein noch in einer Gesellschaft zu leben, in der wir keine reale Angst haben müssen entführt, niedergestochen oder niedergeschossen zu werden. Die real größte Gefahr für uns ist, dass uns das Verhalten anderer als unhöflich vorkommt, jemand mal im Weg stehst oder die falsche Musik laut hat. In Mexiko, in Teilen Afrikas und Südamerikas ist das ganz anders.
Wir haben das Glück in einer Gesellschaft zu leben, die grundsätzlich freundlich gestimmt ist, an unerwünschten Auseinandersetzungen zum eigenen Vorteil nicht interessiert ist und die so homogen ist, dass alle ungefähr die gleichen Wertevorstellungen haben, sprich alle ähnliches wollen, womit sich die meisten Personen kaum an andere anpassen müssen, weil es so schon passt. Das ist weder selbstverständlich, noch in Stein gemeißelt. Es ändert sich nämlich langsam, und dennoch ist es noch harmlos. Da müssen wir nur gerade in die Ukraine blicken.

Ganz prinzipiell ist der Mensch ein freies Wesen, das tun und lassen kann, was es will, so lange es kann. Theoretisch kann er dich nicht nur so ansprechen, wie er es möchte, er kann dir körperliche Gewalt antun, dich ausrauben, erpressen, versklaven, was auch immer. Das kann er so lange, bis jemand ihn davon abhält, das zu tun. Im Zweifel müsstest du dich selbst physisch gegen die andere Person durchsetzen, damit sie das tut, was du möchtest. Wie gesagt, zum Glück möchte das hier kaum einer und der Großteil derer, die es tun möchten, lassen es, weil sie mit dem Staat Probleme bekommen oder weil sie sich im Gefängnis befinden und nicht können. Aber im Zweifel ist es genau so, du musst dich und deine Interessen verteidigen oder darauf hoffen, dass jemand anderes das für dich tut. Das ist ein starker Kontrast zu unserem bekannten Alltag, den man sich jedoch immer wieder bewusst machen sollte.
#84
Ich kann mir vorstellen, dass die Samplingrate abweicht, aber eine höhere standardmäßig angenommen wird. Die Information steht sicher in der Datei, aber nicht jede Software wertet die aus und so kommt es zu dem Fehler. Ich kenne mich nicht genau aus, wie im Detail die Audiodaten abgespeichert werden, daher nur das als Überlegung. Ändern könntest du das aber so einfach auch nicht.
#85
0815 / Re: Was ist das?
12. März 2022, 21:18:50
Puh! In Ostdeutschland und Osteuropa legen die fast alles ein und das schmeckt dann je nach Gemüse ähnlich, wenn die gleichen Zutaten zum Einlegen verwendet werden. Könnte das vielleicht eingelegter Weißkohl sein? So ganz passt das nicht von der Form, aber möglich wäre es den so zu schneiden.
#86
0815 / Re: Ebay
12. März 2022, 20:52:46
Neue Betrugsmasche bei ebay Kleinanzeigen?

Ich habe gerade eine E-Mail von ebay Kleinanzeigen bekommen, dass ich doch bitte meine E-Mail-Adresse bestätigen solle. Der Witz ist, diese E-Mail-Adresse habe ich für ebay Kleinanzeigen nie verwendet. Die E-Mail halte ich trotzdem für echt, der Aktivierungslink führt auch wirklich auf ebay Kleinanzeigen. Ich habe da einen Verdacht: Jemand hat meine E-Mail-Adresse aus einer Datenbank gefischt (bekomme viel Spam auf die Adresse) und hat über die Adresse ein Konto angelegt. Der Betrüger hofft nun, dass ich die Mail bestätige und meine echte Telefonnummer hinterlege. Wahrscheinlich ist auch mein echter Name samt Adresse hinterlegt. Der Betrüger geht davon aus, dass ich bereits ein Konto habe und die Mail meinem bisherigen Konto zuordne. Nach der Aktivierung logge ich mich wieder mit meiner regulären Adresse ein und merke nichts von dem neuen Account. Der Betrüger täuscht dann andere Verkäufer und der Betrug führt dann zu meiner Person.
Wenn E-Mail-Benachrichtigungen für die Kommunikation ausgeschaltet sind, merke ich davon auch nichts weiter. Über Käufe und besonders Verkäufe werde ich nicht extra informiert. Ich bin geneigt das Konto mit einem anderen Passwort zu aktivieren.
#87
Der Ton macht die Musik, heißt es. Der Ton fehlt hier, hier haben wir nur den Liedtext ;) Keine Sorge, das war nicht böse gemeint und mir ist bewusst, dass du Anfänger bist. Es ist nur so, wenn man da viele Jahre drin ist, dann fällt es einem immer schwerer Einstiegshürden einzuschätzen. Ich kann mich nur dran erinnern, dass es gängige Praxis unter Anfängern war keinen Wert auf die Formatierung des Quelltextes zu legen, weil es für die Funktion keine Rolle spielt und eigentlich möchte man doch nur schnell ein funktionierendes Programm und keinen hübschen Programmcode. Das habe ich schon häufig so gehört. Ich selbst habe das nie so gesehen, ich habe von Anfang an versucht es ordentlich zu formatieren, tat mich nur schwer damit herauszufinden, was nun eine sinnvolle offizielle Strategie ist. Ich weiß auch nicht, wie du das grundsätzlich siehst (du hast dich diesbezüglich nie geäußert) und was dein Wissensstand ist. Und es ist sehr mühselig das alles umzuformatieren, weshalb es ärgerlich wäre das demnächst wieder zu tun. Ich wollte, dass der umformatierte Quelltext auch als gutes Lernbeispiel dienen kann, sprich "learning by lesing". Formatierung von Programmcode ist wichtig, weshalb ich dir nur den Ratschlag geben kann einen erheblichen Anteil an Hirnschmalz und Arbeit da hineinzustecken, denn die Zeit sparst du wo anders wieder ein.

Ich merke aber, dass da generell wesentlich größere Wissenslücken sind, als ich erwartet habe. Ich denke, die sollten wir als erstes mal angehen, damit du besser selbstständig programmieren kannst.

Zitat von: MaikLommatzsch am 11. März 2022, 08:55:22
Takeshi, ich begreif die Wahr Falsch Geschichte nicht.

Das ist eine gute Information, denn das ist absolut grundlegend. Nehmen wir eine if-else-Anweisung, die sieht wie folgt aus:
if(Aussage)
{
    // führe aus, wenn Bedingung wahr
}
else
{
    // führe aus, wenn Bedingung falsch
}


Die Aussage wird auf Wahrheit geprüft, ob die Aussage wahr oder falsch ist. Nehmen wir an, du hast die Variable "test".
// Ist die Variable "test" gleich 2?
test == 2

... prüft die Variable test und die Zahl 2 auf Gleichheit. Enthält die Variable test den Wert 2, dann ist die Aussage wahr, in allen anderen Fällen ist sie falsch.

// Ist die Variable "test" ungleich 2?
test != 2

... prüft die Variable test und die Zahl 2 auf Ungleichheit. Enthält die Variable test den Wert 2, dann ist die Aussage falsch, in allen anderen Fällen ist sie wahr.

// Ist die Variable "test" kleiner als 2?
test < 2

... prüft, ob die Variable test kleiner als die Zahl 2 ist. Enthält die Variable test den Wert 1, 0, -1 , -2, ..., dann ist die Aussage wahr. Für die Zahlen 2, 3, 4, ... ist sie falsch.

// Ist die Variable "test" kleiner als 2 oder gleich 2?
test <= 2

... schließt den Wert 2 für "wahr" mit ein.

// Sinnlose Aussage, da immer falsch
1 == 2


// Einfache Anwendung
// Der Inhalt von "betrag" ist immer positiv
int zahl;
int betrag;

zahl = 1; // Der Variable werden für den Test verschiedene Werte zugewiesen, kann auch "-5" sein.

if(zahl < 0)
{
    betrag = -zahl;
}
else
{
    betrag = zahl;
}


Solche Aussage kann beliebig komplex sein. Zusammenhängede Aussagen können mit Klammern zusammengebunden und mit "and" verbunden werden. Beispiel:
if((zahl > -5) and (zahl < 5) and (zahl != 0))
{
    print("Zahl liegt zwischen -5 und +5, ist aber nicht Null!");
}
else
{
    print("Betrag von zahl ist größer oder gleich 5, oder aber Null!");
}


Das geht noch weiter, aber ich denke bis zu dem Punkt ist das erst einmal ausreichend.
So weit klar?

Zum Thema einrücken hatte ich ja bereits was geschrieben. Du wirst zwei Varianten finden:
(Reihenfolge wegen besserer Lesbarkeit meins Beitrags gewählt)
int zahl = 0;

void loop()
{
    if(irgendeineAussage)
    {
        zahl++;
        analogWrite(fanPin, 100);
    }
    // weiterer Code
}

int zahl = 0;

void loop() {
    if(irgendeineAussage) {
        zahl++;
    }
    // weiterer Code
}


Die zweite ist die, die du verwendest, ist scheinbar bei Arduino verbreitet. Die erste wirst du ggf. auch mal antreffen. Da du aber die zweite gewohnt bist, bleiben wir jetzt dabei.
Du siehst, Funktionen und sogenannte Kontrollstrukturen (if/else, for, switch, while)) haben immer den Aufbau "name(argument)". Befehlen folgt ein Simikolon ";" und Kontrollstrukturen in der Regel weitere Anweisungen. Wenn es nur eine Anweisung ist, kann man sie einfach darunter schreiben. Sind es mehrere, müssen sie in geschweiften  Klammern zusammengefasst werden und gelten für die Kontrollstuktur dann als "eine Anweisung", die ggf. ausgeführt wird, je nachdem, was im Argument der Anweisung steht. Ich rate wie gesagt dazu, IMMER geschweifte Klammern zu verwenden, auch wenn es nur ein Befehl ist, der danach ausgeführt wird. Sorgt einfach für weniger Fehler.
Einer Kontrollstruktur (oder die Definition eines Befehls wie "void temperaturberechnung()") ist somit immer eine öffnende und eine schließende geschweifte Klammer zugeordnet. Die öffnende schreibst du hinter den Befehl und die schließende natürlich weiter unten, aber immer auf gleicher Ebene eingerückt wie der Befehl/die Kontrollstruktur selbst. Wenn du eine Linie vom Anfang der Kontrollstruktur nach unten ziehst, landest du irgendwann bei der schließenden Klammer. Und alles bis zu der schließenden Klammer gehört zu dieser Kontrollstruktur. Alles innerhalb der Klammer ist weiter nach rechts eingerückt. Du solltest immer den gleichen Abstand pro Einrückung verwenden. Üblich sind 4 Leerzeichen oder ein Tabulator, wobei man die meisten Programme so einstellen kann, dass ein Tabulator als 4 Leerzeichen dargestellt wird.
Zeilen nur mit Kommentar werden eingerückt wie alles andere auch.

Und generell gilt: Versuche die Art, wie du es schreibst, als Regel zu definieren und wende sie immer gleich an. "Zwischen Befehl und runter Klammer steht (k)ein Leerzeichen", "zwischen runder Klammer und Argument steht (k)ein Leerzeichen" oder eben "eine öffnende runde Klammer nach einer geschlossenen geschweiften Klammer steht mit einem Leerzeichen direkt dahinter".

Zitat von: MaikLommatzsch am 11. März 2022, 08:55:22
Die Arduino Software ist Freeware.

Das ist mir bekannt, ich muss nur ehrlich zugeben, ich wollte es nicht installieren. Ich hab das Zeug dann auf der Platte und sehe schon kommen, wie ich dann versuche das überhaupt zu installieren (benutze Linux), ein Projekt zu starten, einen passenden Controller oder ein Board zu wählen, bis ich dann mal den Code compilieren kann. Wenn es an vielen kleinen Sachen hakt (die ich alle zur Genüge kenne), neige ich dazu diese kleine Sache doch noch hinzubekommen und am Ende sitze ich Stunden dran.

Zitat von: MaikLommatzsch am 11. März 2022, 08:55:22
Das stammt aus einem Ursprünglichen Code den ich übernommen habe. Da wurde mit 2 Case gearbeitet, im ersten Case war im Grunde der aktuelle Lüftercode und im Zweiten Case eine Lineare Lüfterreglung wenn bestimmte Situationen eintreten. Da ich es nicht besser wusste und es keine Fehler in der Prüfung gab, blieb er drin. Wenn es weg kann, umso besser :-)

Ah, alles klar! Dann kann das wirklich raus. So ist der Code gleich übersichtlicher.

Auf den Rest antworte ich ein anderes Mal, ist schon spät.
#88
Mir ging es darum nicht nur zu erklären, dass es als höflich gilt, sondern auch hervorzuheben, wodurch das kommt und worin die Höflichkeit besteht.
Es ist quasi schon wieder unhöflich, wenn du in bestimmten Situationen auf ein "du" bestehst. Du verlangst von deinem Gegenüber die Distanz nicht einzuhalten, die ihm aber selbst wichtig ist und die von der Gesellschaft, in der er lebt, teilweise sogar erwartet wird. Du verlangst, dass er nicht nach den allgemeinen Konventionen handelt, was mit Überwindung und Anstrengung für dein Gegenüber verbunden sein kann. Wenn er dem nachkommt, ist das nett, aber man kann ihm das nicht vorwerfen. Die Standardform ist halt "sie" und nicht "du". Alles andere als das "sie" ist ein höflicher Bonus.
Um das noch einmal zu betonen, das ist kein Angriff auf dich, ich versuche es lediglich so zu erklären, dass du es vielleicht verstehst und dann eventuell sogar besser damit umgehen kannst, denn häufig kann das Verstehen von etwas auch zu Veständnis führen. Aus dem Grund steht unter Verkehrsschildern gelegentlich, warum das Schild dort steht, auch wenn die Information für den Autofahrer irrelevant ist.
#89
Hier der überarbeitete Programmcode. Ich kann ihn natürlich nicht kompilieren und damit nicht auf grobe Fehler prüfen.

#include <PWM.h>                      // Bibliothek zur einstellung des PWM Signals
#include <Wire.h>                     // Wire Bibliothek für die I2C verbindung zum LCD
#include <LiquidCrystal_I2C.h>        // LiquidCrystal_I2C Bibliothek zur komunikation zum LCD
LiquidCrystal_I2C lcd(0x27, 20, 4);   // Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen).

// Konstanten
const int fanPin = 9;                 // Pin für den Lüfter
const int ntc = A0;                   // Pin für den 100kO NTC Wiederstand
const int ntcNominal = 10000;         // Wiederstand des NTC bei Nominaltemperatur
const int tempNominal = 25;           // Temperatur bei der der NTC den angegebenen Wiederstand hat
const int bCoefficient = 3977;        // Beta Coefficient(B25 aus Datenblatt des NTC)
const int serienWiederstand = 10000;  // Wert des Wiederstands der mit dem NTC in Serie geschalten ist
int ledBlau  = 12;                    // Pin für die blaue LED (Kalt) an Pin 12
int ledRot   = 11;                    // Pin für die rote LED (Heiss) an Pin 11
int32_t frequency = 25000;            // einstellen der Lüfterfrequenz  25Khz

/***********************************************
* Variablen
***********************************************/

// Temperatur und Messung
int abfrageZahl = 1; // Je mehr abfragen, desto stabiler isr das Ergebnis, dauert aber länger
int abfrage[abfrageZahl]; // Array Variable für das Mitteln der Temperatur
float durchschnitt = 0; // Variable für das Mitteln der Temperatur
float temp; // Variable für die Berechnung der temperatur nach Steinhart

// Lüftersteuerung
int fanSpeed[10] = {55, 64, 71, 76, 89, 102, 120, 130, 178, 254};

int Stufe = 9;

TempSchwellen[9] = {45, 50, 55, 60, 65, 70, 75, 80, 85} // Für den Anfang größere Abstufungen, besser zum Testen
// TempSchwellen[9] = {60, 63, 67, 70, 73, 77, 80, 82, 84}

int ds1 = 1;                          // DowenSet um 1°C unterdrückt Stufenschwankungen beim abkühlen

void setup()
{
/* Startmelodie
Die Spannungsausgabe für den Piezo-Lautsprecher wird im Sketch durch den Arduino-Befehl "tone"
automatisch festgelegt. Erstes zeichen nach der Klammer ist der Anschnlusspin.*/
tone(8, 1500);                     // Im Hauptteil wird nun mit dem Befehl "tone ( Pinnummer , Tonfrequenz )" ein Ton abgegeben.
delay(250);                        // mit einer Dauer von 0,25 Sekunden
noTone(8);                         // Der Ton wird abgeschaltet
delay(50);                         // Der Lautsprecher kurz aus
tone(8, 2500);
delay(250);
noTone(8);
delay(50);
tone(8, 3500);
delay(250);   
noTone(8);
delay(50);
tone(8, 4500);
delay(250);
noTone(8);
delay(50);
tone(8, 1500);
delay(250);   
noTone(8);

// Lüfteranlauf
analogWrite(fanPin, 100);          // Lüfter startet und geht wieder aus

// Frequenzustellung
InitTimersSafe();                                       // Frenqenz umwandlung startet
bool success = SetPinFrequencySafe(fanPin, frequency);  // Setzt die Frequenz auf Pin

lcd.init();                        //Im Setup wird der LCD gestartet
lcd.backlight();                   //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).


Serial.begin(9600);                // Baudrate für die Ausgabe am Serial Monitor
pinMode(fanPin, OUTPUT);           // Setzt den Pin des Lüfters als Ausgang
pinMode(ntc, INPUT);               // Setzt den Pin des NTC Wiederstands als Eingang
pinMode(ledBlau, OUTPUT);          // definiere die blaue LED als Ausgang
pinMode(ledRot, OUTPUT);           // definiere die blaue LED als Ausgang
}

void loop()
{
temperaturberechnung();            // Startet die Temperaturerfassungsroutine

// Lüfter schaltet in 10 Stufen
switch(Stufe)
{
case 0:
analogWrite(fanPin, fanSpeed[0]);
if(temp > (TempSchwellen[0] + ds1)
{
Stufe++;
}
break;

case 1:
analogWrite(fanPin, fanSpeed[1]);
if(temp < TempSchwellen[0])
{
Stufe--;
}
else if(temp > (TempSchwellen[1] + ds1)
{
Stufe++;
}
break;

case 2:
analogWrite(fanPin, fanSpeed[2]);
if(temp < TempSchwellen[1])
{
Stufe--;
}
else if(temp > (TempSchwellen[2] + ds1)
{
Stufe++;
}
break;

case 3:
analogWrite(fanPin, fanSpeed[3]);
if(temp < TempSchwellen[2])
{
Stufe--;
}
else if(temp > (TempSchwellen[3] + ds1)
{
Stufe++;
}
break;

case 4:
analogWrite(fanPin, fanSpeed[4]);
if(temp < TempSchwellen[3])
{
Stufe--;
}
else if(temp > (TempSchwellen[4] + ds1)
{
Stufe++;
}
break;

case 5:
analogWrite(fanPin, fanSpeed[5]);
if(temp < TempSchwellen[4])
{
Stufe--;
}
else if(temp > (TempSchwellen[5] + ds1)
{
Stufe++;
}
break;

case 6:
analogWrite(fanPin, fanSpeed[6]);
if(temp < TempSchwellen[5])
{
Stufe--;
}
else if(temp > (TempSchwellen[6] + ds1)
{
Stufe++;
}
break;

case 7:
analogWrite(fanPin, fanSpeed[7]);
if(temp < TempSchwellen[6])
{
Stufe--;
}
else if(temp > (TempSchwellen[7] + ds1)
{
Stufe++;
}
break;

case 8:
analogWrite(fanPin, fanSpeed[8]);
if(temp < TempSchwellen[7])
{
Stufe--;
}
else if(temp > (TempSchwellen[8] + ds1)
{
Stufe++;
}
break;

case 9:
analogWrite(fanPin, fanSpeed[9]);
if(temp < TempSchwellen[8])
{
Stufe--;
}
break;
}

// optische Ausgabe
Serial.print("fanSpeed: ");
Serial.print(fanSpeed[Stufe]);
Serial.println(" - Stufe: ");
Serial.print(Stufe);
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed[Stufe]);
lcd.print(" - Step: ");
lcd.print(Stufe); // Wenn das nicht funktioniert, dann lcd.print(Stufe + 0x30); probieren
}

void temperaturberechnung()
{
// Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
for (int i=0; i < abfrageZahl; i++)
{
abfrage[i] = analogRead(ntc);
delay(10);
}
   
// Mittelt alle Abfragen
durchschnitt = 0;
for (int i=0; i < abfrageZahl; i++)
{
durchschnitt += abfrage[i];
}
durchschnitt /= abfrageZahl;
   
// Umwandlung des Wertes in Wiederstand
durchschnitt = 1023 / durchschnitt - 1;
durchschnitt = serienWiederstand / durchschnitt;
   
// Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
temp = durchschnitt / ntcNominal;                   // (R/Ro)
temp = log(temp);                                   // ln(R/Ro)
temp /= bCoefficient;                               // 1/B * ln(R/Ro)
temp += 1.0 / (tempNominal + 273.15);               // + (1/To)
temp = 1.0 / temp;                                  // Invertieren
temp -= 273.15;                                     // Umwandeln in °C
   
// Ausgabe an den Seriellen Monitor
Serial.print("Temperatur ");
Serial.print(temp);
Serial.println(" °C");
// Was am LCD angezeigt werden soll
lcd.setCursor(0,0);               // Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print("Temperatur:");         // In der ersten Zeile soll ein Text in Zeile 1 angezeigt werden
lcd.print(temp);                  // Wert der in der Zeile 1 neben dem Text angezeigt wird
lcd.print("C ");                  // Text der in der Zeile 1 neben dem Wert angezeigt wird

// LED Temperaturwarung Blau zu Rot
digitalWrite(ledBlau, HIGH);                        // macht die blaue LED am Start an
if (temp >= 82) digitalWrite(ledBlau, LOW);         // mache die blaue LED bei 82 °C aus

digitalWrite(ledRot, LOW);                          // macht die rote LED am Start aus
if (temp >= 83) digitalWrite(ledRot, HIGH);         // mache die rote LED bei 83 °C an

// Übertemperatur Summerwarung
if (temp >= 83) {
tone(8, 1500);                // mache den Summer bei 84 °C an
}
delay(1100);                      // mit einer Dauer von etwas über einer Sekunde
noTone(8);                        // Der Ton wird abgeschaltet
delay(25);                        // Dauer der Abschaltung

// Sensordefekt Warnung ( LED wechselt von Rot zu Blau und Summer ertönt)
digitalWrite(ledRot, LOW);        // macht die rote LED ab Start aus
if (temp <= 0) {
digitalWrite(ledRot, HIGH);   // mache die rote LED unter 0 °C an
}
if (temp <= 0) {
tone(8, 1500);                // Aktiviert den Warnsummer
}
delay(1100);                      // mit einer Dauer von etwas über einer Sekunde
noTone(8);                        // Der Ton wird abgeschaltet
delay(25);                        // Dauer der Abschaltung
// Fehlermeldung bei unterbrechung Sensor
// LED Blau wechselt zu Rot und wieder zu Blau und so weiter ... Und Warnsummer ertönt.
// Selbes Bild erscheint auch unter °0C
}


Mich verwundert, dass du schreibst, mit dem Code wäre das alles sehr träge. Wenn das träge ist, dann ist die Abarbeitung so richtig langsam, denn viel zu berechnen ist das noch nicht. Da ist dann ganz wo anders ein Problem.
Wenn der Code oben nicht funktioniert, dann halte ich es für sinnvoller den Fehler zu finden, als es komplett umzuschreiben, mit der Hoffnung, dass der Fehler dabei nicht mitgeschleift wird.

Die switch-case-Anweisung in der Hauptfunktion loop() lässt sich außerdem extrem zusammenstauchen:
void loop()
{
temperaturberechnung();            // Startet die Temperaturerfassungsroutine

// Lüfter schaltet in 10 Stufen
if(Stufe > 0)
{
if(temp < TempSchwellen[Stufe-1])
{
Stufe--;
}
}
if(Stufe < 9)
{
if(temp > (TempSchwellen[Stufe] + ds1)
{
Stufe++;
}
}
analogWrite(fanPin, fanSpeed[Stufe]);

// optische Ausgabe
Serial.print("fanSpeed: ");
Serial.print(fanSpeed[Stufe]);
Serial.println(" - Stufe: ");
Serial.print(Stufe);
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed[Stufe]);
lcd.print(" - Step: ");
lcd.print(Stufe); // Wenn das nicht funktioniert, dann lcd.print(Stufe + 0x30); probieren
}


Das geht, da in jedem "case" der gleiche Code steht, mit wenigen Ausnahmen. Einmal werden die Zahlen darin hochgezählt, wobei die Differenz zum Vergleichswert in "case" immer identisch ist. Die Zahl lässt sich also immer in Abhängigkeit von der Zahl hinter "case" ausdrücken und damit mit der Zahl, die in switch() geprüft wird, nämlich die Variable "Stufe". Mal exemplarisch für Stufe 5:
case 5:
analogWrite(fanPin, fanSpeed[5]);
if(temp < TempSchwellen[4])
{
Stufe--;
}
else if(temp > (TempSchwellen[5] + ds1)
{
Stufe++;
}
break;

Das macht das Gleiche wie:
Zitatcase 5:
         // Variable "Stufe" hat den Wert 5
         analogWrite(fanPin, fanSpeed[Stufe]);
         if(temp < TempSchwellen[Stufe-1])
         {
            Stufe--;
         }
         else if(temp > (TempSchwellen[Stufe] + ds1)
         {
            Stufe++;
         }
      break;

Also eigentlich könnte man einfach nur diesen Code für alle Stufen verwenden und braucht dann die switch-case-Anweisung nicht mehr. Weil aber bei der kleinsten Stufe das Herunterzählen und bei der höchsten das Hochzählen fehlt, wird bei der ersten if-Abfrage noch zusätzlich kontrolliert, ob nicht schon die niedrigste Stufe erreicht ist. Bei der zweiten if-Abfrage wird geprüft, ob die höchste schon erreicht ist.
Weil die zweite if-Abfrage niemals wahr sein kann, wenn die erste wahr ist, macht es keinen Unterschied, ob wir bei der zweiten "else if" oder nur "if" verwenden. Einziger Unterschied ist die Abarbeitungszeit. Das "else" darf man also streichen. Und heraus kommt, was ich oben schrieb.
#90
Hab die Zitat-Tags mal in Code-Tags geändert, nun nimmt der Post keine 5 Monitor-Seiten ein ;)

Wie gesagt, ich habe keine Ahnung von Arduino, daher weiß ich nicht, ob ein Int davor muss, was anderes oder gar nichts.

we3dm4n hat es ja bereits erklärt. "<" und ">" schließen eine Gleichheit aus. Wenn die Variable var den Wert 60 hat, dann ist die Klammer (var < 60) ist falsch, während (var <= 60) wahr ist. Das st wichtig, da du mit deiner Abfrage-Struktur auf jeden Wert reagieren möchtest. Ohne dem Gleichheitszeichen fallen die exakten Schwellwerte aber raus, das heißt da passiert gar nichts. Das ist in dem Fall vermutlich nicht so dramatisch, weil der Wert Schwankungen unterliegt, aber es ist unsauber und ich würde das auf jeden Fall berücksichtigen, denn wer weiß, was es vielleicht doch für Probleme macht.
Wichtig ist: Du darfst das nur "auf einer Seite" ("größer als" oder "kleiner als") verwenden, sonst gibt es zwei Abfragen, in denen der exakte Schwellwert zu einem "wahr" führt.

Zitat von: MaikLommatzsch am 10. März 2022, 13:46:08   switch (fanSteps)                  // Anfang Lüfterstufen
   {
   case 0:                                // Case 0 = Lüfter schaltet in 10 Stufen
// statements
   if (temp < t60 ) {                                // bis 60°C bleibt Stufe 0
       analogWrite(fanPin, fanSpeed0);      // dann Lüfter auf speed0 55 (22%)

   }
   if (temp >= t60 and temp <= t63 [b]- ds1[/b] ) {       // Stufe 1 schaltet bei 60°C oder unter 63°C (62°C)
       analogWrite(fanPin, fanSpeed1);                            // dann Lüfter auf speed1 64 (25%)

   }
   if (temp >= t63 and temp <= t67 [b]- ds1[/b] )  {   // Stufe 2 schaltet bei 63°C oder unter 67°C (66°C)
       analogWrite(fanPin, fanSpeed2);                         // dann Lüfter auf speed2 71 (28%)

   }

Die Hysterese kannst du in der if-Abfrage nicht einbauen. Das tut nicht das, was du dir vorstellst. Du fragst in einem Durchlauf IMMER alle Temperaturbereiche ab. Hast du eine Überlappung der Temperaturbereiche, wird immer die höhere Lüfterstufe benutzt, denn wenn eine Abfrage wahr ist, ist die nächste auch noch wahr und dann wird sofort die nächst höhere Lüfterstufe eingestellt.
Der Trick an dem Aufbau mit der switch-case-Struktur ist, dass die Grenzen zum Umschalten abhängig von der derzeitigen Lüfterstufe sind. Das ist die einfache Variante, die du auch ganz am Anfang umgesetzt hast:



Das wollen wir haben:



Hat die Konsole 69 °C, kann die Lüfterstufe 3 oder 4 sein, je nachdem, welche Temperatur vorher war. War sie vorher 70 °C, ist die Stufe 4 und sie muss auf 68°C fallen, damit die Stufe auf 3 wechselt. Danach muss sie auf 70 steigen, damit sie wieder auf Stufe 4 wechselt.
Das funktioniert aber nur, wenn du die aktuelle Lüfsterstufe mit verwurstest. Mit den if-Abfragen ausschließlich für die Temperatur, würde bei 69 °C jedes Mal Stufe 3 und direkt danach 4 ausgegeben werden. Bei der nächsten Abfrage das Gleiche. Im Resultat hast du dann immer Stufe 4.
Oder anders erklärt: Du fragst immer ab, ob die Bedingung für die jeweilige Stufe erfüllt ist. Mit 69 °C ist die Bedingung für zwei Stufen erfüllt. Mit der switch-case-Anweisung fragst du zunächst die aktuelle Lüfterstufe ab und entscheidest dann individuell für diese Stufe, ob das Kriterium zum Verlassen der Stufe erfüllt ist. Das ermöglicht für jede Stufe unterschiedliche Kriterien.

Und das hast du da programmiert ;D



Du musst die obere Schwelle normalerweise erhöhen und die untere Schwelle verringern. Stattdessen hast du die obere Schwelle verringert, wodurch eine Lücke entsteht.

Der komplette Programmcode ist schon mal praktisch, so kann man das Ganze viel besser verstehen und Fehler finden. Den Code habe ich erst einmal vernünftig eingerückt. Nicht sauber eingerückt ist wie eine miese Handschrift, die keiner lesen kann, außer man nimmt sich viel Zeit das zu entziffern. Hier ist dein originaler Programmcode ohne inhaltliche Änderungen:
#include <PWM.h>                      // Bibliothek zur einstellung des PWM Signals
#include <Wire.h>                     // Wire Bibliothek für die I2C verbindung zum LCD
#include <LiquidCrystal_I2C.h>        // LiquidCrystal_I2C Bibliothek zur komunikation zum LCD
LiquidCrystal_I2C lcd(0x27, 20, 4);   // Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen).

// Konstanten
const int fanPin = 9;                 // Pin für den Lüfter
const int ntc = A0;                   // Pin für den 100kO NTC Wiederstand
const int ntcNominal = 10000;         // Wiederstand des NTC bei Nominaltemperatur
const int tempNominal = 25;           // Temperatur bei der der NTC den angegebenen Wiederstand hat
const int bCoefficient = 3977;        // Beta Coefficient(B25 aus Datenblatt des NTC)
const int serienWiederstand = 10000;  // Wert des Wiederstands der mit dem NTC in Serie geschalten ist
int ledBlau  = 12;                    // Pin für die blaue LED (Kalt) an Pin 12
int ledRot   = 11;                    // Pin für die rote LED (Heiss) an Pin 11
int32_t frequency = 25000;            // einstellen der Lüfterfrequenz  25Khz

// Variablen
int t60 = 60;                         // ab hier werden die benötigten Temeraturen angegeben
int t63 = 63;
int t67 = 67;
int t70 = 70;
int t73 = 73;
int t77 = 77;
int t80 = 80;
int t82 = 82;
int t83 = 83;
int t84 = 84;
int t85 = 85;

int ds1 = 1;                          // DowenSet um 1°C unterdrückt Stufenschwankungen beim abkühlen
   
int fanSteps = 0;                     // es wird mit Lüfterstufen gearbeitet

int fanSpeed0 = 55;                   // ab hier werden die Lüfter geschwindigkeiten
int fanSpeed1 = 64;                   // für jede Stufe gesetzt
int fanSpeed2 = 71;
int fanSpeed3 = 76;
int fanSpeed4 = 89;
int fanSpeed5 = 102;
int fanSpeed6 = 120;
int fanSpeed7 = 130;
int fanSpeed8 = 178;
int fanSpeed9 = 254;                  // bei 255 arbeitet der Lüfter stoßweise. darum 254

int abfrageZahl = 1;                  // Je mehr abfragen, desto stabiler isr das Ergebnis, dauert aber länger
int abfrage[1];                       // Array Variable für das Mitteln der Temperatur
float durchschnitt = 0;               // Variable für das Mitteln der Temperatur
float temp;                           // Variable für die Berechnung der temperatur nach Steinhart


void setup()
{
/* Startmelodie
Die Spannungsausgabe für den Piezo-Lautsprecher wird im Sketch durch den Arduino-Befehl "tone"
automatisch festgelegt. Erstes zeichen nach der Klammer ist der Anschnlusspin.*/
tone(8, 1500);                     // Im Hauptteil wird nun mit dem Befehl "tone ( Pinnummer , Tonfrequenz )" ein Ton abgegeben.
delay(250);                        // mit einer Dauer von 0,25 Sekunden
noTone(8);                         // Der Ton wird abgeschaltet
delay(50);                         // Der Lautsprecher kurz aus
tone(8, 2500);
delay(250);
noTone(8);
delay(50);
tone(8, 3500);
delay(250);   
noTone(8);
delay(50);
tone(8, 4500);
delay(250);
noTone(8);
delay(50);
tone(8, 1500);
delay(250);   
noTone(8);

// Lüfteranlauf
analogWrite(fanPin, 100);          // Lüfter startet und geht wieder aus

// Frequenzustellung
InitTimersSafe();                                       // Frenqenz umwandlung startet
bool success = SetPinFrequencySafe(fanPin, frequency);  // Setzt die Frequenz auf Pin

lcd.init();                        //Im Setup wird der LCD gestartet
lcd.backlight();                   //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).


Serial.begin(9600);                // Baudrate für die Ausgabe am Serial Monitor
pinMode(fanPin, OUTPUT);           // Setzt den Pin des Lüfters als Ausgang
pinMode(ntc, INPUT);               // Setzt den Pin des NTC Wiederstands als Eingang
pinMode(ledBlau, OUTPUT);          // definiere die blaue LED als Ausgang
pinMode(ledRot, OUTPUT);           // definiere die blaue LED als Ausgang
}

void loop()
{
temperaturberechnung();            // Startet die Temperaturerfassungsroutine

switch (fanSteps)                  // Anfang Lüfterstufen
{
case 0:                        // Case 0 = Lüfter schaltet in 10 Stufen
// statements
if (temp < t60 ) {                              // bis 60°C bleibt Stufe 0
analogWrite(fanPin, fanSpeed0);             // dann Lüfter auf speed0 55 (22%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed0);
Serial.println(" - Stufe: 0");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed0);
lcd.print(" - Step: 0 ");
}
if (temp >= t60 and temp <= t63 - ds1 ) {       // Stufe 1 schaltet bei 60°C oder unter 63°C (62°C)
analogWrite(fanPin, fanSpeed1);             // dann Lüfter auf speed1 64 (25%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed1);
Serial.println(" - Stufe: 1");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed1);
lcd.print(" - Step: 1 ");
}
if (temp >= t63 and temp <= t67 - ds1 )  {      // Stufe 2 schaltet bei 63°C oder unter 67°C (66°C)
analogWrite(fanPin, fanSpeed2);             // dann Lüfter auf speed2 71 (28%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed2);
Serial.println(" - Stufe: 2");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed2);
lcd.print(" - Step: 2 ");
}
if (temp >= t67 and temp <= t70 - ds1 ) {       // Stufe 3 schaltet bei 67°C oder unter 70°C (69°C)
analogWrite(fanPin, fanSpeed3);             // dann Lüfter auf speed3 76 (30%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed3);
Serial.println(" - Stufe: 3");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed3);
lcd.print(" - Step: 3 ");
}   
if (temp >= t70 and temp <= t73 - ds1 ) {       // Stufe 4 schaltet bei 70°C oder unter 73°C (72°C)
analogWrite(fanPin, fanSpeed4);             // dann Lüfter auf speed4 89 (35%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed4);
Serial.println(" - Stufe: 4");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed4);
lcd.print(" - Step: 4 ");
}
if (temp >= t73 and temp <= t77 - ds1 ) {       // Stufe 5 schaltet bei 73°C oder unter 77°C (76°C)
analogWrite(fanPin, fanSpeed5);             // dann Lüfter auf speed5 102 (40%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed5);
Serial.println(" - Stufe: 5");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed5);
lcd.print(" - Step: 5 ");
}
if (temp >= t77 and temp <= t80 - ds1 ) {      // Stufe 6 schaltet bei 77°C oder unter 80°C (79°C)
analogWrite(fanPin, fanSpeed6);            // dann Lüfter auf speed6 120 (47%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed6);
Serial.println(" - Stufe: 6");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed6);
lcd.print(" - Step: 6 ");
}
if (temp >= t80 and temp <= t82 - ds1 ) {       // Stufe 7 schaltet bei 80°C oder unter 82°C (81°C)
analogWrite(fanPin, fanSpeed7);             // dann Lüfter auf speed7 130 (50%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed7);
Serial.println(" - Stufe: 7");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed7);
lcd.print(" - Step: 7 ");
}
if (temp >= t82 and temp <= t84 - ds1 ) {       // Stufe 8 schaltet bei 82°C oder unter 84°C (83°C)
analogWrite(fanPin, fanSpeed8);             // dann Lüfter auf speed8 178 (70%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed8);
Serial.println(" - Stufe: 8");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed8);
lcd.print(" - Step: 8 ");
}
if (temp > t84 ) {                              // Stufe 9 schaltet ab 84°C
analogWrite(fanPin, fanSpeed9);             // dann Lüfter auf speed9 254 (100%)
Serial.print("fanSpeed: ");
Serial.print(fanSpeed9);
Serial.println(" - Stufe: 9");
lcd.setCursor(0,2);       
lcd.print("PWM: ");
lcd.print(fanSpeed9);
lcd.print(" - Step: 9 ");
}

break;
}
// Ende Lüfterstufen
}

void temperaturberechnung()
{
// Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
for (int i=0; i < abfrageZahl; i++)
{
abfrage[i] = analogRead(ntc);
delay(10);
}
   
// Mittelt alle Abfragen
durchschnitt = 0;
for (int i=0; i < abfrageZahl; i++)
{
durchschnitt += abfrage[i];
}
durchschnitt /= abfrageZahl;
   
// Umwandlung des Wertes in Wiederstand
durchschnitt = 1023 / durchschnitt - 1;
durchschnitt = serienWiederstand / durchschnitt;
   
// Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
temp = durchschnitt / ntcNominal;                   // (R/Ro)
temp = log(temp);                                   // ln(R/Ro)
temp /= bCoefficient;                               // 1/B * ln(R/Ro)
temp += 1.0 / (tempNominal + 273.15);               // + (1/To)
temp = 1.0 / temp;                                  // Invertieren
temp -= 273.15;                                     // Umwandeln in °C
   
// Ausgabe an den Seriellen Monitor
Serial.print("Temperatur ");
Serial.print(temp);
Serial.println(" °C");
// Was am LCD angezeigt werden soll
lcd.setCursor(0,0);               // Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print("Temperatur:");         // In der ersten Zeile soll ein Text in Zeile 1 angezeigt werden
lcd.print(temp);                  // Wert der in der Zeile 1 neben dem Text angezeigt wird
lcd.print("C ");                  // Text der in der Zeile 1 neben dem Wert angezeigt wird

// LED Temperaturwarung Blau zu Rot
digitalWrite(ledBlau, HIGH);                        // macht die blaue LED am Start an
if (temp >= 82) digitalWrite(ledBlau, LOW);         // mache die blaue LED bei 82 °C aus

digitalWrite(ledRot, LOW);                          // macht die rote LED am Start aus
if (temp >= 83) digitalWrite(ledRot, HIGH);         // mache die rote LED bei 83 °C an

// Übertemperatur Summerwarung
if (temp >= 83) {
tone(8, 1500);                // mache den Summer bei 84 °C an
}
delay(1100);                      // mit einer Dauer von etwas über einer Sekunde
noTone(8);                        // Der Ton wird abgeschaltet
delay(25);                        // Dauer der Abschaltung

// Sensordefekt Warnung ( LED wechselt von Rot zu Blau und Summer ertönt)
digitalWrite(ledRot, LOW);        // macht die rote LED ab Start aus
if (temp <= 0) {
digitalWrite(ledRot, HIGH);   // mache die rote LED unter 0 °C an
}
if (temp <= 0) {
tone(8, 1500);                // Aktiviert den Warnsummer
}
delay(1100);                      // mit einer Dauer von etwas über einer Sekunde
noTone(8);                        // Der Ton wird abgeschaltet
delay(25);                        // Dauer der Abschaltung
// Fehlermeldung bei unterbrechung Sensor
// LED Blau wechselt zu Rot und wieder zu Blau und so weiter ... Und Warnsummer ertönt.
// Selbes Bild erscheint auch unter °0C
}


Gewöhne dir bitte an einen einheitlichen Stil zu verwenden. Die schließende geschweifte Klammer immer auf gleicher Ebene wie der Ausdruck, nach dem die öffnende Klammer kam. Alles innerhalb der Klammer um einen Tab weiter eingerückt und so weiter.
Vermeide if-Abfragen ohne geschweifte Klammer. Das geht, führt aber gerade bei Anfängern schnell zu Fehlern. Ich bin mir nämlich auch nicht sicher, ob das am Ende so gewollt ist bei "// Übertemperatur Summerwarung", aber genau so war es programmiert.

Nun versuche ich den Code einmal anzupassen. Das kommt in meinem nächsten Beitrag, um das hier erst mal abzuspeichern.

Edit: Ach ja, doch noch was.
Was soll das switch(fanSteps)? Es gibt nur eine Option und es ist immer die gleiche Option, der Wert ändert sich nicht. Ist das "für später"? Ich würde das erst mal herausnehmen, macht es einfacher.