Show Posts
Pages: 1 2 3 [4] 5 6 7
46  International / Español / Re: ampliar pulsadores en el mismo programa ?????????? on: April 22, 2012, 05:25:10 pm
Peperruno, las variables no puedes nombrarlas a todas igual. Ten en cuenta que el nombre de la variable debe ser descriptiva, es decir, si describes un boton, no puedes crear un segundo boton, por eso debes poner boton, boton2 boton3...
lo digo por
Code:
const int buttonPin = 8;
const int ledPin =  13;
const int buttonPin = 2: //ya has declarado antes esta variable!!!
const int ledPin = 12;  //y esta también, ledPin se suele usar en el pin 13 porque ahí está conectado un led SMD para primeras pruebas
int estado = 0;

Y para no liarte con las variables de estado, te aconsejo que las pongas como estadoBoton1, estadoBoton2...
Incluso (esto ya es el método de cada uno) que agrupes las variables comunes, para luego ver con más claridad:
Code:
//boton 1
const int buttonPin = 8;
int estado = 0;
const int ledPin =  13;

//boton 2
const int buttonPin2 = 2:
int estadobutton2 = 0;
const int ledPin2 = 12;
Y comenta el código, no hace falta hacerlo linea a linea, pero sí hacerlo de forma que dentro de unos días (o meses) puedas entender qué hace cada parte del código, o qué querías que hiciera.
47  International / Español / Re: Matlab+Arduino y servos...alguien puede asesorarme? on: March 28, 2012, 07:17:47 am
Mira la libreria Serial, ahí tienes como hacer la comunicación arduino<->PC.
48  International / Español / Re: ARDUINO UNO pulsadores ? on: March 27, 2012, 01:59:29 pm
Ah, vale, que quieres empezar por ahí, no que quieres usarlo sólo para eso, lo había entendido mal, perdón  smiley-zipper
49  International / Español / Re: ARDUINO UNO pulsadores ? on: March 27, 2012, 01:20:04 pm
demasiado nuevo , pero con ganas de aprender , necesito encender y apagar un equipo con un solo pulsador , es decir un pulso encendido y con otro pulso al mismo pulsador apagado , he pensado en un contador , podría  configurar el contador  para encender en par y apagar en impar ? , que otra posibilidad tengo, muchas gracias  ¡¡¡¡¡¡  

Usar un arduino para solo un pulsador es un pelín bestia, no?
no sería mejor un biestable? http://es.wikipedia.org/wiki/Biestable#Biestable_JK
50  International / Humor y Debate / Re: Pastel cumpleaños arduinero on: March 27, 2012, 11:41:59 am
cuidado, parece un clon, los pines digitales no tienen la separación de medio pin del Arduino UNO  smiley-mr-green  smiley-mr-green

Dale la enhorabuena a la (de pastel, pastelera, de bizcocho... ¿bizcochera? ) artesana  smiley-wink y que esté tan bueno como aparenta!!!
51  International / Español / Re: Alguien me dice el error de mi mi codigo?? on: March 23, 2012, 06:08:21 pm
Indenta un poco el código, ayuda a ver errores.  smiley

La llave de la línea 48 está al revés, por cierto, si lo que quieres es escoger entre tres opciones, podrías hacerlo así;
Code:
 buttonStateD = digitalRead(buttonPinD);
   if (buttonStateD == HIGH) {    
...
}
 buttonStateI = digitalRead(buttonPinI);
 else
   if (buttonStateI == HIGH) {
     ...
   }
   else{
     digitalWrite(motorPin1, LOW);
     digitalWrite(motorPin2, LOW);
     digitalWrite(motorPin3, LOW);
     digitalWrite(motorPin4, LOW);
  }    
para que detecte si hay pulsación derecha, si no, si hay pulsación izquierda si no, que ponga todo low...

