Pages: [1]   Go Down
Author Topic: correr dos programas a la vez  (Read 1921 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola, bueno yo vengo comenzando con el software de arduino y pues voy pasando los learning todavia, pero me pareció interesante cuando llegue al programa de Blink Without Delay, que este sirve para correr un código sin interrumpir otro código que se corra a la vez, pero solo se encendía un LED  smiley-confuse, así que no vi donde se aplicaba esto  smiley-cry.

bueno decidi entonces que yo iba a combinar dos ejemplos para hacerlo mas interesante y agregue un código para mediante un pushbottom encender otro LED sin interrumpir al LED que parpadea de manera automatica, les dejo el código, espero que le sirva a los que van comenzando como yo  smiley

/* Blink without Delay
 
 Turns on and off a light emitting diode(LED) connected to a digital 
 pin, without using the delay() function.  This means that other code
 can run at the same time without being interrupted by the LED code.
 
 The circuit:
 * LED attached from pin 13 to ground.
 * Note: on most Arduinos, there is already an LED on the board
 that's attached to pin 13, so no hardware is needed for this example.
 
 
 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 
 This example code is in the public domain.
 
  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */
 
 /*
  Button
 
 Turns on and off a light emitting diode(LED) connected to digital 
 pin 13, when pressing a pushbutton attached to pin 2.
 
 
 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 
 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.
 
 
 created 2005
 by DojoDave <http://www.0j0.org>
 modified 30 Aug 2011
 by Tom Igoe
 
 This example code is in the public domain.
 
 modificado 10 de septiembre de 2012
 por Nelson Salinas
 
 http://www.arduino.cc/en/Tutorial/Button */
 
/* este codigo fue traducido y modificado para que se realizen dos operaciones a la vez
combinando los ejemplos de Blink without Delay y Button.

Se uso un arduino nano 3.0*/



// Constantes invariantes.
// establecer los numeros de los pines:
const int ledPin =  13;      // numero del pin con el LED (en la tarjeta)
const int buttonPin = 2;     // numero del pin con el pushbutton
const int ledPin3 =  6;      // numero del pin con el LED (externo)

// Variables:
int ledState = LOW;             // ledState usado para setear el LED
long previousMillis = 0;        // guardara el tiempo en que el estado
                                // del LED fue actualizado
int buttonState = 0;            // variable para lectura del estado del
                                // pushbutton

// la siguiente variable se declara long debido a que el tiempo en milisegundos,
// se convertira en un numero mas grande que el que se puede guardar en un int.
long interval = 1000;           // intervalo en que el LED parpadea(milliseconds)

void setup() {
  // establece el pin digital como salida:
  pinMode(ledPin, OUTPUT);   
  // inicia el pin del LED(interno) como salida:
  pinMode(ledPin3, OUTPUT);     
  // inicia el pin del pushbutton como entrada:
  pinMode(buttonPin, INPUT);
}


  void loop(){
   
  //control del pushbotton
  // lee el valor del estado del pushbutton:
  buttonState = digitalRead(buttonPin);

  // verifica si el pushbotton es presionado.
  // de ser asi, buttonState se establece en HIGH:
  if (buttonState == HIGH) {     
    // enciende el LED(externo):   
    digitalWrite(ledPin3, HIGH); 
  }
  else {
    // apaga el LED(externo):
    digitalWrite(ledPin3, LOW);
  }
 
  // aqui se pone el codigo que debe correr todo el tiempo de manera
  // independiente. Parpadeo del LED(interno)

  // verifica si es tiempo de que parpadee el LED; eso si, la diferencia
  // entre el tiempo actual y el ultimo tiempo en que parpadeo es mayor al
  // intervalo en que se quiere que este parpadee.
 
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // guarda la ultima vez que el LED parpadeo
    previousMillis = currentMillis;   

    // si el LED esta apagado, lo enciende y vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // establece el estado de ledState(HIGH o LOW en el LED (interno):
    digitalWrite(ledPin, ledState);
  }
}
Logged

Huesca, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 100
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hacer uso de los delay() es muy cómodo pero luego a la hora de la verdad, cuando el programa ya tiene un tamaño considerable, solo dan que problemas y hay que usar para todo la funcion millis()

Te he acortado el codigo un poco, no sé si te gustara:

Code:
// Constantes:
const int ledPin    = 13;
const int ledPin3   = 6;
const int buttonPin = 2;

// Variables:
long previousMillis = 0;
long interval       = 1000;

void setup(){
  pinMode(ledPin, OUTPUT);   
  pinMode(ledPin3, OUTPUT);     
}

void loop(){
  digitalWrite(ledPin3, digitalRead(buttonPin)); 
 
  if( millis() - previousMillis > interval )  {
    digitalWrite(ledPin, !digitalRead(ledPin) );
    previousMillis = millis();   
  }
}

Saludos!
Logged


giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.

Chile
Offline Offline
Edison Member
*
Karma: 35
Posts: 1251
Arduino rocks?
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo preferiría evitar esa resta en el comparador en cada iteración:

Code:
// Constantes:
const int ledPin    = 13;
const int ledPin3   = 6;
const int buttonPin = 2;

// Variables:
long nextMillis = 0;

void setup(){
  pinMode(ledPin, OUTPUT);   
  pinMode(ledPin3, OUTPUT);     
}

void loop(){
  digitalWrite(ledPin3, digitalRead(buttonPin)); 
 
  if( millis() > nextMillis)  {
    digitalWrite(ledPin, !digitalRead(ledPin) );
    nextMillis = millis()+1000;   
  }
}
Logged

My website: http://ried.cl

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

muchas gracias por los consejos smiley-lol
Logged

Pages: [1]   Go Up
Jump to: