Frage an die C Programmierer Im Unterforum Hardware, Betriebssysteme, Programmiersprachen - Beschreibung: Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht.
Elektronik- und Elektroforum Forum Index >>
Hardware, Betriebssysteme, Programmiersprachen
Hardware, Betriebssysteme, Programmiersprachen : Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht. |
Autor |
Frage an die C Programmierer |
|
|
|
|
BID = 1088382
Kleinspannung Urgestein
Beiträge: 13359 Wohnort: Tal der Ahnungslosen
|
|
Kann man in C ein Konstrukt schreiben,das ungefähr so funktioniert:
Wenn Wert A von Wert B um mehr als +/- 5(10 ,20 irgendwas) abweicht,dann mache die das und jenes?
Meine bescheidenen Kenntnisse geben grad nichts her.
Grinterhund der Frage ist folgendes:
(vielleicht gehts ja auch ganz anders)
Die Helligkeissteuerung meiner Wortuhr mach ich derzeit so:
Am Beginn und Ende der Loop wird der ADC abgefragt,an dem der LDR dranhängt.Wenn da eine Abweichung ist,wird das aktuelle Bitmuster mit dem geänderten Helligkeitswert neu geschrieben,ansonsten macht er das nur,wenn eine neue Minute erkannt wurde.
Das hat den Grund,das die Ansteuerung der programmierbaren LED die ich verwende bzw. das Protokoll elendig lahm ist.Die Zeit die er braucht um das alte Muster zu löschen und ein neues zu schreiben siehst als kurzes flackern.Und wenn sich jetzt der Wert des ADC auch nur um eins in der Zeit ändert,flackerts halt permanent.
Und das nervt mich bissl...
Ich hab schon an den Eingang vom ADC nen kleinen Elko als "Bremse" gehängt und laß ihn paar Mal in ner Schleife messen und bilde dann den Durchschnitt.Ist aber alles noch nicht so das Wahre.
Deshalb kam ich auf die Idee,da was reinzumurksen,das die Aktion nur stattfindet,wenn die Helligkeitsänderung nach Plus oder Minus einen gewissen Wert übersteigt.
Kann mich wer erleuchten?
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein) |
|
BID = 1088384
BlackLight Inventar
Beiträge: 5319
|
|
Sowas?
Code : |
const int Abweichung = 5;
if ( (A + Abweichung > B) || (A - Abweichung < B) )
{
// Tue was
Update_LED(Wert_neu);
}
else
{
//Sonst tue was anders - kann auch entfallen
foobar();
}
|
|
|
|
BID = 1088385
Jornbyte Moderator
Beiträge: 7178
|
Ich versuchs mal
Bei mir soll die Hell sein am Tag
und am Abend keine Lampe die den Raum beleuchtet.
LDR am Analogeingang ohne C-Gedönns.
Dann Umrechnung in % und brightness ablegen.
valLight = analogRead(sensorPin);
int brightness = double ((valLight/1023) * 100);
if(brightness < 5) brightness = 5;
Dann wird brightness an die LED übergeben.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 1088394
Ltof Inventar
Beiträge: 9330 Wohnort: Hommingberg
|
Unabhängig von der Programmiersprache (die jeweilige Syntax ist zu beachten, so dass es im Detail anders aussieht):
abs(A-B) gibt nur den Wert ohne Vorzeichen zurück.
Das andere Konstrukt hat BlackLight gemacht: Wenn ((A-B)>x) oder ((B-A)>x) dann tu es!
Sieht kryptisch aus, ist es aber nicht: (((A-B)>x)*((B-A)<x)) wenn beide Vergleiche unwahr sind, ist der Wert 0, sonst nicht.
Du kannst aber auch mit (A-B)^2 vergleichen, das ist immer positiv.
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 1088402
Jornbyte Moderator
Beiträge: 7178
|
@Kleinspannung hast du darann gedacht das die nur in 256 Stufen Dimmbar sind?
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 1088422
Jornbyte Moderator
Beiträge: 7178
|
Noch ne Nachfrage... verwendest du die Lib von der Ada?
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 1088423
Kleinspannung Urgestein
Beiträge: 13359 Wohnort: Tal der Ahnungslosen
|
Ich wußte,das es einfach sein kann,ich kam bloß nicht drauf.
Habs jetzt so geschrieben wie vom Kollegen Schwarzlicht vorgeschlagen,und siehe da,es funktioniert.
Ich Depp hab bisher nur auf A ungleich B getestet.
Und das isses eben öfter...
Zitat :
|
Du kannst aber auch mit (A-B)^2 vergleichen, das ist immer positiv. |
Jetzt wo du es sagst wie man negative Zahlen vermeidet,fällt es mir auch wieder wie Schuppen aus den Haaren.
Aber mein Matheunterricht ist eben auch schon 40 Jahre her...
Zitat :
| Kleinspannung hast du darann gedacht das... |
Ja,hat er.
Ich danke euch!
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)
|
BID = 1088424
Kleinspannung Urgestein
Beiträge: 13359 Wohnort: Tal der Ahnungslosen
|
Zitat :
Jornbyte hat am 7 Okt 2021 21:31 geschrieben :
|
verwendest du die Lib von der Ada?
|
Ja.
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)
|
BID = 1088434
Ltof Inventar
Beiträge: 9330 Wohnort: Hommingberg
|
Korrektur:
Zitat :
Ltof hat am 7 Okt 2021 09:08 geschrieben :
|
Sieht kryptisch aus, ist es aber nicht: (((A-B)>x)*((B-A)<x)) ...
|
Das war etwas voreilig hingerotzt und funktioniert nicht. Das ist ein exclusiv nimmer, also immer 0.
So müsste es aussehen:
(((A-B)<x)*((B-A)<x))
Bei einer Differenz <x ist der Ausdruck wahr, sonst unwahr.
Offtopic :
| Solche Konstrukte hab ich mir in der Zeit angewöhnt, als Basic-Taschencomputer nur wenige Kilobyte Programmspeicher hatten, um halbwegs komplexe logische Ausdrücke und numerische Vergleiche in eine Zeile zu quetschen. In einer Tabellenkalkulation funktioniert das auch ganz gut. |
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 1088441
Brizz Stammposter
Beiträge: 386 Wohnort: Rheine
|
Hallo Kleinspannung
"Ich hab schon an den Eingang vom ADC nen kleinen Elko als "Bremse" gehängt und lass ihn paar Mal in ner Schleife messen und bilde dann den Durchschnitt"
Man auch digital bremsen;
int ADC_Wandler_Roh_Wert; // Wert des ADCs
float ADC_Wandler_Wert; // gedämpfter ADC-Wert
float Daempfungs_Faktor; // Dämpfungsstärke
int FunktionBlBlBla (..) {
.
.
.
// wirkt wie ein Tiefpass RC-Glied (e-Funktion an diskreten Punkten)
// nach jeder neuen ADC_Wandlung
if (EndOfConversion ) { // wenn ADC-Wandler einen neuen Roh-Wert hat
ADC_Wandler_Wert = (
ADC_Wandler_Wert * Daempfungs_Faktor + (float)ADC_Wandler_Roh_Wert
) / (1.0f + Daempfungs_Faktor);
}
.
.
.
} // ENDE FunktionBlBlBla
Gruss
Brizz
|
BID = 1088464
BlackLight Inventar
Beiträge: 5319
|
Offtopic :
|
Zitat : Ltof hat am 8 Okt 2021 10:19 geschrieben :
|
Korrektur:
[...]
Solche Konstrukte hab ich mir in der Zeit angewöhnt, als Basic-Taschencomputer nur wenige Kilobyte Programmspeicher hatten, [...] | Seit dem ich mal mit https://de.wikipedia.org/wiki/Softwaremetriken (z.B. McCabe-Metrik (auch zyklomatische Komplexität)) in Kontakt kam, kommt mir bei solchen Konstrukten gerne das Kotzen.
(Nur für die "Fast InvSqrt()" mache ich mal eine Ausnahme.)
Ich ärgere mich jedes mal, wenn ich so toll dokumentierten Quellcode von mir finde. Da ist teilweise wegschmeißen und neu schreiben schneller. Vor allem wenn die Variablen wirklich "A", "B" oder "X" heiße sollten..
Zum Glück programmieren meine Kollegen nicht und ich muss keine Gewalt androhen.
Heutzutage macht sowas praktisch keinen Sinn. Einmal ist Speicherplatz genügend vorhanden und der Compiler kann diese einfachen Ausdrücke bestimmt besser optimieren als 99,9% der Programmierer.
Und wenn ich mich richtig erinnere, wird bei || nach dem ersten True-Term abgebrochen. Bei einer Multiplikation wird sicherlich der komplette Ausdruck ausgewertet. Macht hier jetzt keinen Unterschied, wenn es aber komplexer wird evtl. schon.
Aber seinen Programmierstil darf jeder selber finden bzw. festlegen.
Ich bin ja ein Fan von übersichtlichen Code mit aussagekräftigen Variablen geworden. Am besten die Konstanten oben oder in einer eigenen h-Datei definiert.
So kann man sich auch nach Monaten den Code halbwegs schnell wieder verstehen.
|
|
BID = 1090133
CarstenP Gerade angekommen
Beiträge: 5
|
Zitat :
BlackLight hat am 8 Okt 2021 20:17 geschrieben :
|
zyklomatische Komplexität
[..., A, B, X]
gerne das Kotzen.
|
Halleluja! Und Amen!
Ich möchte dir am liebsten einen Blumenstrauß schenken für deine klaren Worte! Die Zeiten von obfuscated code sind so dermaßen vorbei, aber irgendwie wollen das viele nicht wahr haben. Seit Jahrzehnten haben wir die GCC, die auch die AVR-Welt betreibt, und es gibt wohl kaum einen Compiler, der selbst so genial optimiert. Klar, bis auf die Ausnahmen, die ganz speziell für den und den Kern geschrieben wurden, und guess what, die meisten davon basieren auch auf dem GCC, etwa bei nVidia und deren Tensor Cores.
Es gibt im Netz genügend Battles zu finden, in denen GCC mit allen verfügbaren Optimierungen gegen puren Maschinencode antreten, und die GCC sind im schlechtesten (!) Fall 6% langsamer und im besten gleich schnell.
Nochmal zum Nachdenken:
int RegulaererMehrwertsteuersatzInDeuschland = 19;
frisst im Editor auf dem PC 40 Long-Words mehr als
int m = 19;
Aber nicht auf dem µC! Oder wer kompiliert hier seinen Code direkt auf dem Arduino oder nem ATtiny45? 8D Im Übrigen ist die Namensgebung für die MwSt natürlich komplett irrsinnig schlecht, es war nur ein Beispiel wegen der Bytes.
Die Zeiten von Step 7 sind echt vorbei. Solche Begriffe wie zyklomatische Komplexität, Wartbarkeitsindex, Betonfaktor, Clean Code, das ist alles so alt, als das erdacht wurde, hatte ich noch Haare mit Farbe, und es ist nix mehr zum Lernen, das muss man einfach verinnerlicht haben! Ralph E. Johnson (einer der "Gang of Four") ist 1955 geboren, und Martin Fowler wird im Dezember 58 Jahre alt. Alte Männer, aber mit Ideen, die sich immer noch nicht zum Standard durchgesetzt haben.
Ganz im Ernst, in Zeiten vom nVidia Xavier, von Tensor Cores, von Messaging Components kommt dann wer mit "aber ich fühle mich besser mit * statt ||"... Boah. Da wundere ich mich echt nicht mehr, wieso manche viele Aufträge bekommen und manche keine mehr.
Aber, ja, ohne Humor, dass noch ein paar Leute Fortran lesen können, hält andererseits die Wirtschaft auch am Laufen. Auf das Jahr 2030, lasst uns dann drüber diskutieren, ob Kupfer oder Glasfaser besser sind.
|
BID = 1090147
Ltof Inventar
Beiträge: 9330 Wohnort: Hommingberg
|
Offtopic :
| Ihr geht ja steil als würde hier jemand ein Experiment mit Netzspannung für einen Kindergarten vorbereiten wollen. Kommt mal wieder runter und geht anderswo kotzen. Was bitteschön hat das da oben mit Obfuskation zu tun? Das ist lediglich die Verknüpfung eines logischen Vergleichs mit einem Wert. Und Kleinspannung macht hier ein Hobbyprojekt. Wie er seine Variablen nennt, ist seine Sache. Das war nur ein Beispiel auf seine Frage bezogen. Das taucht nie irgendwo auf und muss von Anderen gepflegt werden. Da sind Lesbarkeit, Wartbarkeit und andere Programmierkonventionen sowas von egal. |
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
[ Diese Nachricht wurde geändert von: Ltof am 19 Nov 2021 8:17 ]
|
BID = 1090155
Grek-1 Gesprächig
Beiträge: 166 Wohnort: Buchloe
|
Hallo Carsten P,
Ich verstehe leider Deinen Kommentar bzw. deine Antwort auf dem Thread nicht.
Kannst Du das vielleicht auch für Dumme erklären
Lg Grek-1
_________________
Meine Tips und Ratschläge sind unverbindlich, da ich nicht vor dem Gerät sitze. Daher wird bei möglichen Schäden an Sachen und Personen keine Haftung übernommen. Immer die gültigen Vorschriften beachten.Im Zweifelsfalle bitte eine Fachkraft kontaktieren.
|
BID = 1090181
BlackLight Inventar
Beiträge: 5319
|
@Grek-1:
Im Prinzip das was ich schon schrieb, hat mir noch ein paar mehr Beispielen.
Kurz und bündig:
Schreibt einfachen Code, der Compiler optimiert den zig mal besser als ein Hobby-Programmierer.
Offtopic :
|
Zitat : Ltof hat am 19 Nov 2021 07:56 geschrieben :
| Ihr geht ja steil als würde hier jemand ein Experiment mit Netzspannung für einen Kindergarten vorbereiten wollen. | Ne, schlimmer. Hier geht es um leserliches Programmieren.
Zitat :
| Was bitteschön hat das da oben mit Obfuskation zu tun? | Weil ein dummer Compiler bestimmt nicht A) versteht (was gemeint war) sondern womöglich B) umsetzt?
A) (bool) (bool((A-B)>x) * (bool)((B-A)<x) )
B) (bool) {(long)((A-B)>x) * (long)((B-A)<x) )}
Zitat :
| Das taucht nie irgendwo auf und muss von Anderen gepflegt werden. | Doch, in n Monaten brauche ich üblicherweise meinen Code für ein neues Projekt. |
END.
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182372168 Heute : 0 Gestern : 6414 Online : 314 22.11.2024 0:00 1 Besucher in den letzten 60 Sekunden alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0734479427338
|