Show Posts
Pages: 1 [2] 3 4
16  International / Español / Re: cualquier respuesta puede ser de ayuda on: May 15, 2011, 11:19:44 am
Te animo a que intentes hacer el código tu misma, en el enlace que te he puesto de tutoriales hay bastantes ejemplos sencillos y te explican muy bien el código. Te será de gran ayuda para empezar a programar.

Si los datos los quieres guardar de forma permanente tendrás que hacer uso de la EEPROM, ya que esta memoria es no volátil. Para saber como leer y escribir en la EEPROM échale un vistazo a los siguientes enlaces:

Escribir EEPROM: http://arduino.cc/es/Tutorial/EEPROMWrite
Leer EEPROM: http://arduino.cc/es/Tutorial/EEPROMRead

Saludos chato_sat

17  International / Español / Re: cualquier respuesta puede ser de ayuda on: May 15, 2011, 08:21:00 am
Para controlar servos échale un vistazo al siguiente tutorial http://arduino.cc/es/Tutorial/Knob

Se me ocurre que para configurar los botones hagas una función que los configure. En esta función muevas el potenciómetro a la posición que deseas y cuando aprietes uno de los botones se guarde en la variable del botón, esto lo haces 2 veces (ya que tienes 2 botones). La llamada a esta función deberías de definir como la quieres, podrías utilizar otro botón, llamarla cada x veces que ejecutes los otros botones, llamarla si tienes un botón pulsado x tiempo ... Esto lo debes definir según te convenga.

Una vez configurados los botones lo que tienes que hacer es cuando los pulses escribir la variable que tiene ese botón asignada al servo.

Los tutoriales básicos de arduino en español los tienes en el siguiente enlace: http://arduino.cc/es/Tutorial/HomePage

Saludos chato_sat.
18  International / Español / Re: Codificar RGB en solo dos bytes on: May 12, 2011, 03:48:31 pm
Como he comentado en mi post anterior, podrias probar a pasar los valores que lees a 255 haciendo una regla de tres. Pero entonces los valores que obtengas daran saltos de 8 en 8.

Saludos chato_sat.
19  International / Español / Re: Codificar RGB en solo dos bytes on: May 12, 2011, 09:49:01 am
Si cada color sólo tiene su color no tiene por qué mezclarse
RGB tiene una gama de 16,7 millones, cada uno de los colores básicos puede ir desde el 0 hasta el 255 por lo que es necesario un byte para cada color. Con lo cual si queremos guardarlo en 16 bit, se debe de limitar el rango de los colores básicos para que así no se mezclen. Por eso yo he hecho la máscara, para limitarlos.

Aún así creo que lo ideal no sería hacer una máscara, sino poner un numero proporcional a cada uno de los colores básicos, limitando el rango de 0 a 31. No se cómo se verá ya que limitamos mucho el rango total de colores de 16,7 millones a 29791.
 
Si estoy equivocado agradecería que me corrigieran.

Saludos chato_sat
20  International / Español / Re: Codificar RGB en solo dos bytes on: May 12, 2011, 07:38:12 am
Prueba lo siguiente a ver que tal

int Rcolor;
int Gcolor;
int Bcolor;

int iColorFull ;

  // Calculamos el color a emplear.
  Rcolor = (Rcolor & 0x1f) << 11;
  Gcolor = (Gcolor & 0x3f) <<5;
  iColorFull = Rcolor|Gcolor|(Bcolor & 0x1f);

No se si serán paranoyas mías pero con la función R4R3R2R1R0G5G4G3G2G1G0B4B3B2B1B0 yo he entendido que hay que coger 5 bits del rojo, 6 bits del verde y 5 bits del azul y si no les haces la máscara entonces se van a mezclar.
21  International / Español / Re: decrementar contador on: May 12, 2011, 05:59:24 am
He hecho unas cuantas modificaciones a tu programa y por lo menos he conseguido que los contadores se actualicen correctamente (No se si es lo que pides, ya que he hecho varias modificaciones). Aquí está el programa:
Code:
int inpin = 7;
int motor1 = 5;
int motor2 = 6;
int encoder = 0;
int contador = 0;
int direccion = 1; //1 - izquierda ; 2 - derecha
int led = 13;


void setup(){
  pinMode(led, OUTPUT);
  pinMode(inpin, INPUT);
  pinMode(motor1, OUTPUT);
  pinMode(motor2, OUTPUT);
  Serial.begin(9600);
}

// devuelve true si se ha alcanzado el limite
boolean alcanzaLimite ()
{
  boolean salida = false;
  //Si nos movemos a la izquierda y llegamos a 100
  if (contador == 100 && direccion == 1){
    salida = true;
  }
  //Si nos movemos a la derecha y llegamos a 0
  if (contador == 0 && direccion == 2){
    salida = true;
  }
  return salida;
}

void cambiarDireccion()
{
  if (direccion == 1) {
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, HIGH);
    digitalWrite(led, LOW);
    direccion = 2;
  } else {
    digitalWrite(motor1, HIGH);
    digitalWrite(motor2, LOW);
    digitalWrite(led, HIGH);
    direccion = 1;
  }
}

void actualizaContador()
{
  if (direccion == 1) {
    contador++;
  } else {
    contador--;
  }
}
  
void loop(){

  encoder = digitalRead(inpin);
  
  if (encoder == HIGH) {
    actualizaContador();
  }
  
  if (alcanzaLimite()) {
    cambiarDireccion();
  }
  
  Serial.print("Contador: ");
  Serial.println(contador);
  Serial.print("Direccion: ");
  Serial.println(direccion);
}

