Show Posts
Pages: [1]
1  Using Arduino / Programming Questions / Problems emulating a mouse. All buttons are the left. on: September 06, 2013, 10:47:41 am
I have some problems emulating a mouse using my leonardo board.
All works well but seems that all Mouse.click(X), Mouse.press(X), and Mouse.release(X) functions act only as the left button.
It has no sense if I set X as nothing,  MOUSE_LEFT,   MOUSE_RIGHT or MOUSE_MIDDLE in all cases actas like the mouse left button.

All the code works well even the test conditions to do a Mose.click or Mouse.xxx but in all cases I get a left click.


Any suggestions?

(Sorry my English is not very good as you can see)
2  International / Software / Mouse. no funcionan los botones central y derecho on: September 05, 2013, 05:29:33 pm
He hecho un programa para emular un ratón con un joystick y va bien pero no consigo emular la tecla derecha ni la central del ratón; haga lo que haga se "pulsa" el botón izquierdo.

He probado con Mouse.press (MOUSE_RIGHT) y después Mouse.release y con Mouse.click directamente.

En todos los casos obtengo el resultado de (MOUSE_LEFT) o de ()

El código va bien porque he probado a imprimir mensajes para saber si pasa por ahí o no y si que pasa cuando debe.

También he probado a dar valores para no usar las constantes y pasa lo mismo; todos son el botón izquierdo
3  International / Software / Re: Tiempos mínimos. on: January 06, 2013, 05:37:29 pm
Pues después de un rato de estudiar el caso, parece ser que al escribir el registro del timer la primera vez no hace caso de la interrupción.
El manual de AVR dice que puede pasar si se hace con el timer en marcha, pero con los tres arduinos que tengo pasa si o si tengas o no el timer en marcha.
4  International / Software / Tiempos mínimos. on: January 05, 2013, 06:28:59 am
Un par de notas previas:
De programar en C estoy pez; pese a haberlo intentado en las últimas décadas nunca lo he "interiorizado" osea que es probable que tenga cagadas muy muy básicas.
Programar en código máquina si que se, lo he hecho durante años en varias plataformas.


El problema:
Mediante interrupciones para cargar lo mínimo la CPU hago lo siguiente. Un sensor hall manda un pulso que activa una salida y un tiempo después se apaga. Ambas señales van por interrupciones; una externa para inicio y una por el timer2 para el final. Parece funcionar correctamente, pero al haber añadido unas instrucciones para contar el tiempo de la amplitud del pulso salen tiempos muy grandes.
No he podido medir la amplitud real del pulso y puede que sea correcta y el "medidor" con lafunción millis() o con micros() da mas o menos lo mismo no mida bien porque las funciones del sistema sean muy lentas.
El caso es que el tiempo mínimo son 16mS y debería de ser menos.

El código:
Code:
   #include <avr/interrupt.h>
    #include <avr/io.h>
    int Inyector = 3;    //
    int LED = 13;        //Pin del led
    int PotOn=A0;
    int recarga=100;
    int RPM;
    unsigned long tOn=0;
    unsigned long tOnOld;
    unsigned long apertura;
    volatile int state = LOW;
    //
    
    ISR(TIMER2_OVF_vect) {
    digitalWrite( Inyector, LOW);
//Parar el timer 2
    TCCR2B &= ((0<<CS22) | (0<<CS21) | (0<<CS20));
    //TIMSK2 |= (0<<TOIE2) ;  //InHabilita interrupción por desbordamiento del Timer2
    apertura=millis()-tOn;
    state = !state;
    Serial.print("R=");
    Serial.print(recarga);
    Serial.print("  Ap=");
    Serial.print(apertura);
    Serial.print("mS ");
    Serial.print(RPM);
    Serial.println("rpm");
    };
    void setup() {
    //Parar el timer 2
    TCCR2B &= ((0<<CS22) | (0<<CS21) | (0<<CS20));      
    // Use normal mode
    TCCR2A |= (0<<WGM21) | (0<<WGM20);
    // Usar reloj interno. No se usa el reloj externo en arduino
    ASSR |= (0<<AS2);
    TIMSK2 |= (1<<TOIE2) | (0<<OCIE2A);  //Habilita interrupción por desbordamiento del Timer2
    //Initialize serial and wait for port to open:
    Serial.begin(9600);
    // prints title with ending line break
    Serial.println("ECU 004 (c) Felix Diaz");

      // initialize the digital pin as an output.
  pinMode(Inyector, OUTPUT);  
  pinMode (LED  , OUTPUT);
   attachInterrupt(0, inicio, FALLING); //Puede ser LOW, CHANGE, RISING Y FALLING
    }

    void loop() {
        recarga=255-analogRead(PotOn)/4;    //El potenciometro va al revés que el timer
          digitalWrite(LED, state);
        delay(100);
    }

void inicio()
{
  digitalWrite( Inyector, HIGH);
  tOnOld=tOn;
  tOn=millis();
  sei();
  //Recargar el timer:
    TCNT2=recarga;
    //Configuración del timer 2: Preescaler /1024,
    TCCR2B |= ((1<<CS22) | (1<<CS21) | (1<<CS20));
    //Resetear el preescaler
    GTCCR |= (1<<PSRASY);
  RPM=60000/(tOn-tOnOld);
}

