TC 420 funktioniert nicht

steppy

Active Member
Hi,
es gibt aber auch z.B. den PLC Ladder Simulator. Der hat einen integrierten Codegenerator für Arduino-Code. Für simple Dinge reicht das bestimmt.

Gruß
Stefan
 

Savoie

Member
eine SPS zu programmieren ist aber schon was anderes als einen Microcontroller in C++, oder?
Das kann ich noch nicht genau beurteilen, aber bringt sicher schon mal Vorteile. (z.B. Kenntnisse über Datenformate, Zahlenformate, Variablen usw.)
Wobei VBA- Programmiercode auch zu meinen Aufgaben gehört, das ähnelt etwas evtl. mehr der Programmiersprache eines Arduino.
 

Roby

Well-Known Member
Na ja, VBA ist natürlich eine Programmiersprache, sowie auch C (C++),
allerdings ist da schon eine relativ große Distanz dazwischen.

Früher sagte man unter Programmierern, wenn du eine Prog. Sprache beherrscht, dann lernst du eine weitere in einer Woche.
Heutzutage ist die Situation eine etwas andere, da beim programmieren der Schwerpunkt nun mehr auf dem API's, den Tools, etc. als auf der Sprache selber liegt.

LG Robert
 

steppy

Active Member
Heutzutage ist die Situation eine etwas andere, da beim programmieren der Schwerpunkt nun mehr auf dem API's, den Tools, etc. als auf der Sprache selber liegt.
Hallo,
glücklicherweise hat man bei der Arduino Programmierung kein kompliziertes API, so dass der Einstieg recht simpel ist. Die Probleme sehe ich hier eher an anderer Stelle:
1. Irgendwann stößt man an Grenzen und muss sich mit den Feinheiten der Mikrocontroller Programmierung beschäftigten. Wenn man dann an bestimmten Stellschrauben dreht funktioniert das Arduino API leider nicht mehr unbedingt wie erwartet.
2. Die Arduino IDE ist Mist. Es gibt Alternativen, der Einstieg ist dort aber nicht so simpel wie bei Verwendung der Arduino IDE.

Beides habe ich grade wieder erlebt nachdem ich mich entschieden habe nach längerer Zeit mal wieder ein kleines Projekt damit umzusetzen.

Gruß
Stefan
 

Andrej

Active Member
Hi Stefan,
1. Irgendwann stößt man an Grenzen und muss sich mit den Feinheiten der Mikrocontroller Programmierung beschäftigten. Wenn man dann an bestimmten Stellschrauben dreht funktioniert das Arduino API leider nicht mehr unbedingt wie erwartet.
2. Die Arduino IDE ist Mist. Es gibt Alternativen, der Einstieg ist dort aber nicht so simpel wie bei Verwendung der Arduino IDE.

kannst Du bitte beide Punkte etwas genauer beschreiben, evtl. mit Beispielen?
 

omega

Well-Known Member
Hallo Robert,

Jeder C Programmierer wird es schaffen auch mit einem C++ Compiler/System ein "C" Programm zu schreiben.
aber darum geht es nicht. Arduino nutzt keinen C- sondern einen C++-Compiler. Viele Libraries deklarieren C++-Klassen. Auch das Arduino-eigene Runtime deklariert C++-Klassen. Beschränkt man sich selbst auf C, sind einem die alle verwehrt.

Grüße, Markus
 

aquapax

Active Member
Moin Savoie!
Wäre es eine Option für Dich etwas Zeit in das Lernen von z.B. Arduino oder ESP8266 zu investieren?
Der ESP8266 kann 10-Bit Hardware-PWM, der ESP32 16 Bit. Für beide gibt's Plugins in der Arduino IDE - deren analogWrite() kann aber, iirc, nur 8 Bit auflösen.
Für ein Bastel/Programmierprojekt fiele meine Wahl der Hardware also auf den ESP32. Von Sprachen und IDEs habe ich zu wenig Ahnung...

