Ich möchte mir eine Useless Box bauen.
Den Code würde ich gerne selber schreiben. Im Internet hatte ich Code gefunden und habe versucht ihn zu verstehen (Programmiere sonst in Python)
void loop()
{
//if the switch is on, then move door and hand to switch it off...
if(digitalRead(switch_pin) == HIGH)
{
if (Testmove == 0)
{
if(randomize == false)
{
if (selectedMove > 10)
{
selectedMove = 0; //when all moves are played, repeat the moves from beginning
}
}
else
{
selectedMove = random(11);
}
}
else
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
if (selectedMove == 0) { switchoff(); }
else if (selectedMove == 1) { switchoff(); }
else if (selectedMove == 2) { switchoffbitaraddod(); }
if (Testmove == 0 && randomize == false) {
selectedMove++; //swith to next move if not in test mode
}
}
}
// Library of moves
// basic move
void switchoff()
{
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 129; pos += 4)
{
handServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 129; pos>=0; pos-=4)
{
handServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
}
// move 3: open and wait, then move hand and wait, then switch of and hide
void switchoffbitaraddod()
{
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
delay(800);
//Moving hand
for(pos = 0; pos < 100; pos += 4)
{
handServo.write(pos);
delay(15);
}
delay(1000);
for(pos = 100; pos < 129; pos += 4)
{
handServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 129; pos>=0; pos-=5)
{
handServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
}
'pos' ist hier die Variable, die in der Schleife hoch oder runter gezählt wird. Wobei hier pos lediglich der Variablen-Name und damit frei wählbar ist. Und mit pos = wird dieser Variablen der Start-Wert zugeswiesen, ab dem gezählt wird. Ich gehe davon aus, das hier pos als abkürzung für 'position' gedacht ist.
Da ich das in Python anders schreibe hat es für Verwirrung gesorgt.
Könnte ich das zweite pos (for(pos = 80; pos < 155;pos += 3)
Wird nach jedem Durchgang der pos Wert um 3 erhöht? Habe ich das so richtig verstanden?
Würde das ändern des Wertes auch in der Schleife vor der Delay() Funktion funktionieren?
Ich habe mir das schon durchgelesen und wollte nur sichergehen ob es theoretisch möglich wäre. Auch wenn es nicht in der Dokumentation steht könnte es ja sein das es funktioniert
CaptianIglu:
Ich habe mir das schon durchgelesen und wollte nur sichergehen ob es theoretisch möglich wäre. Auch wenn es nicht in der Dokumentation steht könnte es ja sein das es funktioniert
Gelesen schon, aber auch verstanden ?
Was sagt denn die Syntax aus ?
ist die Bedingung die erfüllt werden muss
3.wenn die schleife durchläuft wird die variable geändert
Da der 1.wert die Bedingung erfüllt wird die schleife ausgeführt und in dem Fall wird der Servolenkung bewegt.
daraufhin wird der pos wert erhöht.
Das wiederholt sich bis die Bedingung false ist
wenn Du nicht genau weißt ob es funktioniert dann kannst Du das doch eben mal ausprobieren, das ist in dem Fall in 2 Minuten gemacht. Dazu erstellst Du einfach einen kleinen Sketch und lässt dir mit Serial.print () ausgeben was immer du willst.
In der Refferenz sind oft auch kleine Beispiele enthalten , die kann man auch mal eben kopieren und einfügen wenns denn sein muss.
in Deinem Sketch dienen die for Schleifen mit dem delay() ja dazu den Servo langsam von pos1 auf pos2 fahren zu lassen. Wenn Du irgendwann mal zwei Servos gleichzeitig unterschiedich schnell fahren lassen willst kommst du damit nicht weiter. Aber das ist ein ganz anderes Thema.
Dann hab ich da noch eine Anmerkung zu Deinem Eröffnungspost, wenn Du hier einen Sketch reinstellts dann bitte so das er lauffähig ist. Das mancht dann Sinn wenn wir das den laufen lassen wollen um eventuell einen Fehler zu finden.
Manche dieser Varianten habe ich noch nie verwendet, aber es schadet nicht, Alternativen zu kennen. So kann es nützlich sein, mittels break eine Schleife zu verlassen.
CaptianIglu:
Ich möchte mir eine Useless Box bauen.
Das habe ich auch schon gemacht.
Ganz nutzlos wird die Box dann nicht, wenn Du etwas lernst. So solltest Du gänzlich auf das blockierende delay() verzichten und Zeiten mit millis() stoppen. Laß an Deiner Box eine Herzschlag-Led blinken, dann ist die Box für Dich nützlich.