Es más, te recomiendo que metas en funciones estas tres partes, sabes que por separado funcionan, y en la función de control (en este caso loop) podrías ver más fácil donde tienes los fallos, además de poder reutilizarlas en muchos más lugares, si hiciera falta. Te dejo el código retocado;
Code:
const int buttonPinI = 7;
const int buttonPinD = 6;
 
 int buttonStateI = 0;
 int buttonStateD = 0;
 int motorPin1 = 8;                              // PIN-es del Motor
 int motorPin2 = 9;
 int motorPin3 = 10;
 int motorPin4 = 11;
 int delayTime = 50;                            // Delay que determina la velocidad de giro
void setup() {

  pinMode(buttonPinI, INPUT);   
  pinMode(buttonPinD, INPUT);
  pinMode(motorPin1, OUTPUT);                    // Configuración de los PIN-es como salida digital
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}
void loop()

  buttonStateD = digitalRead(buttonPinD);
  buttonStateI = digitalRead(buttonPinI);
 
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonStateD == HIGH) {     
    moveDer();
  }
  else{
    if (buttonStateI == HIGH) {     
      moveIz();
    }
    else {
    stopMotor();
    }
  }
}

void stopMotor(){
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
}

void moveDer(){
  digitalWrite(motorPin1, LOW);                 // Los pines se activan en secuencia
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  }

void moveIz(){
  digitalWrite(motorPin1, HIGH);                 // Los pines se activan en secuencia
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime); 
}
52  International / Español / Re: Como salir de un ciclo for? on: March 06, 2012, 06:12:27 pm
De hecho, es un error de programación, haces el incremento de 2 en 2, con lo que el for no da el resultado esperado.
53  International / Español / Re: Como salir de un ciclo for? on: February 22, 2012, 07:22:38 pm
Hola,
Para salir de un for(;smiley-wink puedes usar break.

Cuando haya varios for() anidados, también se puede usar el goto, aunque se recomienda no abusar de ese recurso.

Cada vez que un programador usa un goto, $deity hace un corto en una placa  smiley-mr-green
Puedes meter ese for en el setup, si solo lo ha de realizar una vez, el loop es la rutina que va a estar siempre repitiéndose continuamente. El while que propone chocala también es una buena solución.
54  International / Español / Re: Velocidad de ejecución de instrucciones on: January 14, 2012, 07:28:00 pm
Vamos a ver...
digitalWrite(pin, value); es una FUNCIÓN. Las funciones implican un salto en la memoria del microcontrolador donde está el programa, es como si estás leyendo un libro y te dice "ver capítulo anterior", tienes que saltar unas páginas para volver atrás, se pierde algo de tiempo. De hecho, la función digitalWrite(); incluye llamadas a funciones;
Code:
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;

if (port == NOT_A_PIN) return;

// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

out = portOutputRegister(port);

uint8_t oldSREG = SREG;
cli();

if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}

SREG = oldSREG;
}
14 lineas más las que añadir las 6 llamadas a funciones que implementa y los saltos condicionales (los if). A esto súmale el doble (porque tienes que encender y apagar el led). Con esta función pierdes un montón de rendimiento.

PORTB= xxxxxxx; es una INSTRUCCIÓN. Las instrucciones, no todas son de un ciclo, en este caso sí lo es. Esta vendría a equivaler en ASM;
Code:
ldi PORTB, xxxxxxx
Pero para que haya frecuencia, se necesitan ciclos, los ciclos comprenden una subida y una bajada de señal, en este caso, encender un led, apagar un led. Por tanto necesitas 2 instrucciones para que el led parpadee y puedas tomar frecuencias, pero ten en cuenta que leerás la mitad de la frecuencia del reloj, porque usas 2 instrucciones.

