Arduino Due con Link2Fs funciona ??

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)

Moderador
Por favor edita tu post usando etiquetas de código.

Normas del foro

Para comenzar un DUE trabaja a 3.3V no a 5V como el MEGA asi que ten cuidado con las interfaces
.

On most Arduino boards (those with the ATmega168 or ATmega328), this function works on pins 3, 5, 6, 9, 10, and 11. On the Arduino Mega, it works on pins 2 - 13 and 44 - 46. Older Arduino boards with an ATmega8 only support analogWrite() on pins 9, 10, and 11.

The Arduino Due supports analogWrite() on pins 2 through 13, plus pins DAC0 and DAC1. Unlike the PWM pins, DAC0 and DAC1 are Digital to Analog converters, and act as true analog outputs.

De modo que hasta donde lo estas usando debería funcionar con la única restricción que solo tendras un maximo de 3.3V.

Tambien para que la salida del DAC sea en 12 bits debes usar

analogWriteResolution(12);

Acá tienes un ejemplo para probar en el DUE moficicando resoluciones y viendo en el osciloscopio como se comportan los pines

void setup(){
  // abre la conexión serie
  Serial.begin(9600); 
  // configura los pines digitales como salidas
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
  // lee la entrada A0 y la mapea al pin PWM
  // con un LED conectado
  int sensorVal = analogRead(A0);
  Serial.print("Analog Read) : ");
  Serial.print(sensorVal);

  // la resolución PWM por defecto
  analogWriteResolution(8);
  analogWrite(11, map(sensorVal, 0, 1023, 0 ,255));
  Serial.print(" ,  valor PWM de 8-bit: ");
  Serial.print(map(sensorVal, 0, 1023, 0 ,255));
  
   // cambia la resolución PWM a 12 bits
  // la resolución de 12 bit solo es soportada
  // por el Due
  analogWriteResolution(12);
  analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
  Serial.print(" , 12-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0, 4095));

  // cambia la resolución PWM a 4 bits
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 127));

  delay(5);
}

Moderador
Acabo de encontrar dos hilos similares en hardware.
Te envio privado

https://forum.arduino.cc/index.php?topic=719379.0

El otro hilo similar fue borrado.