domingo, 13 de enero de 2013

Arduino, mi ultimo descubrimiento.

Pues Arduino es mi ultimo descubrimiento, bueno ya se que que lleva muchos años en la scene pero yo le he descubierto hace unos días.

Ya tengo pedidos mi Arduino Uno R3 y un montón de sensores y y accesorios para esta fabulosa placa.




Enlace a la pagina Oficial de Aruino :  http://arduino.cc/es/Guide/HomePage

Foro en Español sobre Arduino :  Foro en español sobre Arduino


Dispone de in entorno de programacion muy intuitivo y un lenguaje propio.

Los programas hechos con Arduino se dividen en tres partes principales: estructuravalores (variables y constantes), yfunciones. El Lenguaje de programación Arduino se basa en C/C++.

Estructura

Estructuras de control

  • if (comparador si-entonces)
  • if...else (comparador si...sino)
  • for (bucle con contador)
  • switch case (comparador múltiple)
  • while (bucle por comparación booleana)
  • do... while (bucle por comparación booleana)
  • break (salida de bloque de código)
  • continue (continuación en bloque de código)
  • return (devuelve valor a programa)

Sintaxis

  • ; (punto y coma)
  • {} (llaves)
  • // (comentarios en una línea)
  • /* */ (comentarios en múltiples líneas)

Operadores Aritméticos

Operadores Comparativos

  • == (igual a)
  • != (distinto de)
  • < (menor que)
  • > (mayor que)
  • <= (menor o igual que)
  • >= (mayor o igual que)

Operadores Booleanos

  • && (y)
  • || (o)
  • ! (negación)

Operadores de Composición

  • ++ (incrementa)
  • -- (decrementa)
  • += (composición suma)
  • -= (composición resta)
  • *= (composición multiplicación)
  • /= (composición división)

Variables

Constantes

Tipos de Datos

Conversión

Funciones

E/S Digitales
E/S Analógicas
E/S Avanzadas
Tiempo
Matemáticas
  • min() (mínimo)
  • max() (máximo)
  • abs() (valor absoluto)
  • constrain() (limita)
  • map() (cambia valor de rango)
  • pow() (eleva a un número)
  • sq() (eleva al cuadrado)
  • sqrt() (raíz cuadrada)
Trigonometría
  • sin() (seno)
  • cos() (coseno)
  • tan() (tangente)
Números Aleatorios
Communicación

Echás algo en falta? Visita lareferencia extendida o la página de librerías. También puedes visitar lapágina de código propuesto por la comunidad.

Correcciones, sugerencias, y nueva documentación deberán ser publicadas en el Foro (castellano) o en el Foro (inglés).
El texto de la referencia de Arduino está publicado bajo la licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0. Los ejemplos de código de la referencia están liberados al dominio público.

domingo, 30 de diciembre de 2012

Crear un Reproductor de audio en XCode.

Crear un Reproductor de audio en XCode.


Crear un simple reproductor de audio en el que podemos hacer Play, Pause y Stop, y nos muestra una etiqueta con algunos datos del archivo de audio que estamos reproduciendo.


Código del Archivo ViewController.h:

//
//  ViewController.h
//  audio
//
//  Created by Francisco on 28/12/12.
//  Copyright (c) 2012 Francisco. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h> //Importamos el Framework para poder usar los metodos de AVAdioPlayer


@interface ViewController : UIViewController <AVAudioPlayerDelegate>

//Creamos un objeto llamado reproductor que heredada de la clase AVAudioPlayer.
@property (nonatomic,strong)AVAudioPlayer *reproductor;

//Creamos un objeto etiqueta  que hereda de la clase UILabel, donde mostraremos datos de la reproducccion.
@property (strong, nonatomic) IBOutlet UILabel *etiqueta;

- (IBAction)play:(id)sender;
- (IBAction)pause:(id)sender;
- (IBAction)stop:(id)sender;
- (IBAction)cambioVolumen:(id)sender;

@end




Código Archivo ViewController.m:


//
//  ViewController.m
//  audio
//
//  Created by Francisco on 28/12/12.
//  Copyright (c) 2012 Francisco. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize reproductor,etiqueta;
- (void)viewDidLoad
{
    [super viewDidLoad];
    //Creamos el reproductor y le damos la ruta donde tenemos el archivo de audio
    NSError *error;
    NSString *ruta =[[NSBundle mainBundle]pathForResource:@"Adele" ofType:@"mp3"];
    NSURL *url =[[NSURL alloc]initFileURLWithPath:ruta];
    self.reproductor=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
    self.reproductor.pan =0;// Es para darle el Balance, altavoz derecho o altavoz izquerdo, -1 Izquerda, 0 se escucha igual en los dos, y  1 solo la derecha.
    self.reproductor.enableRate=YES;
    self.reproductor.rate=1;// Es para la velocidad de reproduccion va de 0.5 a 2.
    self.reproductor.numberOfLoops =-1;//Para determinar el numero de repeticiones del archivo.Si ponemos un signo negativo se repite indefinidamente y con un numero positivo ejemplo 3, se repite tres veces.
    
    self.reproductor.volume=1;//Maneja el volumen y su valor es entre 0 y 1.
    [self.reproductor prepareToPlay];//Aqui le estamos diciendo que se prepare para reproducir sonido y asi es mas rapido cuando pulsamos play.
    
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}

- (IBAction)play:(id)sender {
    [self.reproductor play];
}

- (IBAction)pause:(id)sender {
    
      etiqueta.text = [[NSString alloc]initWithFormat:@"Duracion:  %f, TiempoTranscurrido: %f Volumen: %f",self.reproductor.duration,self.reproductor.currentTime,self.reproductor.volume];
    [self.reproductor pause];
    
    
}

- (IBAction)stop:(id)sender {
    
  
    [self.reproductor stop];
}

- (IBAction)cambioVolumen:(id)sender {
    
    self.reproductor.volume=((UISlider *)sender).value;
}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    
    //Con este metodo podemos saber si nuestro audio a finalizado y si a llegado al final del archivo de audio y hacer algo, tambien tenemos una bandera"flag" con un valor Booleano que nos da YES si el audio a terminado y NO si no a finalizado.
}
@end

domingo, 9 de diciembre de 2012

Bucles y Sentencias de Control de Flujo.


Bucles y Sentencias de Control de Flujo.


entero = 9;
    //Aqui le estamos diciendo que si entero es igual a once se ejecute el código contenido entre las {} , si entero fuese distinto a nueve, la ejecución continuaría sin hacer nada. 
       if (entero ==9) {
        NSLog(@"Entero es igual a :%i",entero);
     }
    
    //Esta sentencia de control de flujo llamada, if ejecuta el código si se cumple la condición dada entre perentesis, en este caso que entero sea menor que once y si no se cumple se ejecuta el código siguiente a la sentencia else.
     
     if (entero<11) {
        NSLog(@"Entero es menor que Once");
    } else {
        NSLog(@"Entero es mayor que Once");
    }
    
    
    //El bucle For se repite mientras la condición sea cierta, en este caso                que i sea menor o igual a 10.
    for (int i=0; i<=10; i++) {
        NSLog(@"El valor de i es: %i",i);
    }
     //En este bucle lo primero que hace es comprobar que lo de la linea While sea cierto y si es cierto se ejecuta el condigo siguiente bajo la linea de comprobación y si la condición no se cumple sale del bucle sin ejecutarse.
    while (entero<10) {
        NSLog(@"Entero es aun menor que 10 %i",entero);
        entero++;
        }
   // Este bucle se repite mientras la sentencia de la linea del While se cierta, por lo tanto siempre se ejecuta una vez al menos.
    
    do {
        NSLog(@"Esto es del Do While");
        entero++;
    } while (entero<10);
    
     // SWitch permite que según el valor de una variable se ejecute un determinado código y si ninguno de los valores case coincidiese con el valor de la variable , entonces se ejecuta el código situado bajo la sentencia default.
    switch (entero) {
        case 1:
            NSLog(@"Entero es igual a uno.");
            break;
            case 2:
            NSLog(@"Entero es igual a dos");
            break;
            case 3:
            NSLog(@"Entero es igual a tres");
            break;
        default:
            break;
    }
    

jueves, 6 de diciembre de 2012


Creación y Uso de NSArray ,NSMutableArray ,NSDictionary y NSMutableDictionary.

NSArray:
Para crear un arras que no puede ser modificado:

NSArray *array =[NSArray arrayWithObjects:@"Uno",@"Dos",@"Tres",@"Cuatro", nil];

Muestra por consola el objeto situado en la posición tres:(recordar que empieza a contar desde :0,1,2…):
NSLog(@"El Objeto en la posición 3 es:  %@",[array objectAtIndex:2]);
Esto da como resultado:El Objeto en la posición 3 es:  Tres.

Para saber el numero de objetos de un Array:
NSLog(@"Numero objetos Array %i",[array count]);


NSMutableArray:

Crear un NSMutableArray , que es un Array que se puede modificar.

NSMutableArray *mutablearray =[NSMutableArray arrayWithObjects:@"Primero",@"Segundo",@"Tercero",@"Cuarto", nil];

Para añadir un objeto al Array:
[mutablearray addObject:@"Quinto"];

Para Insertar un objeto en un lugar determinado del array teniendo en cuenta que empieza a contar desde cero:
[mutablearray insertObject:@"Septimo" atIndex:2];

Para reemplazr un objeto en un lugar determinado:
[mutablearray replaceObjectAtIndex:0 withObject:@"Dos"];

Para borrar un objeto determinado:
[mutablearray removeObjectAtIndex:2];

También se puede borrar por el nombre del objeto:
[mutablearray removeObject:@"Primero"];

Borrar todos los Objetos del Array:
[mutablearray removeAllObjects];

Para saber el numero de objetos que tiene un Array o Mutablearray usamos la palabra reservada "count":

 NSLog(@"Numero Objetos Mutablearray %i",mutablearray.count);
Tiene muchos métodos mas pero estos son los mas usados.

NSDictionary.
Crear un NSDictionary:
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:mutablearray forKeys:array];
Notese que hemos usado al array creado anteriormente como indice y el mutableArray también creado anteriormente como forKey.
Si ponemos un NSLog el resultado seria este:

NSLog(@"Esto es el Dictionary %@",dictionary);
Esto es el Dictionary {
    Cuatro = Cuarto;
    Dos = Segundo;
    Tres = Tercero;
    Uno = Primero;
Notese que lo ordena por orden alfabetico.

Asi podemos sacar por consola el ForKey de de un objeto del Dictionary, esto nos daría como resultado:Tercero
NSLog(@"%@",[dictionary objectForKey:@"Tres"]);



NSMutableDictionary:

Creamos un NSMutableArray vacio:

NSMutableDictionary * mutableDictionary =[[NSMutableDictionary alloc]init];
Lo rellenamos.
Al forKey:"El mejor programador del mundo mundial…" (No tengo abuela…jejejeje) le metemos el SetValue "Promedi"

[mutableDictionary setValue:@"Promedi" forKey:@"El mejor programador del mundo mundial..."];

NSLog(@"%@",mutableDictionary);

Resultado:

"El mejor programador del mundo mundial..." = Promedi;


[mutableDictionary setValue:array forKey:@"Prueba del NSMUtableArray."];
    NSLog(@"%@",mutableDictionary);
Resultado:
 "Prueba del NSMUtableArray." =     (
        Uno,
        Dos,
        Tres,
        Cuatro
    );



viernes, 12 de octubre de 2012


    El Mejor foro de la red dedicado a los productos de Apple.



En el podrás resolver todas tus dudas y colaborar para ayudar a los demás, sin duda el mejor foro de la Red dedicado al los Fans de la Manzana.









www.iphoneadictos.es





sábado, 6 de octubre de 2012

Cosas basicas sobre XCode.




Guía de pequeños trucos en XCode.

Para hacer que desaparezca el teclado en un TexField:

Creamos una accion y llamamos al sendero de la función y le decimos que deje de ser el primero que responde.
Luego conectamos la función con Did end on Exit y al tocar en la tecla Return el teclado desaparece.

-(IBAction)escoderTeclado:(id)sender
{
    [sender resignFirstResponder];
}


Para hacer desaparecer el teclado en las vista de texto usaremos esto:
En este caso con la tecla Return subimos una linea y para ocultar el teclado hacemos tap en cualquier parte.
Escribir esto en el viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *reconoceTap =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleBackgroundTap:)];
                                                                                                             
    reconoceTap.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:reconoceTap];
        
}

 Y luego creas este metodo:(VistaTexto seria el nombre que le hemos dado al objeto vistaDeTexto.):
También se podría aplicar a los UITextField. 

-(void)handleBackgroundTap:(UITapGestureRecognizer *)sender
{
    [vistaTexto resignFirstResponder];
}


Enviar Mensaje de Twitter con una imagen:
Añadimos al proyecto el Framework Social.framework
Lo importamos al proyecto y añadimos al proyecto la imagen que queremos enviar.

Con este primer metodo le estamos diciendo que si la conexión es posible nos envíe el Tweet.

- (IBAction)twitter:(id)sender
{
  
      if (SLComposeViewControllerResultDone)

    {
        SLComposeViewController *tweet=[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    
        [tweet setInitialText:@"Prueba del Twitter"];
        UIImage *imagenTwitter =[UIImage imageNamed:@"iconoforo.jpg"];
        [tweet addImage:imagenTwitter];
        [self presentViewController:tweet animated:YES completion:Nil];
    }
}

Y esta acción la usamos para ver si es posible la conexión y nos salta una alerta que nos avisa si es posible o si no lo es.

- (IBAction)servicioDisponible:(id)sender
{
    if (SLComposeViewControllerResultCancelled)
    {
        UIAlertView *alertaServicio =[[UIAlertView alloc]initWithTitle:@"ATENCION" message:@"Imposible enviar Twitter" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertaServicio show];
    }
        else
        {
            UIAlertView *alertaServicioCorrecto =[[UIAlertView alloc]initWithTitle:@"¡¡Perfecto!!" message:@"Es posible enviar Twitter" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertaServicioCorrecto show];
        }
        
    
    return;
}


Para comprobar si se a escrito algo en el UITextField:

Contrasenya y nombreUsuario son dos UITextField, con la sentencia length comprobamos su longitud y si esta es igual a cero no salta la alerta o podríamos crear otra electa indicando que el campo de texto esta vacío.

- (IBAction)Entrar:(id)sender
{
    NSString *paswor=[[NSString alloc]init];
    paswor=contrasenya.text;
    
    NSString *nombreUser =[[NSString alloc]init];
    nombreUser=nombreUsuario.text;

    int length =[nombreUser length];
    int paswor2 =[paswor length];

    if (length==0 | paswor2==0)
        return;
    NSString *mensajeAlerta =[NSString stringWithFormat:@"Bienvenido %@",nombreUser];
    
    
    UIAlertView * alerta =[[UIAlertView alloc]initWithTitle:@"Usuario Aceptado" message:mensajeAlerta delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    
    [alerta show];
    
    
    
}


Crear una alerta con varias opciones y saber cual de las opciones a sido pulsada:
Primero con UIAlertView.

- (IBAction)crearAlerta:(id)sender
{
    UIAlertView *alerta=[[UIAlertView alloc]initWithTitle:@"Alerta creada" message:@"Varias Opciones" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"Opcion 1",@"opcion 2",@"Opcion 3", nil];
    [alerta show];
    
}

-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex== alertView.cancelButtonIndex)
    {
        NSLog(@"Pulsado el boton de Cancelar o OK");
    }
    else if (buttonIndex==alertView.firstOtherButtonIndex)
    {
        NSLog(@"Se a pulsado el primer Boton");
    }
    else if (buttonIndex==alertView.firstOtherButtonIndex +1)
    {
        NSLog(@"Pulsado el segundo Boton");
    }
    else if (buttonIndex==alertView.firstOtherButtonIndex +2)
    {
        NSLog(@"Pulsado el tercer boton");
    }
    
}