Si tienes alguna duda acerca del código no dudes en preguntarla.

Saludos chato_sat.
22  International / Español / Re: decrementar contador on: May 11, 2011, 04:36:43 pm
Quote
 if (contador1 > 100){
      direccion = false;
      contador1--;            
    }

Creo que el problema está en que este if lo que hace es que si contador1 es mayor que 100 lo decrementa, entonces lo que pasa es que cuando vale 99 no entra en el if. Como supuestamente en este if la variable debe de ir de 100 hasta 0 lo que debes de hacer es cambiar el 100 por el 0 así entrará en el if.

    if (contador1 > 0){
      direccion = false;
      contador1--;            
    }

Prueba a ver que tal y ya nos contarás si funciona.

Saludos chato_sat.

23  International / Español / Re: Capacidad (bits) necesaria para almacenar mediciones. on: April 08, 2011, 10:57:00 am
¿tendría que hacer un programa que las lea y me las muestre en caracteres ASCII?

Efectivamente. Lo mejor es que te hagas una librería para tratar las palabras y así guardarlas y leerlas a tu antojo.


1 byte temperatura
2 byte Dia de la semana del 0-7
3 byte dia
4 byte mes del 0-12
5 byte hora
6 byte minuto
7 byte segundo


Es más aconsejable trabajar a nivel de bits, ya que de esta manera se desperdicia muchísima memoria y no es que se tenga mucha eeprom. Por ejemplo ¿para que utilizar un byte para almacenar el día de la semana si con sólo 3 bits es posible obtener el mismo resultado?

Saludos chato_sat.
24  International / Español / Re: Ayuda max232 on: March 22, 2011, 09:07:02 am

No es necesario


Y para que sirven?? Añaden algún tipo de control de flujo o algo??

Gracias
25  International / Español / Ayuda max232 on: March 22, 2011, 07:48:13 am
Hola a todos, estoy intentando conectar arduino a un modem gsm (mtx65i). Necesito conectarlo a través de rs232 y para ello estoy intentando utilizar un max232n(datasheet: http://focus.ti.com/lit/ds/symlink/max232.pdf), pero no consigo nada. He leído varios hilos que tratan sobre el tema y como casi todos están en inglés no sé si se me habrá pasado algo por alto. Las conexiones que he realizado son las siguientes:



También he conectado en el db9 los pines 1, 4 y 6 entre sí y el 7 y 8 también entre sí. Pero nada. Sólo me he dado cuenta que si no enganchas el db9 al max232 y mides el voltaje entre los pines 13 y 14 este fluctúa como si se estuviera escribiendo, pero si conecto el db9 entonces el voltaje es 0 sin fluctuaciones, esto me pasa aunque el db9 no esté conectado al pc (no sé si esto será normal)

SOLUCIONADO: He medido y existía continuidad entre los 3 cables (gnd, tx y rx) del db9, he cambiado el cable y voilá ya funciona perfectamente.

Es absolutamente necesario los puentes entre los pines 1, 4 y 6 y 7 y 8 del db9??

Se aceptan sugerencias.

Gracias
26  International / Español / Re: Detectar equipos encendidos on: February 24, 2011, 07:34:28 am
Gracias chato_sat sin duda es mejor opción que usar reles intente utilizar esa opción pero algo hice mal proque no me funciono. volvere a probar con tu esquema. muchas gracias

De nada, espero que te sirva, por lo menos a mí si me funciona.

Recuerda que el arduino y la fuente deben de tener la misma masa, así que si el arduino no lo alimentas con la fuente deberás de sacar un cable desde la masa de la fuente hasta el gnd del arduino, tal y como lo he puesto en el esquema.

Saludos chato_sat
27  International / Software / Re: Dudas con IF y else on: February 24, 2011, 05:47:05 am
Buenas comeollas, yo no sé mucho sobre el tema así que a lo mejor desvarío un poco.

Tengo un par de preguntas, la primera es: que es ledPin y ledPin2, entiendo que son la misma salida pero siendo la misma salida porque las declaras en 2 variables diferentes pudiendo utilizar solo una?? la segunda es que si se puede leer de un pin que has declarado como OUTPUT, ya que entiendo que ledPin lo has declarado como OUTPUT.

Saludos chato_sat.
28  International / Español / Re: Detectar equipos encendidos on: February 24, 2011, 04:35:30 am
Para equipos que utilizan corriente continua lo del relé me parece excesivo, valdría con un divisor de tensión para bajar la tensión para que no supere los 5v e introducírsela al arduino.

Por ejemplo para la fuente del ordenador que es de 12V puedes hacer el siguiente circuito:


Para los de corriente alterna no tengo ni idea, a ver si alguien nos puede dar algo de luz sobre el tema.

Saludos chato_sat
29  International / Software / Re: Ejemplo 'goto' on: February 22, 2011, 12:54:13 pm
El funcionamiento es el mismo la declares antes del setup() o después.

Saludos,
chato_sat
30  International / Software / Re: Ejemplo 'goto' on: February 22, 2011, 12:22:30 pm
Pues puedes crear una función y llamarla desde cualquier parte del programa. Cuando se llama a una función esta se ejecuta y una vez que termina la función el vuelve el flujo del programa a donde se llamó a la función.

Por ejemplo:
Code:
for(a=0;a<9999;a++)
{
    for(b=0;b< 9999;b++)
   {
       if(x == 20)
           funcion1();

       //mas codigo
         
   }
}

void funcion1() {
}

cuando se cumple que x==20 se ejecuta lo que haya en funcion1 y cuando termine se seguirá ejecutando el for

Saludos,
chato_sat
Pages: 1 [2] 3 4