Wie kann ich das Programm erweitern?
Hallo, ich und meine Freundin bauen einen Schießstand im Rahmen eines Schulprojekts.Wir benutzen einen Arduino Uno und das Programm dazu.Außerdem lichtempfindliche Wiederstände und Servomotoren.
Wir haben es momentan geschafft die Servomotoren zufällig im 1 sek Takt hochgehen zu lassen.
Wir wollen praktisch erreichen, dass die Zielscheiben grundsätzlich 10 sek oben bleiben( das haben wir schon) , sollten sie aber bis dahin abgetroffen werden,Soll sie runter gehen und direkt danach soll eine andere hochgehen. Und während eine Zielscheibe oben ist darf keine andere hochgehen. Also es soll halt immer nur eine oben sein. Wir hatten überlegt das mit if und while zumachen,aber wissen nicht recht wie wir das machen sollen.
Ich bin jetzt schon für jede Antwort dankbar.Vielleicht habt ihr ja auch andere Ideen. Unten hab ich noch under bisheriges Programm.
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
int x;
int servo;
void setup () {
randomSeed ( analogRead (A1));
servo1.attach(6);
servo2.attach(7);
servo3.attach(8);
}
void loop() {
x= random ( 1, 4) ;
switch (x) {
case 1:
servo1.write (95);
delay (1000);
break;
case 2:
servo2.write (95);
delay (1000);
break;
case 3:
servo3.write(95);
delay (1000);
break;
}
servo1.write(0);
while( servo1=95) {
delay;
}
servo2.write(0);
while( servo2=95) {
delay;
}
servo3.write(0);
while( servo3=95) {
delay;
}
}
Könntest du den Quellcode des Programms als Text ergänzen?
Hallo ich hoffe ich hab die Frage richtig verstanden .
Ich habe nun die Frage ergänzt.
1 Antwort
Legt euch eine Variable an, die die verbleibende Zeit (in Sekunden) speichert. Immer wenn das Programm eine Sekunde wartet, muss auch die Variable um 1 verringert werden. Des Weiteren wäre es günstig, sich die aktuelle Zielscheibe sowie die Menge aller verfügbaren Zielscheiben global zu speichern.
Anschließend braucht es nur zwei Abfragen:
- Ist die Zeit abgelaufen? Wenn ja, wird eine neue Zielscheibe gesucht und angezeigt. Um zu verhindern, dass zweimal nacheinander dieselbe Zielschreibe ausgewählt wird, könnte man das Fisher-Yates-Verfahren nutzen. Des Weiteren muss die Zeitvariable zurückgesetzt werden
- Wurde die Zielscheibe getroffen? Wenn ja, wird die Zeitvariable auf 0 gesetzt (Zeitablauf).
In dem Fall, dass weder die erste, noch die zweite Bedingung erfüllt wurden, wird eine Sekunde lang gewartet, bis das Programm weiterläuft.
Erstellt euch dazu ein Struktogramm oder einen Programmablaufplan. Aktionen wie die Auswahl einer neuen Zielscheibe oder die Prüfung, ob die aktuelle Zielscheibe getroffen wurde, werden in eigenen Struktogrammen/Programmablaufplänen skizziert.