Go Down

Topic: ejecutar dos instrucciones a la vez en arduino (Read 3404 times) previous topic - next topic

LABU

:~ tengo una pantalla LCD 20x2 en la que se esta monitoreando la temperatura cada medio segundo ... ademas tengo un motor que se activa cuando presiono el boton que le corresponde ... este, debe de accionarse 25 segundos... el problema entra cuando el boton es accionado... pasa que se activa el motor y deja de registrar en la pantalla el tiempo que dura encendido el motor... al apagarse la pantalla vuelve a registrar cada medio segundo .. lo que necesito yo es que haga las dos cosas al mismo tiempo cuando se active el motor y que no me afecte el registro de la temperatura :S

LABU

AQUI LES DEJO EL PREGRAMA ESPERO QUE ME PUEDAN AYUDAR :(

LABU

#include <LiquidCrystal.h>

LiquidCrystal lcd(2,3,4,5,6,7);
const int relevent=9;
const int relefoco=10;

float cent()
{
  int dato;
  float c;
  dato = analogRead(A0);
 
  c = (500.0 * dato)/1023;
  return(c);
}

float fahren(float cent)
{
  float f;
  f= cent*1.8+32;
  return (f);
}

void setup ()
{
pinMode( relevent,OUTPUT );
digitalWrite(relevent,LOW);
digitalWrite(relefoco,HIGH);
pinMode(relefoco,OUTPUT);
lcd.begin(20,2);
}
void loop () {
 
  float centigrados= cent();
  float fahrenheit= fahren (centigrados);

   lcd.clear();
   lcd.home();
   lcd.setCursor(0,0);
   lcd.print("C=       F=   ");
   lcd.setCursor(2,0);
   lcd.print(centigrados);
   lcd.setCursor(11,0);
   lcd.print(fahrenheit);
   lcd.setCursor(0,1);
   lcd.print( " PROYECTO INCUBADORA");
   delay (500);
  if (centigrados <=36.50)
  { digitalWrite(relefoco,HIGH);
    digitalWrite(relevent,LOW);
  }
  else {
    if (centigrados >=37.50) {
      digitalWrite(relefoco,LOW);
      digitalWrite(relevent,HIGH);
    }
  }

 
}

Marcial

Algo asi?

Code: [Select]
#include <LiquidCrystal.h>

LiquidCrystal lcd(2,3,4,5,6,7);
const int relevent=9;
const int relefoco=10;

const byte PinBoton = 11;
const byte PinMotor = 12;

unsigned long Frecuencia = 500;  // Frecuencia de lectura
unsigned long Final = 0;         // Auxiliar para calcular timepo transcurrido
unsigned long Tmotor = 25000;    // Tiempo funcionamiento motor
unsigned long FinalMotor = 0;    // Auxiliar para calcular timepo transcurrido
unsigned long Amilis = 0;        // Auxiliar para controlar desborde millis()

bool EstadoBoton=false;
bool EstadoMotor=false;

float cent()
{
  int dato;
  float c;
  dato = analogRead(A0);
 
  c = (500.0 * dato)/1023;
  return(c);
}

float fahren(float cent)
{
  float f;
  f= cent*1.8+32;
  return (f);
}

void setup ()
{
  pinMode(PinBoton, INPUT);
  pinMode(PinMotor, OUTPUT);
  digitalWrite(PinMotor,LOW);
 
  pinMode( relevent,OUTPUT );
  digitalWrite(relevent,LOW);
  digitalWrite(relefoco,HIGH);
  pinMode(relefoco,OUTPUT);
  lcd.begin(20,2);
  lcd.clear();
  lcd.home();
  lcd.setCursor(0,1);
  lcd.print( " PROYECTO INCUBADORA");
}
void loop () {
  Amilis=millis();              // Almacenamos ultimo millis()
 
  EstadoBoton = digitalRead(PinBoton);
  if (EstadoBoton && !EstadoMotor)
  {
    EstadoMotor=true;
    digitalWrite(PinMotor,HIGH);
    FinalMotor = Tmotor + millis();    // Tiempo funcionamiento motor
    lcd.setCursor(19,0);
    lcd.print("*");
  } 
  if (EstadoMotor && millis() > Final)         // Ha transcurrido timepo de espera?
  {
    EstadoMotor=false;
    digitalWrite(PinMotor,LOW);
    lcd.setCursor(19,0);
    lcd.print(" ");
  }   
  if (millis() > Final)         // Ha transcurrido timepo de espera?
  {
    float centigrados= cent();
    float fahrenheit= fahren (centigrados);
    lcd.setCursor(0,0);
    lcd.print("C=       F=       ");
    lcd.setCursor(2,0);
    lcd.print(centigrados);
    lcd.setCursor(11,0);
    lcd.print(fahrenheit);
    if (centigrados <=36.50)
    {
      digitalWrite(relefoco,HIGH);
      digitalWrite(relevent,LOW);
    }
    else if (centigrados >=37.50)
      {
        digitalWrite(relefoco,LOW);
        digitalWrite(relevent,HIGH);
      }
    Final = Frecuencia + millis();  // NUevo timepo de espera
  }

 

  if (Amilis < millis())     // Control desborde millis()
  {
    Final = Final - Amilis + millis();
    FinalMotor = FinalMotor - Amilis + millis();
  } 
}

LABU

:smiley-eek: wooow!! muchas gracias por atenderme  :) con estas modificaciones que realizaste en el programa ya no debe afectar el tiempo que se enciende el motor con el regristro de la temperatura en la lcd? el proposito de este proyecto es fabricar una incubadora que cuenta con el motor que se activa cada 12 horas para mover los huevos , la pantalla lcd que muestra la temperatura. me gustaria poderte contactar por facebook o whats app para poder aclarar algunas dudas o bueno que son bastantitas de las modificaciones que realizaste,  como vez no tengo aun muchos conocimientos sobre como utlizar los comandos y funciones ... pero estoy muy interesado en aprender y me gusta demasciado la programacion y robotica.

Marcial

No debería afectar el movimiento del motor al esto ni el tiempo de demora entre cada lectura de temperatura al motor.
te remito watsapp por mp

mart256

Te recomiendo empezar a familiarizarte con la funcion millis(). Esta te permitirá realizar tareas en paralelo.

Saludos.

Go Up