Hola a todos, soy nuevo en este mundo de Arduino y busco algo de ayuda.
Hice un código el cual debería leer datos del Link2fs ( FSX), especificamente el EGT del avión, y mapearlos
a valores de salida entre 2 y 3 v ( salida PWM).
Lo he probado con la Arduino Mega y esta OK, pero al intentar usarlo en la ARDUINO DUE ( por la resolución
** de los 12 bTS , 4095 !!!), NO FUNCIONA. No tira error, pero tampoco hace nada.
Preguntas concretas,
1- La DUE funciona con LINK2FS ?**
2 Debería haber diferencias** en los códigos para MEGA y para DUE ****?**
Adjunto copia del código por si alguien se anima a echarle un vistaso
Espero comentarios
Saludos
[b][/b]
[b]/*
Codigo Generado para la Cabina de Pablo
Para usar el programa LINK2FS
Seccion Potenciometro sacada del ejemplo de Link2FS
*/
//Zona de definicion de Variables (int) y cadenas de caracteres (string)
int CodeIn; //define el codigo de caracteres anteriores al numero que viene desde link2fs
int EGT1_TEMP; //Temperatura EGT motor 1
int EGT2_TEMP; //Temperatura EGT motor 2
int EGT1_TEMPF;
int EGT1_1;
int EGT1_2;
int EGT1_3;
int EGT1_4;
float Y = 0.0; ///////////////////////////// // PARTE DEL MOVIL MEDIA
float alpha = 0.1; ////////////////////////////// // PARTE DEL MOVIL MEDIA
float S = Y; ////////////////////////////// // PARTE DEL MOVIL MEDIA
String EGT1_1_Str, EGT1_2_Str, EGT1_3_Str, EGT1_4_Str;
void setup() {
pinMode(9, OUTPUT); //Salida al pin de salida #8 EGT #1
pinMode(7, OUTPUT); //Salida al pin de salida #7 EGT #2
pinMode(30, OUTPUT); //Salida digital a PLACA AIN1
pinMode(32, OUTPUT); //Salida digital a PLACA AIN2
Serial.begin(115200); //Velocidad que usaremos en el puerto Serie
}
void loop() { // Lo puesto es esta seccion es solo para este loop y corre repetitivamente
// esto lee cual es el primer caracter desde link2FS
if (Serial.available() > 0) {
CodeIn = getChar();
if (CodeIn == '=') {
IGUAL(); // El primer identificador es "="
}
if (CodeIn == '?') {
PREGUNTA(); // El primer identificador es "?"
}
if (CodeIn == '<') {
MENOR(); // El primer identificador es "<"
}
if (CodeIn == '#') {
CARDINAL(); // El primer identificador es "#"
}
}
}
char getChar() // The serial buffer routine to get a character
{
while (Serial.available() == 0); // wait for data
return ((char)Serial.read());
}
void IGUAL() { //El primer identificador fue "="
}
void PREGUNTA() {
EGT1_1_Str = getChar();
EGT1_1 = EGT1_1_Str.toInt();
EGT1_2_Str = getChar();
EGT1_2 = EGT1_2_Str.toInt();
EGT1_3_Str = getChar();
EGT1_3 = EGT1_3_Str.toInt();
EGT1_4_Str = getChar();
EGT1_4 = EGT1_4_Str.toInt();
EGT1_TEMP = (EGT1_2 * 100) + (EGT1_3 * 10) + (EGT1_4);
Y = (float)EGT1_TEMP; //**************************************************************************** PARTE DEL MOVIL MEDIA
S = (alpha * Y) + ((1 - alpha) * S);
delay(10);
EGT1_TEMPF = map(S, 266, 650, 170, 255); //AJUSTE DE LA ESCALA DEL EGT
Serial.print("EGT1 PWM: ");
Serial.println(EGT1_TEMPF);
analogWrite(9, EGT1_TEMPF);
digitalWrite(30, HIGH);
digitalWrite(32, LOW);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
void MENOR() { //El primer caracter fue '<'
} // Fin del loop MENOR (Vuelve al VOID loop)
//----------------------------------------------------------------------------------------------------------------------------------------------------
void CARDINAL() { //El primer caracter fue '#'
} // Fin del loop CARDINAL (Vuelve al VOID loop)
//----------------------------------------------------------------------------------------------------------------------------------------------------[/b]
EGT_BASICO.ino (3.18 KB)