Hola,
Soy Ricardo, Radioaficionado (EA1RJ) y charreador nato
Anteriormente he hecho bastantes circuitos con pics pero sin programar nada, ahora con arduino y entorno en C me defiendo un poco, pero muy poco.
Mi intención es hacer un secuenciador de transmisión que active y desactive varios componentes de una estación de radioaficionado cuando el PC de la orden de transmisión.
Este circuito lo tengo hecho con un LM724 con 4 operacionales pero quiero hacerlo mas versátil con arduino, os adjunto el enlace de un vídeo del secuenciador que tengo en funcionamiento para ver como funciona:
La cuestión es que he intentado programar el arduino con varios códigos, empece con estructuras if-else, después con switch, después con arrays pero no doy con ello para que una vez que empezamos la secuencia, si deja de estar activada la entrada que dispara la secuencia, vuelva para atrás en orden inverso. Os agradecería mucho cualquier ayuda.
Antes de poner el código, el funcionamiento del secuenciador es que cuando se da la orden de transmisión, el transmisor no empieza a transmitir directamente, sino que desactiva un amplificador de antena, cambia el estado de unos reles, activa el amplificador de potencia y finalmente pone el equipo en transmisión.
Gracias,
Ricardo EA1RJ
int ledPins = { 2, 3, 4, 5 }; // an array of pin numbers to which LEDs are attached
int pinCount = 4; // the number of pins (i.e. the length of the array)
int LNAPin = 2;
int RELAYPin = 3;
int PAPin = 4;
int PTTPin = 5;
int PCPin = 11;
int wait=0;
int retrasoTX=0;
int retrasoRX=0;
void setup() {
// the array elements are numbered from 0 to (pinCount - 1).
// use a for loop to initialize each pin as an output:
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
}
pinMode(LNAPin, OUTPUT);
pinMode(RELAYPin, OUTPUT);
pinMode(PAPin, OUTPUT);
pinMode(PTTPin, OUTPUT);
pinMode(PCPin, INPUT);
setstate(LOW, HIGH, HIGH, HIGH);
wait=LOW;
}
void loop()
{
retrasoTX=300;
retrasoRX=150;
if (digitalRead(PCPin) == LOW && wait == LOW)
{
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], HIGH);
delay(retrasoTX);
// ¿llamar a una función que compruebe que PCPin sigue en LOW para pasar al siguiente pin y sino volver para atras?
wait=HIGH;
}
}
if (digitalRead(PCPin) == LOW && wait == HIGH)
{
setstate(HIGH, LOW, LOW, LOW);
}
if (digitalRead(PCPin) == HIGH && wait == HIGH)
{
for (int thisPin = pinCount - 1; thisPin >= 0; thisPin–) {
digitalWrite(ledPins[thisPin], LOW);
delay(retrasoRX);
wait=LOW;
}
}
if (digitalRead(PCPin) == HIGH && wait == LOW)
{
setstate(LOW, HIGH, HIGH, HIGH);
}
}
void setstate(int LNA, int RELAY, int PA, int PTT)
{
digitalWrite(LNAPin, LNA);
digitalWrite(RELAYPin, RELAY);
digitalWrite(PAPin, PA);
digitalWrite(PTTPin, PTT);
}