Gruß
Patrick
 

Roby

Well-Known Member
Hi Marcus

Stelle es nicht komplizierter dar als es ist.

Arduino "The core libraries are written in C and C++"

Am Beispiel PWM:
(geklaut von: https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/)

// Sets the output to the LED proportional to the value read from the potentiometer.
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}


Ich sehe hier nicht einen Punkt oder Komma oder sonst etwas was spezifisch C++ wäre.

Selbstredend, dass Klassenbibliotheken (C++) mächtiger sein können.

LG Robert
 

omega

Well-Known Member
Hallo Robert,

Arduino "The core libraries are written in C and C++"
bau jetzt hier nicht weiter einen neuen Nebenkriegsschauplatz aus. Das interessiert m.E. keinen. Mach dazu einen eigenen Thread auf, wenn Du über die Unterschiede von C, C++, und die Einbindung von C-Libraries in C++-Code diskutieren möchtest.

Grüße, Markus
 
Zuletzt bearbeitet:

Roby

Well-Known Member
Nebenkriegsschauplatz
Ich diskutiere hier und betreibe Meinungsaustausch, auf einem entspannten Niveau.

Du erklärst hier, dass Arduino Programmierung ohne C++ Kenntnisse nicht funktioniert.
Das sogar mit Nachdruck, was so - einfach nicht stimmt.

Das interessiert m.E. keinen
Hier will ein Nutzer eventuell Arduino programmieren, den interessiert das möglicherweise sehr wohl.
Der Sprung von C nach "echtem" C++ mit Klassen usw. ist doch ein beträchtlicher.
Wenn dich dieses spezielle Thema nicht interessiert steht es dir frei nichts dazu zu posten,
dann würde hier auch nichts ausufern.

Ich akzeptiere, dass deine Kompetenz in Sachen Arduino C Programmierung sich nicht mit der meinigen deckt, damit kann ich leben,
vielleicht schaffst du das umgekehrt ja auch.

LG Robert
 

steppy

Active Member
Hallo Markus, hallo Robert,
ein prominentes Beispiel für die Verwendung von C++ in Arduino Kontext ist die Kommunikation mit dem PC. Über das "Serial"-Objekt kann man z.B. in die Arduino Konsole schreiben:

Serial.begin(9600);
Serial.print("Hello World!");

Man sieht aber auch, dass die Nutzung von Objekten keine wirkliche Herausforderung darstellt, eher im Gegenteil. Die Schwierigkeit besteht eher darin selber selber Objektorientiert zu programmieren, da muss man schon mehr über die Syntax wissen. Aber das kann man sich tatsächlich komplett sparen. Somit habt ihr letztlich beide Recht, kompletter Verzicht auf C++ ist schwer, wirkliches Wissen über Objektorientierte C++ Programmierung braucht man aber sicherlich nicht ;)

Gruß
Stefan
 

steppy

Active Member
Hi Stefan,


kannst Du bitte beide Punkte etwas genauer beschreiben, evtl. mit Beispielen?
Hallo Andrej,

zur IDE:
der Arduino IDE fehlen viele Features, die in modernen IDEs selbstverständlich sind. Am meisten stört mich die fehlende Autovervollständigung und dass Syntaxhervorhebung manuell über eine Textdatei konfiguriert werden muss. Das aufteilen des eigenen Codes auf verschiedene Dateien wird schlecht unterstützt und führte bei einem großem Projekt immer wieder zu merkwürdigen Fehlern. Wenn ich mich recht erinnere baut die IDE alle einzelnen Dateien wirder zu einer zusammen. Bestimmter Code kann dann gar nicht mehr funktionieren.
Dann wären noch einige Bugs, die es bei mir in der Vergangenheit immer mal wieder nötig machten die IDE neu zu starten damit mein aktueller Code kompiliert wird und nicht irgendwas, das die IDE gecacht hat.

