Libelium is offering new technical support channels, to contact with de Technical Support team to solve any issue our doubt please contact with your sales agent or visit our contact site



Post a new topicPost a reply Page 1 of 1   [ 3 posts ]
Author Message
 Post subject: Sketch en Arduino UNO que va lento
PostPosted: Thu Oct 29, 2015 9:47 am 

Joined: Mon Nov 05, 2012 7:44 pm
Posts: 16
Hola :P :
He diseñado un sketch que esta formado por tres partes independientes, que cada una de ellas funciona bien por separado, pero cuando las agrupo en un unico sketch, funciona, pero va muy lento, ya que procesa las situaciones cambiantes en mas de 20 segundos.
Soy modelista de radiocontrol y he incorporado Arduino a mis modelos: submarinos y lanchas rápidas. En este caso es un sketch para una torpedera que hace varias funciones:
La primera parte sirve para poner en marcha el barco a traves de Bluetooth, la segunda parte es un sketch que maniobra los timones laterales (servos) en funcion de la velocidad y el angulo del timon principal (efecto Lürssen). Los otros timones laterales son esclavos de ambas funciones.
La tercera parte es un sketch que pone en marcha cosas, en funcion de la posicion de los sticks de la emisora (2,4GHz), para:
-encender las luces
-Sonido
-Secuencia de apertura de portilla (servo) y disparo de torpedos, cierre de portilla, apertura de portilla sin disparo, en el tubo de babor (bb) y en el tubo de estribor (stb).

La lectura de las señales en el receptor las hago con pulseIn, y procesa las 6 señales de los 6 canales que uso.
Las situaciones las manejo con condiciones "if".

Si alguien puede analizar el sketch y darme algun consejo para hacerlo mas rapido, lo agradeceria.
Saludos
Pedro

SKETCH

#include <Servo.h>

char blueToothVal; //value sent over via bluetooth
int power = 6; // switcher Bluetooth
int ch1 = 2; // canal timon entrada desde Rx
int ch4 = 4; // canal motor entrada desde Rx
int ch2 = 14; // canal 2 Sonido P-14 entrada desde Rx
int ch3 = 15; // canal 3 Luces entrada desde Rx
int ch5 = 16; // canal 5 tlt bb entrada desde Rx
int ch6 = 17; // canal 6 tlt stb entrada desde Rx
Servo Lurssen_bb; // 3
Servo Lurssen_stb; // 5
int bb; // Lurssen, valor para el servo
int stb; // Lurssen, valor para el servo
Servo TLT_bb; // 10, portilla bb
Servo TLT_stb; // 11, portilla stb
int pos_bb = 750; // variable para apertura lenta
int pos_stb = 750; // variable para apertura lenta
int T_bb_los=12; // 12, electrovalvula
int T_stb_los=13; // 13, electrovalvula
int luces = 7;
int P_14 = 9;

//
void setup ()
{
Serial.begin(9600);
pinMode(ch1,INPUT); // Timon entrada 2
pinMode(ch4,INPUT); // Motor entrada 4
pinMode(ch2,INPUT); // canal 2 entrada 14 P-14
pinMode(ch3,INPUT); // canal 3 entrada 15 luces
pinMode(ch5,INPUT); // canal 5 entrada 16 tlt bb
pinMode(ch6,INPUT); // canal 6 entrada 17 tlt stb
Lurssen_bb.attach(3);
Lurssen_stb.attach(5);
TLT_bb.attach(10); // Portilla bb
TLT_stb.attach(11); // Portilla stb
pinMode(12, OUTPUT); // T_bb_los
pinMode(13, OUTPUT); // T_stb_los
pinMode(7, OUTPUT); // Luces
pinMode(9, OUTPUT); // P_14
pinMode(6,OUTPUT); // switcher Bluetooth
}

