Hallo,
etwas unübersichtlich ist es noch ich denke es sind mehere unabhängige Blinker mit verschiedene Blinkzeiten.
drei Anmerkungen noch dazu
Du verwendest z.B
int p1 = LOW;
int ist eigendlich ein integer Zahlenwert, was du hier haben willst ist eine Stausvariable die den Wert HIGH oder LOW annehmen kann, da wäre eine bool Variable besser geeignet. (false /true)
es gibt unnötige Klammern jeweils vor und irgendwo am ende des jeweiligen Blocks
{ unsigned long cm1 = millis();
vermutlich bist Du damit etwas durcheinander geraten.
die Variablen cm1 bis cm4 kannst Du dir eigendlich sparen und Anstelle dessen direkt millis() verwenden.
Da du jetzt mehrfach den fast identischen Code verwendet hast könnte eine der nächsten Übungen darin bestehen daraus eine Blink-Funktion zu machen die Du mehrfach aufrufen kannst. Nächster Schritt könnte dann die Verwendung eine Struktur oder eine Klasse sein.
Ganz bescheiden hier ein Link auf mein Geschreibsel.
Tommy56:
Was soll uns dieser Beitrag sagen?
Wenn Du den Code ordentlich einrückst (+T in der IDE hilft Dir dabei) ist er auch für Dich besser lesbar.
Gruß Tommy
Das war mein erster Beitrag hier und ich wollte einfach mal meinen Zwischenstand veröffentlichen um Hinweise, wie die von oben zu bekommen.
Mit Hilfe meiner kleinen Platinen, LEDs und Schalter werden dann verschiedene Versuche erfolgen. natürlich bin ich mir bewusst, dass die Summe immer mehr ist als wenn dann später noch mal konzentriert entwickelt wird.
Dann noch als Tipp:
Nimm sprechende Variablen!!
m1 ... m4 ... joha ... irgend Was mit 'M' und davon wohl 4 Stück ...
Kommentare ... in einem Jahr weiß Niemand mehr, was Du Dir Da gedacht hast - schreibe, was die Zeile machen SOLL, NICHT, was Sie macht!
Datentypen - wurden schon angesprochen - nur so groß, wie nötig - jedes nicht gelesene Byte spart Dir Zeit.
Mache const, was konstant ist - z.B. Pin-Nummern - Die werden Sich während der Ausführung nicht ändern - feste Zeiten - bei mir z.B. ein Herzschlag - also wiederkehrende Funktionen (LED aufblinken lassen, ein 'Hallo' per seriellem Monitor - daß man sieht, der Arduino lebt noch) bekommen bei mir die 'Wartezeit' als konstanten Wert (... 8000ms macht sich ganz gut ...)
Wer ist i2, was bedeutet das 'p' bei pm1 ... wird wohl auch 4 Stück davon geben ... V2 (in Groß??) und die 'magic number' 30 ... Was macht Die?
Leerzeilen in Maßen!!
Mehr als Eine 'am Stück' braucht kein Mensch.
STRG+T in der IDE rückt den Code auf Klammer-Ebene ein - man findet Klammer-Fehler wesentlich einfacher!
Auch sollte man sich eine einheitliche Klammersetzung angewöhnen, wobei hier die Meinungen auseinander gehen.
if (x==1){
//tue irgend etwas
}else{
//tue Etwas, wenn Das nicht zutrifft
}
Bei mir steht die eröffnende Klammer in der Zeile, Die den Block 'erzeugt'.
Auch stehen beide Klammern in der gleichen Zeile, wie das ELSE (oder else if) - wenn man den Kram auf 3 Zeilen ausüfern lässt, braucht man auch keine Leerzeilen mehr einsparen ... meiner Meinung nach - muß dann aber mit meiner Unlust leben, daß ich mir den Kram nur widerwillig ansehe und ... mit Schelte von mir rechnen.
//test milles neu
// LED 4 Ausgänge
//Poti zum Takt einstellen
//Umschalter auf Eingang 2+3, 3 oder 4
//Taster+Umschalter
int tasterPin2 = 2;
//int tasterPin3 = 3;
//int tasterPin4 = 4;
//int tasterPin5 = 5;
// Poti
int myPin = A2;
int readVal;
float V2;
//millis1
unsigned long prevmilles1 = 0;
bool pause1 = LOW;
const long impuls1 = 1;
//millis2
unsigned long prevmilles2 = 0;
bool pause2 = LOW;
const long impuls2 = 2;
//millis3
unsigned long prevmilles3 = 0;
bool pause3 = LOW;
const long impuls3 = 3;
//millis4
unsigned long prevmilles4 = 0;
bool pause4 = LOW;
const long impuls4 = 4;
//millispuls
unsigned long pmsp = 0;
bool psp = LOW;
const long isp = 500;
// 4 LED Ausgänge
const int ledPin13 = 13;
int ledState13 = LOW;
const int ledPin12 = 12;
int ledStat12 = LOW;
const int ledPin11 = 11;
int ledStat11 = LOW;
const int ledPin10 = 10;
int ledStat10 = LOW;
//const int ledPin9 = 9;
//int ledStat9 = LOW;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//Taster+Umschalter
pinMode(tasterPin2, INPUT);
// pinMode(tasterPin3, INPUT);
// pinMode(tasterPin4, INPUT);
// pinMode(tasterPin5, INPUT);
// 4 LED Ausgänge
pinMode(ledPin13, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin10, OUTPUT);
// pinMode(ledPin9, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//Poti auslesen
readVal = analogRead(myPin);
V2 = (1) * readVal;
//anfang m1
if (digitalRead (tasterPin2) == HIGH) {
if (millis() - prevmilles1 >= (impuls1 * V2 + 30)) {
prevmilles1 = millis();
if (pause1) {
pause1 = false;
}
else {
pause1 = true;
}
}
}
digitalWrite(ledPin13, pause1);
//ende m1
//anfang m2
if (millis() - prevmilles2 >= (impuls2 * V2 + 30)) {
prevmilles2 = millis();
if (pause2) {
pause2 = false;
}
else {
pause2 = true;
}
}
digitalWrite(ledPin12, pause2);
//ende m2
//anfang m3
if (millis() - prevmilles3 >= (impuls3 * V2 + 30)) {
prevmilles3 = millis();
if (pause3) {
pause3 = false;
}
else {
pause3 = true;
}
}
digitalWrite(ledPin11, pause3);
//ende m3
//anfang m4
if (millis() - prevmilles4 >= (impuls4 * V2 + 30)) {
prevmilles4 = millis();
if (pause4) {
pause4 = false;
}
else {
pause4 = true;
}
}
digitalWrite(ledPin10, pause4);
//ende m4
}
Muss noch nachschauen, warum der Ausgang 13 immer den Zustand behält, je nachdem, wann der Taster losgelassen wurde?
Muss noch Widerstände einlöten, damit ich andere Eingänge benutzen kann...
(hab nicht immer Zeit dafür)
Ich setzt jetzt mal diese Quelle als Beispiel rein, weil, wie soll ich was lernen, wenn ich ständig auf Sachen korrigiert werde, die ich selbst von anderen Quellen so übernommen habe?
wie soll ich was lernen, wenn ich ständig auf Sachen korrigiert werde, die ich selbst von anderen Quellen so übernommen habe?
du lernst deine Quellen besser auszuwählen.
Nobody is perfect, und selbst der nicht zu 100%
so wirst du besser als alle deine Vorkauer
du lernst die Prinzipien aus solchen Tutorials heraus zu destilieren und in deinen eigenen Stil zu integrieren
Ordnung ist gut!
Übersicht auch.
Jeder Schritt in diese Richtung ist ein guter Schritt.
Aber meist nicht der Letzte.
Also nicht geknickt fühlen, sondern weiter gehen.
//millis1
unsigned long prevmilles1 = 0;
bool pause1 = LOW;
const long impuls1 = 1;
//millis2
unsigned long prevmilles2 = 0;
bool pause2 = LOW;
const long impuls2 = 2;
//millis3
unsigned long prevmilles3 = 0;
bool pause3 = LOW;
const long impuls3 = 3;
//millis4
unsigned long prevmilles4 = 0;
bool pause4 = LOW;
const long impuls4 = 4;
//millispuls
unsigned long pmsp = 0;
bool psp = LOW;
const long isp = 500;
// 4 LED Ausgänge
const int ledPin13 = 13;
int ledState13 = LOW;
const int ledPin12 = 12;
int ledStat12 = LOW;
const int ledPin11 = 11;
int ledStat11 = LOW;
const int ledPin10 = 10;
int ledStat10 = LOW;
//const int ledPin9 = 9;
//int ledStat9 = LOW;
Das nenne ich "Wiederholungsgruppen".
Meist macht es Sinn diese in Strukturen/Klassen zu stopfen und dann in Arrays zusammenzufassen.
Damit erledigt sich auch das Fehlerträchtige Copy&Paste von Programmstrecken und das unsägliche durchnummerieren von Variablen, Konstanten und Pins automatisch gleich mit.
Tommy56:
Merke: Nicht alles, was in irgendwelchen Beispielen steht, muss der Weisheit letzter Schluss sein.
Aber wenn der Herr sich beleidigt fühlt, weil er Tipps zur Verbesserung erhält, können wir uns ja weitere Antworten sparen.
Gruß Tommy
Nein, ganz im Gegenteil, falls du das falsch verstanden hast. Ich bin wirtlich dankbar für jede Hilfe, die ich hier bekomme. Eher bin ich etwas unschlüssig wegen der anderen Quellen. Also macht weiter so!
So, letzter Versuch, Taster schalten jetzt LEDs mit Takt, alles ohne delay und mit einstellbarem Takt.
Thema Array dann beim nächsten Versuch mit Lichterkette und einem neuen Thema, wenn ich so weit bin, was noch etwas dauern wird...