|
527
|
International / Español / Detectar automáticamente el puerto COM que usa Arduino
|
on: March 12, 2011, 01:59:35 pm
|
|
Hola, estoy intentando comunicarme entre el Arduino y un PC con un programa escrito en C: desde el PC se le envía una cadena de caracteres, y el Arduino contesta con otra cadena. La comunicación se establece sin problema si paso al programa el nombre del puerto (ttyUSB0 en Ubuntu, COM4 en XP). En Ubuntu no tengo problema para que el programa C detecte automáticamente el puerto, con una rutina que va intentando abrir ttyUSB0, ttyUSB1, ttyUSB2... Pero en XP tengo dos puertos: COM1 ("Puerto de comunicaciones") y COM4 ("USB Serial Port", es el de Arduino). La rutina me abre COM1 ¿Conocéis algún modo de que desde el programa pueda distinguir un puerto del otro? Estoy utilizando funciones del WIN32 API (CreateFile, WriteFile, ReadFile)
|
|
|
|
|
528
|
International / Español / Re: Arduino mínimo
|
on: March 11, 2011, 02:13:26 am
|
|
Hola, si vas a cargarle los sketchs con un conversor serie-USB FTDI te hará falta un botón de reset para hacer uploading.
|
|
|
|
|
530
|
International / Hardware / Re: localizador para animales . gps
|
on: February 26, 2011, 11:39:13 pm
|
Hola, En el lado de la rapaz realmente no sé si necesitas un arduino para esa aplicación donde me imagino que el peso puede ser crítico. El gps recibe la señal de los satélites y calcula dónde se halla el ave. Necesitarás que te transmita esa información, y para eso tendrás que buscar alguna emisora con la potencia necesaria (no sé de qué distancias estamos hablando). Tienes los xbee Pro http://www.sparkfun.com/products/8690 que pueden alcanzar 1500m y tienen comunicación serie, como el módulo gps. Lo ideal sería unir el gps al xbee.
|
|
|
|
|
531
|
International / Software / Re: Dudas con IF y else
|
on: February 24, 2011, 05:38:18 am
|
Hola, Si entiendo bien, te funciona bien void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, DEC);
if(results.value == num0) { estatpin = digitalRead(ledPin); if (estatpin == 0) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } irrecv.resume(); // Recivir siguiente valor } Y te funciona bien void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, DEC);
if(results.value == num100) { estatpin = digitalRead(ledPin); if (estatpin == 0) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } irrecv.resume(); // Recivir siguiente valor } Si cada código funciona bien por su parte, no entiendo por qué ocurre tu fallo. Yo probaría sacarlos a dos funciones, y llamarles a cada uno desde el loop. No se me ocurre otra cosa.
|
|
|
|
|
532
|
International / Software / Re: Dudas con IF y else
|
on: February 24, 2011, 01:59:23 am
|
Hola, No veo nada anormal en el código. La línea que figura al final del segundo código irrecv.resume(); // Recivir siguiente valor existe también en el caso de un sólo botón?
|
|
|
|
|
533
|
International / Software / Re: Ejemplo 'goto'
|
on: February 22, 2011, 11:56:03 am
|
Hola, creo que sí podrías volver, pero podría resultar muy difícil predecir cómo acabará el programa for(a=0;a<9999;a++) { for(b=0;b< 9999;b++) { (if(x == 20) goto marca1; marca2:; //mas codigo } }
marca1:; //codigo marca1 goto marca2;
|
|
|
|
|
534
|
International / Software / Re: Dudas con IF y else
|
on: February 22, 2011, 11:49:55 am
|
Hola, yo creo que todo lo que se ejecuta si se cumple if lo tienes que poner entre corchetes, y lo mismo con el else void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, DEC); ................. ................. } else { digitalWrite(ledPin, HIGH); // LED on ................. ................. } }
|
|
|
|
|
535
|
International / Software / Re: Ejemplo 'goto'
|
on: February 22, 2011, 01:36:05 am
|
En C se recomienda no usar mucho el goto. Yo he solido emplear alguna vez cuando me interesa salir de bucles anidados: for(a=0;a<9999;a++) { for(b=0;b< 9999;b++) { (if(x == 20) goto marca1; } }
marca1:; // continúa el código
No conozco el uso de return más que para volver de una función.
|
|
|
|
|
536
|
International / Español / Re: Camara CMOS IR - 640x480. Necesito el código
|
on: February 18, 2011, 01:21:02 am
|
|
Hola, supongo que esa cámara dará una señal de vídeo, que la podrías conectar a una pantalla. Cuando hablas de soft para hacerle funcionar, ¿te refieres a conectarla a Arduino? Tendrías que decir qué es lo que deseas conseguir con ella, porque procesar imágenes exige tanta memoria que no creo que está al alcance de un micro.
|
|
|
|
|
537
|
International / Hardware / Alcance de los transceptores RFM12B
|
on: February 15, 2011, 11:56:20 pm
|
|
Hola, He montado dos atmegas328 (cristal de 16MHZ, dos condensadores de 22pF, un botón reset y un led), alimentados a 3.3V y los atmegas funcionan aparentemente bien! aunque sus especificaciones dicen que a esa tensión no se garantiza que atmega328 funcione a 16MHz. Con esa alimentación he podido conectarlos directamente a sendos RFM12B que van a 3.3V (sin tener que hacer conversiones de niveles lógicos). Estando próximos consigo que se comuniquen, con ejemplos de la librería de JeeLabs. Mi decepción ha venido cuando he colocado los módulos en dos habitaciones, separados unos 15m. No llega la señal. ¿Tenéis experiencia con estos módulos? ¿Es normal ese alcance tan corto?
|
|
|
|
|
538
|
International / Software / Re: Mensajes de estado por voz
|
on: February 15, 2011, 11:37:34 pm
|
Hola, La síntesis de voz es bastante compleja, y se usa sobre todo cuando interesa pasar un texto corrido a un sistema para que lo traduzca a voz. Yo creo que no merece la pena en meterse en esas profundidades cuando solo se necesitan emitir unos mensajes concretos de voz. Para eso tienes módulos que reproducen archivos de audio grabados en pendrives o tarjetas microSD. Yo conozco dos: - vmusic2: reproduce archivos mp3 grabados en prendrive. Hay ejemplos de uso con Arduino. Es bastante caro (> 50 euros) http://es.rs-online.com/web/429290.html?cm_mmc=ES-PPC-_-google-_-Part%20Numbers%20MH%203%-_-vmusic2_Broad&gclid=CLiZq6Dmi6cCFcomfAodfESbdQ- SOMO-14D: reproduce archivos de audio grabados en un microSD. Vale unos 20 euros. Si tu ordenador tiene lector de tarjetas, no es complicado: con un micrófono grabas cada mensaje de voz en un fichero (mp3 o wav), los tendrás que convertir a un formato especial (sd4) con un soft que bajas de la casa fabricante, y los grabas en el microSD nombrándolos como 0000.sd4, 0001.sd4, 0003.sd4 ... http://www.bricogeek.com/shop/interfaz-de-almacenamiento/293-somo-14d.html. Si te decides por esta opción, cuida de que las tarjetas no sean mayores de 2MB, y que sean de algunas marcas concretas, porque no todas las marcas funcionan. A mí kingston no me funcionó, sony me funcionó (hay información sobre eso en la web). Los dos módulos producen salida de audio para auriculares. Al SOMO-14D se le puede conectar un pequeño altavoz de 0.25 watios. Pero para usarlo en un garaje, tendrías que añadir un equipo de audio. Tienes altavoces con amplificador incorporado de los que se conectan a los PC a partir de 15-20 euros.
|
|
|
|
|
540
|
International / Software / Re: Seleccionar trozos de una cadena de caracteres
|
on: February 12, 2011, 12:22:35 pm
|
Hola, Si tu cadena consiste siempre de primera parte compuesta de letras y una segunda parte compuesta de dígitos, podrías hacer algo así char *p, a[9], b[9], cadena[] = "B234"; int n;
p = &cadena[0]; n = 0; while(isalpha(*p)) a[n++] = *p++; a[n] = '\0';
n = 0; while(isdigit(*p)) b[n++] = *p++; b[n] = '\0';
|
|
|
|
|