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 Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 19 4 2024  06:15:37      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


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.

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Frage an die C Programmierer

    







BID = 1088382

Kleinspannung

Urgestein



Beiträge: 13330
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: 5219

 

  

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: 7074

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: 9268
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: 7074

@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: 7074

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: 13330
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: 13330
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: 9268
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: 5219


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: 9268
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: 163
Wohnort: Buchloe
Zur Homepage von Grek-1

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: 5219

@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.


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


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 24 Beiträge im Durchschnitt pro Tag       heute wurden bisher 0 Beiträge verfasst
© x sparkkelsputz        Besucher : 180924349   Heute : 841    Gestern : 8415    Online : 474        19.4.2024    6:15
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0772938728333