Buenos dias a todos...
Despues de mucho tiempo sin contactar en el foro, he empezado de nuevo a moverme y he realizado la adaptacion del script siguiente...
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1226896251
Mi idea de momento es hacer aparecer un texto cuando muevo un rotary switch de doce posiciones, al que le he añadido resistencias a modo de divisores de voltaje, de modo que cada posición muestre un valor...
Para visualizar este valor empleo una tira de displays controlada por un tm1640...
No se que error cometo pero el resultado no es satisfactorio, comparto con vosotros el script que he adaptado,...
*/
Script para Arduino (AVR controller i/o board).
Proyecto de Panel de Radio genérico
para simulador de vuelo Xplane.
inigohe ;)
*/
///////////////////////////////////////////////////
#include <Bounce.h>
#include <Encoder.h>
Bounce buttonUp = Bounce(3, 5); // Pulsador en pin 3, 5ms debounce.
Bounce buttonDown = Bounce(4, 5); // Pulsador en pin 4, 5ms debounce.
Encoder wheel.active = Encoder(5, 6); // Encoder en pines 5 y 6.
Encoder wheel.standby = Encoder(7, 8); // Encoder en pines 7 y 8.
int val =0; // Valor analogico, donde se almacena
// la lectura.
int stage =1; // Paso en el que se encuentra el
// switch (1-12).
int ledPin = 9; // Led conectado a salida
// PWM.
int analogPin = 0; // Pin analogico conectado al
// switch.
char status[6]; // Opción dada por el switch en la
// posición elegida.
long encoder_prevActive=0; // Para detectar cambio de posición
// en el encoder display Activo.
long encoder_prevStndby=0; // Para detectar cambio de posición
// en el encoder display Standby.
long Com1FrequencyHzActive=0;
long Com1FrequencyHzStndby=0;
long Com2FrequencyHzActive=0;
long Com2FrequencyHzStndby=0;
long Nav1FrequencyHzActive=0;
long Nav1FrequencyHzStndby=0;
long Nav2FrequencyHzActive=0;
long Nav2FrequencyHzStndby=0;
long Adf1FrequencyHzActive=0;
long Adf1FrequencyHzStndby=0;
long Adf2FrequencyHzActive=0;
long Adf2FrequencyHzStndby=0;
elapsedMillis inactivityTimeout; // Midiendo tiempo de inactividad.
///////////////////////////////////////////////////
void setup()
{
pinMode(ledPin, OUTPUT); // Se declarara el pin del led como
// salida digital.
pinMode(val, INPUT); // Se declara el pin del Rotary como
// entrada analógica.
pinMode(3, INPUT_PULLUP); // Input_Pullup permite conectar
// switches y botones a tierra
pinMode(4, INPUT_PULLUP); // el chip proporciona la resistencia
// requerida para tal
pinMode(5, INPUT_PULLUP); // uso.
pinMode(6, INPUT_PULLUP); // ;)
pinMode(7, INPUT_PULLUP); // *******
pinMode(8, INPUT_PULLUP); // ;)
//Serial.begin(4800); // El puerto serie se emplea para el
// calibrado de
} // los valores del Rotary switch.
///////////////////////////////////////////////////
void loop() {
flightSim.update();
readSwitch(); // Lectura del sensor
if (stage == 1) {
readEncoderCom1()}
if (stage == 2){
readEncoderCom2()}
if (stage == 3){
readEncoderNav1()}
if (stage == 4){
readEncoderNav2()}
if (stage == 5){
readEncoderAdf1()}
if (stage == 6){
readEncoderAdf2()}
// printLine(); // Usado solo para calibrado y
// pruebas del Rotary switch y encoders.
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readSwitch();{
val =analogRead(analogPin); // Almacena el valor leido en 0
// analog, en val.
//serial.print(val); // Usado solo para calibrado
// y pruebas del Rotary switch.
if(val>=972 && val< 1024) { // Lectura entrada analógica 1023.
stage = 1;
status = "Com 1";} // Com 1.
if(val>=828 && val< 928) { // Lectura entrada analógica 878.
stage = 2;
status = "Com 2";} // Com 2.
if(val>=682 && val< 782) { // Lectura entrada analógica 732.
stage = 3;
status = "Nav 1";} // Nav 1.
if(val>=535 && val< 635) { // Lectura entrada analógica 585.
stage = 4;
status = "Nav 2";} // Nav 2.
if(val>=387 && val< 487) { // Lectura entrada analógica 437.
stage = 5;
status = "Adf 1";} // Adf 1.
if(val>=241 && val< 341) { // Lectura entrada analógica 291.
stage = 6;
status = "Adf 2";} // Adf 2.
if(val>=94 && val< 194) { // Lectura entrada analógica 144.
stage = 7;
status = "Trspdr";} // Transponder.
if(val>=0 && val< 94) { // Lectura entrada analógica 0.
stage = 8;
status = "Hdg";} // Heading.
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readEncoderCom1();
{
long encActive=wheel.Active.read(); // Leer el encoder y si ha cambiado
// escribir Com1FrequencyHz Activo y
// Standby.
long encStndby=wheel.Stndby.read();
if (encActive != encoder_prevActive) {
Com1FrequencyHzActive=Com1FrequencyHzActive+(encActive-encoder_prevActive);
encoder_prevActive=encActive;
}
if (encStndby != encoder_prevStndby9 {
Com1FrequencyHzStndby=Com1FrequencyHzStndby+(enStndby-encoder_prevStndby);
encoder_prevStndby=encStndby;
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readEncoderCom2();
{
long encActive=wheel.Active.read(); // Leer el encoder y si ha cambiado
// escribir Com2FrequencyHz Activo y
// Standby.
long encStndby=wheel.Stndby.read();
if (encActive != encoder_prevActive) {
Com2FrequencyHzActive=Com2FrequencyHzActive+(encActive-encoder_prevActive);
encoder_prevActive=encActive;
}
if (encStndby != encoder_prevStndby9 {
Com2FrequencyHzStndby=Com2FrequencyHzStndby+(enStndby-encoder_prevStndby);
encoder_prevStndby=encStndby;
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readEncoderNav1();
{
long encActive=wheel.Active.read(); // Leer el encoder y si ha cambiado
// escribir Nav1FrequencyHz Activo y
// Standby.
long encStndby=wheel.Stndby.read();
if (encActive != encoder_prevActive) {
Nav1FrequencyHzActive=Nav1FrequencyHzActive+(encActive-encoder_prevActive);
encoder_prevActive=encActive;
}
if (encStndby != encoder_prevStndby9 {
Nav1FrequencyHzStndby=Nav1FrequencyHzStndby+(enStndby-encoder_prevStndby);
encoder_prevStndby=encStndby;
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readEncoderNav2();
{
long encActive=wheel.Active.read(); // Leer el encoder y si ha cambiado
// escribir Nav2FrequencyHz Activo y
// Standby.
long encStndby=wheel.Stndby.read();
if (encActive != encoder_prevActive) {
Nav2FrequencyHzActive=Nav2FrequencyHzActive+(encActive-encoder_prevActive);
encoder_prevActive=encActive;
}
if (encStndby != encoder_prevStndby9 {
Nav2FrequencyHzStndby=Nav2FrequencyHzStndby+(enStndby-encoder_prevStndby);
encoder_prevStndby=encStndby;
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readEncoderAdf1();
{
long encActive=wheel.Active.read(); // Leer el encoder y si ha cambiado
// escribir Adf1FrequencyHz Activo y
// Standby.
long encStndby=wheel.Stndby.read();
if (encActive != encoder_prevActive) {
Adf1FrequencyHzActive=Adf1FrequencyHzActive+(encActive-encoder_prevActive);
encoder_prevActive=encActive;
}
if (encStndby != encoder_prevStndby9 {
Adf1FrequencyHzStndby=Adf1FrequencyHzStndby+(enStndby-encoder_prevStndby);
encoder_prevStndby=encStndby;
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void readEncoderAdf2();
{
long encActive=wheel.Active.read(); // Leer el encoder y si ha cambiado
// escribir Adf2FrequencyHz Activo y
// Standby.
long encStndby=wheel.Stndby.read();
if (encActive != encoder_prevActive) {
Adf2FrequencyHzActive=Adf2FrequencyHzActive+(encActive-encoder_prevActive);
encoder_prevActive=encActive;
}
if (encStndby != encoder_prevStndby9 {
Adf2FrequencyHzStndby=Adf2FrequencyHzStndby+(enStndby-encoder_prevStndby);
encoder_prevStndby=encStndby;
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
El problema es que los valores que aparecen en el puerto serie, no se corresponden con su valor que supuestamente he definido...
Gracias por los comentarios.
inigohe