prueba a tomar la frecuencia con el código como te comentaba en mi post anterior, pon en loop:
Code:
PORTB = 0b00000000;
PORTB = 0b11111111;
Como unas 50 veces y toma tiempos. Te dará muy aproximado a 8MH, porque son 2 instrucciones.
55  International / Español / Re: Velocidad de ejecución de instrucciones on: January 13, 2012, 08:45:38 pm
Con lo que dice FM, si copias varias veces las líneas de PORTB (15 o 20c&P), tendrías cerca de los 8MHz (para 2 instrucciones, o sea, los 16MHZ), te saltarías varios overheads de las subrutinas, como dice Chiva.

Es una cuestión de gestionar recursos, si te interesa código muy eficiente, deberias repetir el encender led apagar led millones de veces, para evitar saltos de memoria (que es uno de los factores que hace que no te de la frecuencia del reloj), pero necesitarías una memoria bastante grande.
Por otro lado, si sacrificas un poco de eficiencia en beneficio de ahorrar líneas de código, puedes meter problemas más complejos, a costa de perder un poco de rendimiento.
El truco consiste en jugar con estos dos factores  smiley-mr-green
56  International / Español / Re: Ethernet o WiFi Shield directo a la red. on: January 03, 2012, 11:42:38 am
Con una ethernet configuras la MAC del arduino, la IP, el gateway... o (creo, a esto ya no llego) por DHCP.
57  International / Español / Re: Proyecto de Atmósfera Controlada. Sensor DHT22 + Reles on: January 03, 2012, 08:58:41 am
El While(true) va a hacer que nunca salga de ese bucle, yo quitaría el while, las instrucciones se encuentran dentro del loop, así que harás el if siempre.
Code:
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"
#include <LiquidCrystal.h>

//// CODIGO SENSOR DE HUMEDAD Y TEMPERATURA DHT22

#define DHTPIN 7     // what pin we're connected to

#define DHTTYPE DHT22   // DHT 22  (AM2302)


// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND


DHT dht(DHTPIN, DHTTYPE);

//// CODIGO LCD


//  LCD RS pin to digital pin 12
//  LCD Enable pin to digital pin 11
//  LCD D4 pin to digital pin 5
//  LCD D5 pin to digital pin 4
//  LCD D6 pin to digital pin 3
//  LCD D7 pin to digital pin 2
//  LCD R/W pin to ground
//  10K resistor:
//  ends to +5V and ground
//  wiper to LCD VO pin (pin 3)

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// RELE
int rele1 = 8;                 // PIN al que va conectado el relé

void setup() {
  Serial.begin(9600);
  Serial.println("DHT22 test!");

  lcd.begin(16, 2);
  lcd.print("DHT22 test!");

  dht.begin();

  pinMode(rele1, OUTPUT);

}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Fallo al leer el sensor");
    lcd.print("Fallo al leer el sensor");

  }
  else {
    Serial.print("Humedad: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");
    lcd.setCursor(0, 0);
    lcd.print("Humedad: ");
    lcd.print(h);
    lcd.print(" %\t");
    lcd.setCursor(0,1);
    lcd.print("Temp:   ");
    lcd.print(t);
    lcd.print(" *C");

  }
   
   

    if (t < 24.00)
    {
          digitalWrite(rele1, HIGH);
               
    }
    else digitalWrite(rele1, LOW);

}
58  International / Español / Re: Como detengo esta parte on: December 31, 2011, 01:08:18 pm
En verdad está bien tenerlos en los analógicos, puedes meter un montón de pulsadores.
59  International / Español / Re: Como detengo esta parte on: December 30, 2011, 06:15:17 pm
Según el código lo tiene (o debería tenerlo) en el 2 digital.
60  International / Español / Re: Como detengo esta parte on: December 29, 2011, 08:58:30 pm
Creo que no acabo de entenderte, ¿quieres que haga el blink hasta que pulses el trigger para que deje de hacerlo y se quede encendido el pin 13?
En un post anterior, puse un código que permite dejar encendido/apagado un led, usando una variable de estado para la pulsación, quizás es eso lo que buscas pero con el blink. http://arduino.cc/forum/index.php/topic,84268.msg631923.html#msg631923
Pages: 1 2 3 [4] 5 6 7