Hallo,
ich habe folgendes Problem,
ich steuere eine LED, eine Kamera und eine Einspritzdüse über ein
Arduino Mega.
Alle drei sollen auf Knopfdruck ausgelöst werden.
Dafür möchte ich einen Taster benutzen.
Das Programm habe ich wie folgt aufgebaut:
int LED_vor_Kamera = 0;
int Kamera_vor_Injektor = 0;
int Injektor_zeit = 0;
int state = 0;
void setup() {
pinMode(34, INPUT); //Taster
pinMode(32, OUTPUT); //LED
pinMode(28, OUTPUT); //Kamera
pinMode(24, OUTPUT); //Injektor
LED_vor_Kamera = 2000; //Nur Beispiele für die Dauer
Kamera_vor_Injektor = 1000;
Injektor_zeit = 500;
}
void loop() {
digitalWrite(32, LOW);
digitalWrite(28, LOW);
digitalWrite(24, LOW);
if(digitalRead(34)=HIGH);
{
state = 1;
digitalWrite(32, HIGH);
delay(LED_vor_Kamera);
digitalWrite(28, LOW);
digitalWrite(24, LOW);
digitalWrite(28, HIGH);
delay(Kamera_vor_Injektor);
digitalWrite(24, HIGH);
delay(Injektor_zeit);
digitalWrite(24, LOW);
delay(1000);
digitalWrite(28, LOW);
delay(1000);
digitalWrite(32, LOW);
if(digitalRead(34)==HIGH);
state == 1;
else{
state = 0;
}
}
}
Mein Problem dabei ist zum einen, dass ich das Tastenprellen umgehen
möchte.
Desweiteren sollen die drei Bauteile nur für ms angesteuert werden. Da
es sein kann, dass das Programm durchgelaufen ist, bevor der Knopf
wieder losgelassen wurde, möchte ich sicherstellen, dass das Programm in
einer Schleife verweilt, bis der Knopf wieder dauerhaft losgelassen
wurde und soll dann wieder zum Anfang zurückkehren.
Leider fehlen mir jegliche Kenntnisse, wie ich das machen soll, bzw. wie
ich die Bedingung nennen soll.
Kann mir hier jemand helfen? Ich danke schon mal im voraus.
Gruß
while(digitalRead(TASTER)==LOW);// warte auf Loslassen
44
delay(50);// Entprellzeit abwarten
45
}
46
}
>Mein Problem dabei ist zum einen, dass ich das Tastenprellen umgehen>möchte.
Das ist kein Problem.
>Desweiteren sollen die drei Bauteile nur für ms angesteuert werden. Da>es sein kann, dass das Programm durchgelaufen ist, bevor der Knopf>wieder losgelassen wurde, möchte ich sicherstellen, dass das Programm in>einer Schleife verweilt, bis der Knopf wieder dauerhaft losgelassen>wurde und soll dann wieder zum Anfang zurückkehren.
Auch das ist kein Thema.
Du hast einige grundlegende Fehler drin.
if(digitalRead(34)=HIGH);
Das ist FALSCH!!! Damit kann keinerlei Anweisung mehr nach dem if()
ausgewertet werden. Eine schöne Stolperfalle in C!
delay(Kamera_vor_Injektor);
Das geht auch nicht, die Funktion geht nur mit konstanten Werten.
Du MUSST eine gescheite Formatierung des Quelltextes machen, sonst siehr
keiner durch, auch du nicht. Das betrifft ier vor allem die Einrückung.
Wow, ok danke. Wirklich super eure Hilfe. Leider kann ich das Programm
erst am Mittwoch testen, aber danach werde ich sofort berichten. Ja
leider sind meine Programmierkenntnisse nicht so super. Vielleicht kennt
ja jemand eine gute Internetseite oder Literatur für Einsteiger. Wenn
der Taster dann LOW ist, kehrt das Programm dann von alleine zum Anfang
zurück, damit ich den Taster immer wieder drücken kann ohne das Programm
neu zu laden?
Hallo,
ich habe nun das Programm getestet.
Leider macht es das ganze genau falsch herum. Sobald ich das Programm
auf das Arduino lade, fange die leds in zu blinken. Das sollten sie aber
eigentlich erst bei Knopfdruck. Sobald ich den Knopf gedrückt halte,
bleiben die LEDs aus. Sobald ich dann den Knopf wieder loslasse, fange
sie wieder an zu blinken. Und sie fangen nach einem Durchgang wieder von
alleine von vorne an. Und das sollte ja erst wieder passieren, sobald
ich den Knopf drücke.
Was läuft da falsch.
Die Schaltung habe ich mal mit angehangen. Bitte um Hilfe.
@ Knarf Lehceur (si7)
>Was läuft da falsch.
Hast du die kleine Korrektur eingefügt?
>Die Schaltung habe ich mal mit angehangen. Bitte um Hilfe.
Deine Schaltung stimmt nicht mit der Software überein, dort ist nämlich
der Taster auf Pin 34. Der Anschluß für KAMERA stimmt auch nicht.
Ja die Korrektur habe ich eingefügt.
Und die PIN Belegung stimmt doch. Kamera ist im pin 28 und der Taster in
34. So steht es ja im Programm und so habe ich diese auch gesteckt.
vielleicht liegt es auch am Taster.
Ich habe diesen. Kann man da was vertauschen? Habe ihn auch schon
andersherum gesteckt