Arduino als Sequenzer

irgendwie bin ich zu doof das richtig zu machen ... :slight_smile: :slight_smile:

Der Arduino Uno soll den zeitgesteuerten Ablauf einer Sendeempfangsanlage machen, das heißt pin 2 high = Empfang und wenn low Sendung

Ich möchte, wenn ich PIN 2 auf 0 lege ? (also txgnd auf 0) sofort ohne Verzögerung den Pin relaisvv low setzen und alle andern Pin in xx Millis schalten ( damit die Sender nicht, ohne das die Relais geschlossen haben, eingeschaltet werden.
Hab den Pin wirklich auf 0 Volt gelegt - nicht irgendwo im Zwischenbereich - die Spannung am pin 6 geht nicht sofort auf 0
Alles andere funktioniert - nur Pin 2 low und unmittelbar dann den Pin 6 low geht nicht
*code

/*
Sequencer Ant Relais pin5,VV Relais pin6, Sender pin3, Poweramp pin4
Pin8 auf Masse - Alarmeingang
*/
//variable fĂŒr sequencer
int txgnd = 2; // on pin Digital 2 PTT
int relay1 = 3; // on pin Power PA 25 Watt
int relay2 = 4; // on pin ext PA
int relay3 = 5; // on pin Digital 5
int relaisvv = 6; //on pin Digital 6
int alarmled = 7; // alarmled an pin 7
int alarminput = 8; // SWR mies
int txgndstate = 0;
int alarminputstate = 1;

void setup() {
//setup sequencer

pinMode(relay1, OUTPUT); //coaxrelay
pinMode(relay2, OUTPUT); //Power PA
pinMode(relay3, OUTPUT); //RF input relay
pinMode(relaisvv, OUTPUT); //VV
pinMode(txgnd, INPUT_PULLUP);
pinMode (alarminput, INPUT_PULLUP); // initializiere alarminput als input
pinMode(alarmled, OUTPUT); //alarmled an wenn SWR zu hoch

digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
digitalWrite(relaisvv, HIGH);
digitalWrite(alarmled, HIGH);

}

void loop() {

txgndstate = digitalRead (txgnd);

if (txgndstate == LOW) { // go to TX

digitalWrite(relaisvv, LOW); // also Digital Mosfet gesperrt
delay(20); // 20 ms
digitalWrite(relay1, HIGH); //coaxrelay ON
delay(1000); // 20 ms 1 SEk. um es optisch zu sehen
digitalWrite(relay3, HIGH); //ext. PA -ON
delay(1000); // 20 ms 1 SEk. um es optisch zu sehen
digitalWrite(relay2, HIGH); // Amplif. ON
}

if (txgndstate == HIGH) { // go to RX

digitalWrite(relay2, LOW); // ext.PA off
delay(1000); // 20 ms 1 SEk. um es optisch zu sehen
digitalWrite(relay3, LOW); //int. PA OFF
// delay(20); // 20 ms 1 SEk. um es optisch zu sehen
digitalWrite(relay1, LOW); //coaxrelay OFF
delay(1000); // 20 ms coaxrelay Schaltzeit
digitalWrite(relaisvv, HIGH);
}

/*
alarminputstate = digitalRead (alarminput);

if (alarminputstate == HIGH) {
digitalWrite(relay3, HIGH); //RF-PA OFF
digitalWrite(relay2, HIGH); //Power PA OFF
digitalWrite(relay1, HIGH); //Coaxrelay OFF
digitalWrite(alarmled, LOW); //Alarmled ON
digitalWrite(relaisvv, LOW);
delay(5);
}
*/

}
*/code

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen GerÀten lesbar. Das kannst Du auch noch nachtrÀglich Àndern.

Gruß Tommy

Wenn du jetzt noch erklÀrst was du eigentlich machst / willst kann dir eventuell jemand helfen.
Irgendwie fÀngt dein Posting mitten in der Luft an ......

Ulli

Also ich weiss auch gerne vorher, was denn der Sketch machen soll, und vor allem, welches Problem in der Praxis gelöst werden soll.

Also nicht, Pin 2 soll nach 5 Sekunden, nachdem irgendwas, sondern "ich will mein Hauswasserwerk mit Vorratstank steuern".

Und ich hÀtte gerne gewusst, um welchen Arduino es sich dreht.
Denn eigentlich sollte man Pin 0 und 1 doch eher in Ruhe lassen und sich nicht mit externen Beschaltungen Stöckchen zwischen die Beine werfen. Denn meist hÀngt da ein USB<->UART Wandler dran.

Pittii:
irgendwie bin ich zu doof das richtig zu machen ... :slight_smile: :slight_smile:

Warum geht der nicht sofort auf Sendung / bzw macht den VorverstÀrker aus- wenn ich pin 2 auf 0 lege ?

Weil du deine vielen delays(1000) dazwischen hast.
Nimm die raus und besser ist es.

combie:
Denn eigentlich sollte man Pin 0 und 1 doch eher in Ruhe lassen

combie, Das sind doch nur Variable. :wink:

Hi

Warum kommentiere ich auf Englisch, frage aber im deutschen Forenteil nach?
Ok - ich habe den Vorteil, daß Englisch fĂŒr mich eine Fremdsprache bleibt - geht halbwegs und zur Not gibt's in den Tiefen des WWW eine Übersetzung, aber warum zum Henker sollte ich englische Kommentare setzen?
... wenn Die dann wenigstens noch halbwegs stimmen wĂŒrden ...
... oder nicht das ganz Offensichtliche wiedergeben - pinled=6; // LED auf Pin 6 ... wow ... statt 'Pin, an Dem die 'Auf Sendung'-LED angeschlossen ist

HĂ€tte Das selber wohl mit einer ZĂ€hl-Variable und nicht blockierend gemacht, je nach ZĂ€hlrichtung wird der betreffende Pin eben aktiviert oder deaktiviert.
Der Ablauf sollte aber auch so schon gegeben sein - hat mit viiieeel Wartezeit dazwischen.

MfG

HotSystems:
Weil du deine vielen delays(1000) dazwischen hast.
Nimm die raus und besser ist es.

Ja danke , ist ein Denkfehler drin - klar wenn der am Anfang der Schleife steht dauerts halt die 100 mS bis Reaktion möglich ist - bei 1000 halt noch lÀnger