Ahora veremos el mismo ejemplo pero con el botón rojo(destructivo):
Aqui usaremos el UIActionSheet.
Tenemos que añadir el protocolo <UIAlertViewDelegate>.
- (IBAction)botonRojo:(id)sender
{
    UIActionSheet *botonRojo =[[UIActionSheet alloc]initWithTitle:@"Con el Boton Rojo" delegate:self cancelButtonTitle:@"Salir" destructiveButtonTitle:@"Borrar todo" otherButtonTitles:@"Opcion 1",@"Opcion2", nil];
    
    [botonRojo showInView:self.view];//Observamos que la forma de llamarlo es diferente
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex== actionSheet.cancelButtonIndex)
    {
        NSLog(@"Pulsado el boton de Cancelar o OK");
    }
    else if (buttonIndex==actionSheet.destructiveButtonIndex)
    {
        NSLog(@"Pulsado el boton rojo");
    }
    else if (buttonIndex==actionSheet.firstOtherButtonIndex)
    {
        NSLog(@"Se a pulsado el primer Boton");
    }
    else if (buttonIndex==actionSheet.firstOtherButtonIndex +1)
    {
        NSLog(@"Pulsado el segundo Boton");
    }
    else if (buttonIndex==actionSheet.firstOtherButtonIndex +2)
    {
        NSLog(@"Pulsado el tercer boton");
    }
}

Alerta con entrada de texto del Usuario:
Muestra el nombre introducido en la propiedad text de una Label.

- (IBAction)entradaUsuario:(id)sender
{
    UIAlertView *conEntrada =[[UIAlertView alloc]initWithTitle:@"Cual es su nombre?:" message:nil delegate:self cancelButtonTitle:@"Aceptar" otherButtonTitles:nil];
    conEntrada.alertViewStyle =UIAlertViewStylePlainTextInput;
    [conEntrada show];
    
}
-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UITextField *field1 =[alertView textFieldAtIndex:0];
    verNombre.text=[NSString stringWithFormat:@"Nombre: %@",field1.text];
}




Métodos que se ejecutan en el AppDelegate.m, según en estado se encuentre la aplicación.



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"Aqui es en el Bool");
    //Este siempre se ejecuta al iniciar la aplicación.
    //Solo se ejecuta si la app esta cerrada totalmente
    return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
   NSLog(@"Aqui es en el applicationWillResignActive");
    //Este se ejecuta cuando cerramos la aplicación con boton Home.

}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"Aqui es en el applicationDidEnterBackground");
    //Esta se ejecuta cuando pasa a segundo plano.
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog(@"Aqui es en el applicationWillEnterForeground");
    //Se ejecuta Cuando vuelve del segundo plano.
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSLog(@"Aqui es en el applicationDidBecomeActive");
    //Este se ejecuta cuando se inicia la aplicación y esta a la espera.
    //Tambien cuando vuelve desde segundo plano y se queda a la espera de algún evento.
     
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    NSLog(@"Aqui es en el applicationWillTerminate");
    //Este se ejecuta al cerrar definitivamente la aplicación.

}

Crear una animación:
animacionImagen seria el nombre del UIImage donde se reproducira la animación.

 NSArray *animacionArray=[[NSArray alloc]initWithObjects:
                            [UIImage imageNamed:@"anim1.png"],
                            [UIImage imageNamed:@"anim2.png"],
                            [UIImage imageNamed:@"anim3.png"],
                            [UIImage imageNamed:@"anim4.png"],
                            [UIImage imageNamed:@"anim5.png"],
                            [UIImage imageNamed:@"anim6.png"],nil];
    
    animacionImagen.animationImages=animacionArray;
    animacionImagen.animationDuration=0.5;
    animacionImagen.animationRepeatCount=1;
    animacionImagen.userInteractionEnabled=NO;
    [animacionImagen setHidden:NO];
    [animacionImagen startAnimating];


Reconoce si se a tocado en una zona de pantalla:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer * tapImagen=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTap:)];
    tapImagen.cancelsTouchesInView=NO;
    [self.view addGestureRecognizer:tapImagen];
}

-(void)handleTap:(UITapGestureRecognizer *)sender
{
    CGPoint startlocation=[sender locationInView:self.view];
    if ((startlocation.y >= 211) &&  (startlocation.y <=(211 + 104)))
    {
       //Aqui se ejecutaría esto si el usuario toca la zona determinada para detectar las pulsaciones.
    }
}