Dado lo taruguín que soy programando en C, a ver si veis algún error gordo o algo. Es probable que tenga alguna orejada tonta.
5  International / Software / Re: ¿Se puede poner un array o tabla look-up en la rom? on: January 05, 2013, 06:21:52 am
Al final lo solucioné de otra forma pero no me convence mucho el funcionamiento.
Como no tiene nada que ver lo voy a preguntar en otro hilo.
6  International / Software / Re: ¿Se puede poner un array o tabla look-up en la rom? on: December 08, 2012, 01:38:52 pm
Veo que me has reconocido por el avatar, porque el nikname estaba ocupado.  smiley-grin
Estoy usando un arduino nano V3 con un 328 osea que tengo 2k de ram y 1k de eeprom.
Estoy empezando con este proyecto así que quizás sea racanería prematura de ram, cpu y de todo pero es que estoy acostumbrado a funcionar así; ahorra desde el principio que luego no te queda de X.

El animalito se supone que será una ECU para etanol para un prototipo la shell ecomaratón. Ya veremos que sale del engendro.
Es una operación repetitiva, que siempre será la misma, se supone que no hay que tocarla nunca, aunque quizás venga bien después como un "mapa de motor", una posibilidad sería tener varios al gusto.
7  International / Software / Re: ¿Se puede poner un array o tabla look-up en la rom? on: December 08, 2012, 11:11:41 am
Si, me refería a la flash, a la memoria de programa, vamos.

Gracias le echo un vistazo pero creo que si que es eso lo que estaba buscando.
8  International / Software / ¿Se puede poner un array o tabla look-up en la rom? on: December 06, 2012, 05:57:32 pm
A ver si me explico: Estoy usando el timer 2 para generar interrupciones periódicas pero quiero liberar la cpu todo lo que se pueda y al mismo tiempo ser lo mas preciso posible.
El tiempo de recarga del timer y el preescaler dependen del inverso de una lectura analógica; ya que con unl potenciómetro selecciono frecuencias pero al final en el timer lo que se programa es el periodo f=1/T.
Lo mas rápido es leer una tabla o un array y recargar el timer para el próximo, si me pierdo haciendo cálculos pierdo precisión pero como es relativamente grande para que sea precisa no la quiero cargar en la ram para no llenarla entera o en la eeprom, además al arrancar se perdería mucho tiempo declarando y llenando el array.

Resumiendo la pregunta es si puedo declarar un array de algún modo para que esté en la rom y no en la ram, evidentemente no se modificaría en tiempo de ejecución; de hecho me interesa que no se pueda modificar.

Serían dos tablas tipo char, un byte por posición, como mínimo de 65 entradas cada una, claro que según lo complicado que sea lo ideal sería llegar a dos tablas de 1k ya que la resolución de la entrada analógica es 1k
9  International / Software / Re: Ayuda por favor ¿Como puedo cambiar los pines de comunicacion spi, es posible? on: December 06, 2012, 05:44:59 pm
El protocolo SPI es relativamente sencillo de implementar "a pedales".

Por otro lado me suena que hay alguna función que lo hace en el sistema del arduino, no se si es "serialize" o algo así. Busca a ver si la encuentras, pero claro, perderás velocidad y tiempo de máquina.

El algoritmo es algo así:

Pon el bit 7 en el pin data
haz un pulso en el pin clock
Pon bit 6 en pin data
haz pulso de clock
...
(ahora no recuerdo si se gira de derecha a izquierda o al revés)
10  International / Español / Re: Duda con limentacion desde automotor on: December 30, 2011, 07:11:45 am
Sinceramente para lo que va a consumir yo ponía un 7805. Si fuese para 1A o mas ya no.
11  International / Español / Re: Problema AnalogInput oscilante on: December 27, 2011, 06:28:06 pm
Cuidado con el puente que "muerde", si tienes una mas común solo rectificará media onda y por lo tanto tendrás la mitad del tiempo el pin al aire y la otra mitad conectado a lo que sea.

¿Puedes colgar el esquema de lo que estás haciendo?
12  International / Español / Re: Inhabilitar el chip fdti on: December 27, 2011, 06:25:25 pm
Ya, pero el módulo bluetooth va a las mismas líneas que el usb tras pasar por el fdti yo me pregunto cual gana, pero en breve lo resuelvo, pruebo y ya está.
13  International / Español / Re: Inhabilitar el chip fdti on: December 27, 2011, 05:06:35 pm
Pues probaré a ver, igual para eso son las resistencias de 1k en serie que hay.
¿Y programabas el arduino y toda la pesca con el bluetooth ahí puesto?
14  International / Español / Re: alimentación regulable on: December 26, 2011, 06:42:43 pm
Para corrientes importantes yo te recomendaría dos fuentes, una para la lógica y otra para la carga. Y unirlo con optoacopladores, de lo contrario es bastante probable que no funcione.
De paso la fuente "gorda" puede ser de calidad regular.

Se puede hacer un generador de corriente constante con un simple transistor NPN, un zener y una resistencia.
Aunque para corrientes grandes es mejor usar algo sin corriente de base; fet, igfet, igbt...con estos no se como hacer un generador de corriente constante, pero seguro que se puede.
15  International / Español / Inhabilitar el chip fdti on: December 26, 2011, 06:35:48 pm
Estoy usando un arduino nano junto con un módulo bluetooth-uart. Va correctamente con una uart software pero me interesaría usar la que lleva integrada que está conectada al chip fdti para el usb ya que nunca se van a usar a la vez.
Según la documentación escrita si no se alimenta por usb ese chip no funciona, pero según el esquema si, y según mi arduino también.
He mirado el datasheet del fdti y he buscado en el foro pero no veo claro que pueda usar las líneas D0/RX y D1/TX para conectar también el módulo bluetooth.
Bueno, por el módulo BT no habría pega, lo podría pasar por un buffer triestado o apagar a voluntad, pero el fdti ya está soldado y no veo que se pueda inhabilitar/parar.
En realidad el problema está en D0/RX que sería una entrada conectada a dos salidas. Para D0/RX no habría pega en poner dos entradas conectadas a una salida.

¿Alguna sugerencia?
Pages: [1]