zu den Feinheiten der Mikrocontroller Programmierung und der Auswirkung aufs Arduino API:
Die Mikrocontroller bieten ja viel mehr Funktionalität als man über die Arduino API ansteuern kann. Wenn man sich davon was zu nutze machen will, dann muss man an die Register des Controllers ran. Zum Beispiel wenn man den Controller nicht in einer Schleife warten lassen möchte (z.B. per "delay(100)") sondern wenn der in einen echten Idle-Modus gehen soll.
Ein gutes Beispiel für Auswirkungen auf das Verhalten des API sind auch die PWM-Frequenzen. Üblicherweise werden die auf 250Hz oder 500Hz gesetzt. Will man andere haben, dann muss man das über die entsprechenden Register einstellen. Wenn man aber den Timer umkonfiguriert, der für den Zeitstempel der "millis()"-Funktion zuständig ist, dann passen die Zeiten nicht mehr, die man damit generiert.

Gruß
Stefan
 

Roby

Well-Known Member
Hi Stefan

Serial.begin(9600);
Serial.print("Hello World!");

Klar ist das im Beispiel Serial eine class (C++) aus dem Arduino API.
Aber was sollte daran nicht korrekte C Syntax sein?

Die zwei Zeilen unterscheiden sich um nichts bei verwenden einer (hypothetischen, geeigneten) struct (C) Serial.

Aus Sicht eines Programmierers ist im Beispiel absolut kein Unterscheid zwischen C und C++ zu sehen.
Das code Fragment ist sowohl gültiger C als auch gültiger C++ code.

Das bestätigt voll und ganz, dass wie du ausgeführt hast eine C++ Kenntnis praktisch nicht erforderlich ist.

LG Robert
 

Andrej

Active Member
Hallo Stefan,
das stimmt schon, was Du sagst, wobei es immer mehr "Profi-Funktionen" zu Arduino IDE hinzugefügt werden.
Arduino IDE ist eher für Anfänger mit "0-Ahnung" und nicht für die Profis gedacht. Für einfache LED-Steuerung benötigt man aber keine Kenntnisse auf Deinem Niveau.
Arduino & Co. ist eher Alternative für diejenige, die gerne selbst basteln, statt sich an fertige Produkte verlassen zu müssen, deren Funktionalität stark eingegrenzt ist.
 

omega

Well-Known Member
Hallo Robert,

Du erklärst hier, dass Arduino Programmierung ohne C++ Kenntnisse nicht funktioniert.
das ist doch gar nicht wahr. Wo hab' ich das denn?

Ich habe betont, daß Arduino C++ macht und folglich die Programme in C++ geschrieben sind. Das Faß, daß man mit einem C++-Compiler auch C-like Programme schreiben kann, hast Du aufgemacht, ist hier aber völlig uninteressant, weil das zum einen allseits bekannt ist, zum anderen jeder für sich selbst entscheidet, ob er rein prozedural programmiert, nur so tut, als programmiere er auch objektorientiert oder tatsächlich auch objektorientiert programmiert.

Serial.begin(9600);
Serial.print("Hello World!");
Klar ist das im Beispiel Serial eine class (C++) aus dem Arduino API.
Aber was sollte daran nicht korrekte C Syntax sein?
Du betreibst Augenwischerei, reißt ein Codefragment aus dem Zusammenhang. Genauso gut kann ich dann ja behaupten, das sei Java.
Damit die zwei Zeilen das tun, was sie sollen, muß z.B. in der Arduino IDE erstmal das Board und der gewünschte COM-Port ausgewählt werden, noch etwas Code drumherum geschrieben und der Compiler und Linker angeworfen werden. Und der Compiler ist nun mal ein C++- und kein C-Compiler.

Schau doch mal in die HardwareSerial.h und HardwareSerial.cpp, die man explizit verwenden muß, wenn man nicht die Arduino IDE (die macht das implizit) sondern z.B. Eclipse nutzt. Das ist kein C.

Grüße, Markus
 

Ähnliche Themen

Oben