void loop()
{

//
//switcher bluetooth
//

if(Serial.available()) //if there is data being recieved
{
blueToothVal=Serial.read(); //read it
}
if (blueToothVal=='1') //
{
digitalWrite(power,HIGH); //
Serial.println(" =S-113 is on."); //
}
else if (blueToothVal=='0') //
{
digitalWrite(power,LOW); //
Serial.println(" =S-113 is off."); //
}

//
// Lurssen
//

ch1 = pulseIn(2,HIGH);// lee la posicion de timon, entre 960 y 1930 microsegundos PWM
ch4 = pulseIn(4,HIGH);// lee la velocidad, entre 1630 y 1960
bb = map(ch4,1630,1960,1900,900); // en funcion de la velocidad
stb = map(ch4,1630,1960,1100,2100); // en funcion de la velocidad

//Serial.print(bb); // Lurssen
//Serial.print(" / ");
//Serial.print(stb); // Lurssen
//Serial.println();

// stop
if (((ch4 >= 1760) && (ch4 <= 1820)) && ((ch1 >= 960) && (ch1 <= 1930))) // timon en cualquier posicion
{
Lurssen_bb.writeMicroseconds(ch1); //timon bb al valor timon
Lurssen_stb.writeMicroseconds(ch1); //timon stb al valor timon
}

// marcha atras
if ((ch4 <= 1670) && ((ch1 >= 960) && (ch1 <= 1930))) // timon en cualquier posicion
{
Lurssen_bb.writeMicroseconds(ch1); //timon bb al valor timon
Lurssen_stb.writeMicroseconds(ch1); //timon stb al valor timon
}

// adelante bb, Lurssen off
if ((ch4 >= 1790) && (ch1 < 1400)) // timon bb
{
Lurssen_bb.writeMicroseconds(ch1); //timon bb al valor timon
Lurssen_stb.writeMicroseconds(ch1); //timon stb al valor timon
}

// adelante stb, Lurssen off
if ((ch4 >= 1790) && (ch1 > 1500)) // timon stb
{
Lurssen_bb.writeMicroseconds(ch1); //timon bb al valor timon
Lurssen_stb.writeMicroseconds(ch1); //timon stb al valor timon
}

// adelante recto , Lurssen on
if ((ch4 >= 1830) && (ch1 <= 1460)) // timon recto
{
Lurssen_bb.writeMicroseconds(bb); //timon bb al valor mapeado en velocidad
Lurssen_stb.writeMicroseconds(stb); //timon stb al valor mapeado en velocidad
}

//
// programa switches
//

ch2 = pulseIn(14,HIGH);
ch3 = pulseIn(15,HIGH);
ch5 = pulseIn(16,HIGH);
ch6 = pulseIn(17,HIGH);
TLT_bb.writeMicroseconds(750);
TLT_stb.writeMicroseconds(750);

// luces

if (ch3 < 1200)
{
digitalWrite(luces, HIGH);
}
if (ch3 >= 1200)
{
digitalWrite(luces, LOW);
}

// P-14

if (ch2 < 1000)
{
digitalWrite(P_14, HIGH);
}
if (ch2 >= 1000)
{
digitalWrite(P_14, LOW);
}

//apertura TLT bb y los!.

if (ch5 < 1000)
{
for(pos_bb = 750; pos_bb < 1600; pos_bb += 1)
{
TLT_bb.writeMicroseconds(pos_bb);
delay(15);
}
delay(5000);
digitalWrite(T_bb_los, HIGH);
delay(1000);
digitalWrite(T_bb_los, LOW);
}

// cierre de portilla TLT bb

if ((ch5 >= 1490) && (ch5 <= 1510))
{
for(pos_bb = 1600; pos_bb >= 750; pos_bb -= 1)
delay(15);
{
TLT_bb.writeMicroseconds(pos_bb);
}
}

// solo apertura TLT bb

if (ch5 > 1610)
{
for(pos_bb = 750; pos_bb < 1600; pos_bb += 1)
delay(15);
{
TLT_bb.writeMicroseconds(pos_bb);
}
}

// apertura TLT stb y los!.

if (ch6 < 1000)
{
for(pos_stb = 750; pos_stb < 1600; pos_stb += 1)
{
TLT_stb.writeMicroseconds(pos_stb);
delay(15);
}
delay(5000);
digitalWrite(T_stb_los, HIGH);
delay(1000);
digitalWrite(T_stb_los, LOW);
}

// cierre de portilla TLT stb

if ((ch6 >= 1490) && (ch6 <= 1510))
{
for(pos_stb = 1600; pos_stb >= 750; pos_stb -= 1)
delay(15);
{
TLT_stb.writeMicroseconds(pos_stb);
}
}

// solo apertura TLT stb

if (ch6 > 1610)
{
for(pos_stb = 750; pos_stb < 1600; pos_stb += 1)
delay(15);
{
TLT_stb.writeMicroseconds(pos_stb);
}
}

//Serial.print(ch1); // en el 2
//Serial.print(" / ");
//Serial.print(ch2); //en el 14
//Serial.print(" / ");
//Serial.print(ch3); // en el 15
//Serial.print(" / ");
//Serial.print(ch4); // en el 4
//Serial.print(" / ");
//Serial.print(ch5); // en el 16
//Serial.print(" / ");
//Serial.print(ch6); // en el 17
//Serial.print(" / ");
//Serial.println();


delay(500);
}


Top
 Profile  
 
 Post subject: Re: Sketch en Arduino UNO que va lento
PostPosted: Thu Oct 29, 2015 11:46 am 

Joined: Mon Nov 05, 2012 7:44 pm
Posts: 16
Hola. Hay un error de orden en el codigo sweep de apertura de las portillas, el delay de 15 ms debe ir detras de la orden del servo en las 6 situaciones. En el sketch que he adjuntado solo esta en la primera y en la cuarta.
De todas formas ese no es la causa de la lentitud.

TLT_bb.writeMicroseconds(pos_bb);
delay(15);

TLT_stb.writeMicroseconds(pos_stb);
delay(15);


Top
 Profile  
 
 Post subject: Re: Sketch en Arduino UNO que va lento
PostPosted: Fri Oct 30, 2015 8:36 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Pedro,

Sentimos no poder ayudarte con tu problema, pero este foro es solo para soporte técnico de nuestros productos. Esperamos que la comunidad pueda ayudarte en foros más específicos.

Un saludo


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 1 of 1   [ 3 posts ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Libelium theme based on 610nm Style by Daniel St. Jules of http://www.gamexe.net


© Libelium Comunicaciones Distribuidas S.L. | Terms of use.