El hilo de ARDUINO: Dudas, código, ejemplos, etc

Tema en 'Informática - Tecnología' iniciado por McClane, 26 May 2017.

  1. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Hola foreros!! He decidido abrir este hilo porque, por lo que veo, hay algo de gente por aquí haciendo cosillas en ARDUINO y molaría que estuviese centralizado, para responder a dudas, mostrar proyectos o resolver problemas que tengamos. Hoy me estreno en ARDUINO con una placa NANO, y parece que ni siquiera llego a arrancar, por lo que es un buen pretexto para iniciar este hilo. biggrin

    He recibido esta tarde, como digo, una placa NANO por cuatro euros, Por el precio, es evidente que no es original, pero como este proyecto es libre, todos tenemos acceso al diseño de la placa y todos sus datos, por lo que otro fabricante puede sacar su clon o su versión paralela más grande, más pequeña o directamente igual.

    El problema es el siguiente: no consigo programar la placa. :( He querido subir el proyecto del parpadeo del LED integrado en la placa (quizá el programa más sencillo) pero no llega a subirlo. El error que da es el siguiente:

    CODE, HTML o PHP Insertado:
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
    Antes de escribir este hilo, me he pegado cabezazos contra el ordenador y he hecho/visto lo siguiente:

    -Instalar el controlador FTDI específico para Mac (el genérico no vale)
    -Después de instalarlo, he visto que esta placa no trae controlador ATMEL, sino el CH340G
    -Se instala el controlador CH340 y CH341
    -Ahora, en "Herramientas/Puerto" sale el ARDUINO con dirección /etc/cu.wchusbserial1a1310
    -El programa se compila correctamente
    -Se selecciona la placa ARDUINO NANO con chip ATMEGA 168, que es el de la placa
    -Subo el programa
    -Sale el error de arriba

    He probado esto mismo con Windows y más de lo mismo. La versión del programa es la más alta en ambos sistemas y en Windows también está instalado el controlador CH340 correspondiente, seleccionándose debidamente.

    Lo que veo extra es lo siguiente:

    -En Herramientas/Información de la placa" me sale el siguiente código:

    CODE, HTML o PHP Insertado:
    BN: Una plata desconocida
    VID: 1A86
    PID: 7523
    SN: Subir cualquier sketch para obtenerlo
    -En el Monitor serie, cuando está abierto y pulso el botón RESET de la placa, me devuelve todos los caracteres ASCII que puede manejar la placa

    Pero, para terminar...

    Al subir un programa, me sale "programmer is not responding" y no hay narices a programar la placa ni en Windows ni en Mac. Es más, el funcionamiemto más errático lo tiene Windows, ya que aquí, me dice directamente "COM14 is busy".

    Según veo por Youtube, al menos en Windows, es instalar el controlador CH340 y ya se puede programar la placa, pero en mi caso, es imposible. En teoría, el lunes me llega una ARDUINO UNO (en teoría es la original), a ver si esa funciona o es que se me está escapando algo.

    ¿Alguno ha tenido algún problema así con placas paralelas o solamente usáis las originales? ;)


    Por cierto. Todo esto es para hacer una cabina de simulación para Euro Truck Simulador 2. biggrin


    Saludos!!
     
    jmborja, borja.lopez, MiguelX5 y 2 otros les gusta esto.
  2. MiguelX5

    MiguelX5 En Practicas

    Registrado:
    8 Feb 2017
    Mensajes:
    242
    Me Gusta:
    148
    Muy buena idea @McClane

    A mi me paso lo mismo la primera vez que fui a subir código, pero al seleccionar el puerto correcto y el modelo de placa me funcionó.

    Proyectos en vuelo muchos, como sabes ando con el tema de las alarmas y con arduino es muy fácil, por ejemplo con este tutorial.



    Esta basado en el microcontrolador ESP8266 que se puede programar con el framework de Arduino, lo bueno, es igual de pequeño que el nano e integra wifi (nos olvidamos de receptores 433).

    También nos valen para monitorizar de forma remota por ejemplo temperaturas y humedad en diferentes puntos de la casa, unificar toda la info en Adafruit...

    O usarlos para controlar reles y con ello iluminación, riego....
     
  3. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    En mi caso tengo todo correcto, tanto el puerto como la placa y su integrado pero no hay manera. He leído por ahí muy pocos casos como el mío (después de matarme a rebuscar) y resulta que hay una pequeña probabilidad de que la placa venga sin gestor de arranque, lo que hace que no se pueda comunicar. Esta semana me tiene que llegar una UNO "original" (dudo que lo sea, pero viene serigrafiada como original) y dentro de unas semanas puede caer una LEONARDO y su módulo CAN-BUS para empezar a cacharrear. biggrin Con la UNO "original", si funciona, se puede programar el gestor de arranque de la NANO y una vez esté programado, ya se puede programar de forma normal. Hasta entonces, le he dicho al vendedor que puede que venga mal. ;)
     
  4. borja.lopez

    borja.lopez En Practicas

    Registrado:
    1 May 2015
    Mensajes:
    258
    Me Gusta:
    77
    Ubicación:
    Madrid
    Modelo:
    F20
    Por aquí otro friki ...

    Empecé hace un tiempo con un Arduino Leonado, también tengo por ahí un Netduino, un Uno chino, dos nanos chinos y hoy me ha llegado mi Mega chino biggrin

    Lo he tenido un tiempo abandonado, pero hace cosa de 1 mes que estoy con ello a tope. A parte de cacharrear con todo aquello de <2€ en eBay, estoy haciendo un medidor de ángulo de giro para la moto. Es muy sencillo (mpu6050 y display oled 0.96") pero me está sirviendo para aprender bastante :)

    Saludos!
     
  5. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Interesante!! Ando detrás de una LEONARDO por una característica especial que tiene, pero hasta que no me llegue una UNO que está de camino y consiga programarlas sin problemas, no voy a comprar más ARDUINO por lo que sea, a ver si es que no sé programar las placas o pasa algo con mis equipos. :(
     
  6. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    Usa un PC macclein y déjate de hostias bizarras :floor:

    Vaya, que en un pc va peor dices.., no estarás usando uno bizarro de esos que tienes con Windows 95?? jajja

    No sé por qué te dirá eso. Si estás usando un conversor USB a COM, el problema fijo que está en el maldito p*to conversor.

    Los FTDI tienen varios tipos de driver con diferentes tipos de emulación poero no recuerdo diferencias.

    Mira trasteando las opciones del puerto serie virtual que genera a ver si das con la tecla, a lo mejor por la velocidad o algo así, que se supone que eso no hace falta tocarla en opciones pq la negocia automáticamente el programa que conecta con la chisma esa, pero a lo mejor no lo negocia no sé.

    Lo que no entiendo pq coj*nes la cosa esa no va por USB Directo y no con un conversor FTDI tiñoso.

    Bueno no tengo ni p*ta idea, porque como pones que instalar el FTDI, me suena a eso, un conversor, pero ya no tengo ni idea de como va la chisma esa, si directa con USB y el conversor lo lleva la propia placa arduino soldada, o es serie directo y usas un conversor usb serie externo de de esos de cable o qué coj*nes maclein idolo mio
     
    Última edición: 30 May 2017
  7. victor7cap

    victor7cap En Practicas

    Registrado:
    29 Abr 2015
    Mensajes:
    301
    Me Gusta:
    165
    Me uno al post, aun no tengo ninguna idea que me mole ponerme con ella, pero material no me falta, arduino + impresora 3d = muchas posibilidades, ya solo me falta alog que hacer.

    McClane, eso me pasaba a mi, tienes algo conectado a la placa? Si es asi desconectalo y prueba con windows (mac a mi me da problemas tambien).
     
  8. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Windows 7 con un SSD aunque sea una cutrada. :finga:

    Las placas originales Arduino, muchas llevan el conversor FTDI que se supone que es instalar el controlador y listo. En Mac, en algunos equipos ni siquiera hace falta instalarlo porque ya viene uno genérico y a veces funciona, pero otras veces no. Yo deshabilité el que trae de serie y no sé si me hubiera valido, ya que esta placa que tengo no lleva el FTDI, sino el CH340, otro conversor pero chino, eso sí, con su respectivo controlador.

    El USB no va directo al chip porque los chip no tienen controlador USB. En el caso de la NANO que tengo, lleva el Atmel MEGA 168P (la versión nueva de la NANO lleva el Atmel MEGA 328P, más memoria pero es el mismo chip) y otras placas llevan otro chip, pero para el caso, son los mismos. La diferencia está, por ejemplo, en la LEONARDO, que es una placa que quiero, que lleva el Atmel MEGA 32u4 que ese chip sí se conecta directamente al USB y es el mismo chip el que tiene su propio controlador. Estoy detrás de una LEONARDO porque esa placa se puede convertir en un teclado y mandar pulsaciones al mismo ordenador, y eso me es muuuuuy útil para el proyecto que tengo en mente, ya que de no tenerlo, necesitaría comprar un teclado, romperlo y liarme a soldar cables como un animal. :LOL: Esa placa me ahorrará bastante trabajo y algunos euros. biggrin

    Por no tener, no tiene ni los pines soldados aún, los tengo encima de la mesa sueltos. Esperaba soldarlos la tarde/noche del viernes pero viendo que no funciona, no lo soldé por si acaso hay que devolver la placa. Eso sí, el vendedor, cada correo que le escribo me lo responde, así que en ese aspecto, estoy tranquilo. ;)

    En cuanto a programar la placa con Windows o Mac, en Windows los resultados son peores y he visto a bastante gente usar Arduino en Linux, que es más cabr*n todavía, y lo usan sin problemas. De todas formas, cuando tenga la placa nueva, la probaré igualmente tanto en Mac como en Windows. ;)
     
    A victor7cap le gusta esto.
  9. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Buenas noticias!! Programada a la primera y funcionando sin problemas. biggrin

    IMG_20170530_170018.jpg

    Iba a Madrid a por una LEONARDO y en el buzón me he encontrado esa UNO que compré la semana pasada. Antes de salir del bloque he subido a casa a meterle un programa básico y ha funcionado sin problemas, el clásico del LED. :LOL: Lo malo es que en la foto aparece apagado, pero os prometo que funciona. biggrin

    Ni controladores, ni velocidades ni nada. Nada más conectarla, en los puertos aparecía automáticamente y figuraba su nombre. Ha sido pulsar en Subir y todo correcto. Luego cuando llegue a casa os amplío información y fotos. biggrin
     
    A SPTR le gusta esto.
  10. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    Sólo se me ocurre que tengas problemas con el driver o que esté roto. Tengo varios nanos de 2 dólares y no me ha pasado nada parecido con ninguno.

    Bienvenido al club

    Ya puestos, hazte con una raspberry que también da mucho juego

    salu2
     
    A Tizon le gusta esto.
  11. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Bueno, pues llegados a este punto, doy por imposible echar a andar la NANO. Ahora con dos placas ARDUINO nuevas (una UNO, la de la foto, y una LEONARDO completamente original) he intentado quemar el gestor de arranque a través de ellas pero no se ha dejado quemar en ningún momento, por lo que pienso ya que es la placa la que está mal y que no tiene solución. Tanto la UNO como la LEONARDO se han programado a la primera con el código del LED y solamente ha habido que seleccionar el modelo de placa y su puerto: programar y el LED a funcionar. :unsure:

    Ya tengo una ODROID y hace tiempo que no la cojo porque tengo que montar prácticamente un ordenador para ella y poco sitio tengo en la habitación. Con las ARDUINO he hecho una excepción porque no requiere teclado ni monitor, y serán para hacer un simulador, concretamente la LEONARDO. :LOL:

    Por cierto, estoy intentando echar a andar la característica estrella de la LEONARDO y, por funcionar, funciona, pero no logro hacer que funcione como yo quiero. Puedo hacer que pulse continuamente una tecla, pero no logro activar una entrada y que active UNA SOLA VEZ esa tecla. A darme de cabezazos contra el ordenador. (n)
     
  12. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    Cutrada un 7 con un SSD?? si es lo mejor que existe hasta ahora para trabajar, (sin contar MAC), qué me estás contando??

    Eso es lo que intento poner siempre, y sí, estamos en el 2017... y sólo licencias del pro que vale una pasta, del home hay que rebuscar.

    Pero 7 es p*ta canela en rama, de lo mejor después de XP. El resto es chatarra.
     
    A Tizon le gusta esto.
  13. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    Pues eso imaginaba mcclein, pero por eso preguntaba, que no estaba seguro si el conversor iba soldado en la placa, que no estoy puesto en eso pero he visto muchos aparatos que llevan el usb pero interamente hacen la conversión usb-serial, por ciertos tispos de chips y otroso como dices llevarán la controladora usb integrada en el chip o aparte del mismo....

    Mola eso del arduino, yo tengo que pillarme uno pa probar pero no tengo casi tiempo.

    Entonces no has podido hacer funcionar la otra arduino?? = el driver va malo algo? o está mal soldado el conversor a la placa con alguna patilla que no haga contacto??? es QFN el chip conversor??, = con la estación de aire caliente y un repaso chuta...
     
  14. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    No necesitas el teclado y monitor: basta con que le actives el acceso mediante VNC (si quieres entorno gráfico), o sencillamente SSH con putty.

    En cuanto a lo del arduino, no termino de comprender cual es el problema que tienes.

    salu2
     
    A Tizon le gusta esto.
  15. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Me ha contestado el vendedor y cree posible que la placa esté mal. Las soldaduras son todas SMD excepto los pines que se los soldé ayer tratando de quemar el gestor de arranque usando otra placa Arduino, pero no se dejó. ;)
     
  16. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    SMD ejem..., SMD es un término muy ambiguo. QFN o similar son chips q llevan pads por abajo y algo por el lateral, no llevan patas.

    Esos con aire caliente debes soldar y se pueden repasar con la punta de un soldador fina.

    Pásame una foto del chip conversor USB y te digo.
     
  17. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    El problema que tengo es que no tengo ni p*ta idea de programar con su lenguaje. :descojon: Yo tenía la idea en mente de que hacer algo como...

    CODE, HTML o PHP Insertado:
    if(pin7, HIGH){               //si el pin 7 tiene tensión
        Keyboard.press('J');      //pulsa la tecla J
        Keyboard.release('J');    //suelta la tecla J
        }else{                    //si el pin 7 NO tiene tensión
        Keyboard.press('J');      //pulsa la tecla J
        Keyboard.release('J');    //suelta la tecla J
    }
    ...y que lo hiciese una vez por estado, que era mi idea. La historia está en que si la orden comprueba, y es cierto que el pin 7 tiene tensión, está presionando y soltando en bucle la tecla J, y lo hace de forma infinita. Imagínate la situación de acabar de programar la placa y que se te llene todo el p*to ordenador de Js: el ARDUINO, el foro, el TextEdit, el Spotlight, todo aquello que era susceptible de aceptar teclas. :descojon: Pero quito la placa y el hijoputa sigue escribiendo!! :floor:

    Vamos, que el programa no funciona como yo me creía y tengo que buscar una orden para pausarle o hacerle esperar a que el pin cambie de estado y que continúe con el programa. Y eso aún no sé hacerlo. Bastante que sé hacer el programa del LED ya de memoria, teniendo 24h de experiencia únicamente. biggrin
     
  18. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    jajaja, vaya mierda.

    Algo tiene que haber nen y no será chungo.

    Lo que no entiendo pq hace eso si no le metes un for. No sé macho.

    Pero no entiendo que haces ahí macho. Le metes una condición si se cuimple que pulse y suelte la J pero luego le dices que si no, haga lo mismo??, no entiendo, porque repites después del else lo mismo?? nen???

    No tiene endif después de else?? y ya está, o no le pongas else sin más.
    Veo que quieres q cuando tenga tensión puilse J y sin tensión también, o sea que le meterás algún PWM por ahí para que pulse y suelte o no sé que pollas queires hacer jajaja, qué bizarro eres jijiji

    Quita el else y prueba sin más.

    Pero no lo entiendo, si no es un for pq c**o hce ese bucle...

    Para ver donde peta, cambia la orden por otra, haz que ponga un 1 y luego sume un 20, por decir algo y te muestre en pantalla un mensaje con el resultado.

    Es decir, hacerte como un debug tu mismo para ver en que parte peta..., porque no puedes hacer correr el programa paso por paso y ver que va ahaciendo cada vez??

    Si eso no puedes, mete por medio algo, algo después de press J, mete un mensaje en pantalla o que parpadee el led 10 veces una por segundo oa lgo así, yo que sé, maclcein, algo rápido pa probar donde hace el bucle.
     
  19. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Sí, si ya he hecho probatinas, y el resultado es que lo hace en bucle hasta que la condición cambie. biggrin Si dejo solo el IF con apagar y encender el LED integrado, repite el bucle una y otra vez hasta el infinito, y si la entrada cambia, hace lo que haya en ELSE. Acabo de mirar en Arduino.org que existe el comando FOR y no existe un IFEND, pero como viene todo en inglés, me va a costar un huevo meterlo en el traductor y sacar una traducción "humana" :descojon: y no solo eso, sino entender la línea que viene de ejemplo. biggrin

    Sí, el programa hace lo mismo haya tensión o no, y es lo que necesito, pero que me pulse una sola vez, no 2000!! :LOL: Necesito que si un pin tiene tensión, envíe UNA ÚNICA PULSACIÓN de una tecla en concreto y si ese pin deja de tener tensión, que vuelva a enviar UNA ÚNICA PULSACIÓN de la misma tecla. Es precisamente lo que necesito, aunque lo necesito para bastantes teclas más (pero teniendo el código funcionando de una tecla, ya es "copiar y pegar"). Para otro apartado del proyecto necesito algo más complicado, como que al meter tensión haga una pulsación, al volver a meter tensión haga la misma pulsación, al quitar tensión de uno de ellos NO HAGA NADA y al quitar tensión del último, vuelva a pulsar la misma tecla. Con paciencia y saliva, sabemos el final del dicho. biggrin
     
    Última edición: 1 Jun 2017
  20. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    ... aunque no termino de ver qué hace tu código, porque tanto si está la entrada 7 en alto, como si está en bajo, realiza la misma acción (pulsar J), lo que te sucede es absolutamente lógico. Creo que tienes dos opciones: o bien estableces una variable booleana que tenga en cuenta el estado anterior del pin7, para no pulsar repetidamente la tecla, o bien utilizas una interrupción, ya que puedes hacer que la interrupción sólo salte cuando la entrada tiene un cambio de estado (de bajo a alto, o de alto a bajo). Aquí puedes ver cómo funciona: http://www.prometec.net/interrupciones/

    Por cierto, el código que metas en el procedimiento de atención a la interrupción ha de ser lo mas minimalista posible, es decir, que no debería ser largo, porque si salta la interrupción de nuevo antes de salir del procedimiento puedes tener problemas. Limitate a cambiar una variable global booleana, por ejemplo, que estés verificando en el bucle loop, y que cuando se ponga a true llame a la funcion keypress y la vuelves a poner a false. Espero haberme explicado

    No se cómo haces que la linea 7 cambie de nivel, pero ten en cuenta que si es con un botón, tendrás rebotes, que para tí son imperceptibles, pero para el procesador son pulsaciones diferentes. Para evitarlo, utiliza un condensador en paralelo con el pulsador, y en el código puedes meter algún delay(), para que no tenga tanta prisa.

    Por cierto, imagino que tampoco vendría mal un delay entre el press y el release, no vaya a ser que la electrónica que controles no sea lo suficientemente rápida como para pillar el evento.

    Si tienes problemas, pregunta ;-)

    salu2
     
    Última edición: 1 Jun 2017
    A Tizon le gusta esto.
  21. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    Si necesitas que se haga la pulsación en flanco de bajada y en flanco de subida, lo tienes a huevo con una interrupción en modo CHANGE.

    salu2
     
    A Tizon le gusta esto.
  22. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.372
    Me Gusta:
    21.166
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Buff!! Lo de los boleanos tiene pinta de ser para gente con estudios. Yo soy más de prácticas. biggrin

    El ordenador hace una función y deja de hacer la misma función pulsando únicamente la misma tecla. Empezar a hacer X función implica pulsar la letra J. Dejar de hacer esa función, implica volver a pulsar la letra J. Vamos, lo que en electricidad sería un TELERRUPTOR. ;)

    Escribo porque he encontrado un código que funciona y hace justo lo que quiero que haga. El problema es que, sí, funciona, pero no entiendo muy bien porqué funciona. :LOL: Llevo desde ayer estudiándolo y parece que lo veo, pero no termino de verlo con total claridad. Sí, lo tengo funcionando, pero no me mola, porque no he hecho el código yo, y si para otra ocasión necesito uno similar, a día de hoy no sabría hacerlo. :(

    CODE, HTML o PHP Insertado:
    const byte switchPinA = 2;
    const byte switchPinB = 3;
    const byte switchPinC = 4;
    const byte switchPinD = 5;
    const byte switchPinE = 6;
    const byte switchPinF = 7;
    const byte switchPinG = 8;
    const byte switchPinH = 9;
    const byte switchPinI = 10;
    byte oldSwitchStateA = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateB = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateC = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateD = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateE = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateF = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateG = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateH = HIGH;  // assume switch OFF because of pull-up resistor
    byte oldSwitchStateI = HIGH;  // assume switch OFF because of pull-up resistor
    const unsigned long debounceTime = 10;  // milliseconds
    #include "Keyboard.h"
    void setup ()
      {
      Serial.begin (115200);
      pinMode (switchPinA, INPUT_PULLUP);
      pinMode (switchPinB, INPUT_PULLUP);
      pinMode (switchPinC, INPUT_PULLUP);
      pinMode (switchPinD, INPUT_PULLUP);
      pinMode (switchPinE, INPUT_PULLUP);
      pinMode (switchPinF, INPUT_PULLUP);
      pinMode (switchPinG, INPUT_PULLUP);
      pinMode (switchPinH, INPUT_PULLUP);
      pinMode (switchPinI, INPUT_PULLUP);
      Keyboard.begin();
      }  // end of setup
    
    void loop ()
      {
      // see if switch C is OFF or ON
      byte switchStateC = digitalRead (switchPinC);
     
      // has it changed since last time?
      if (switchStateC != oldSwitchStateC)
        {
        oldSwitchStateC =  switchStateC;  // remember for next time
        delay (debounceTime);   // debounce
        if (switchStateC == LOW)
           {
           Serial.println ("Switch C is ON.");
           Keyboard.print(",");
           }  // end if switchStateC is LOW
        else
           {
           Serial.println ("Switch C is OFF.");
           Keyboard.print(",");
           }  // end if switchStateC is HIGH
        }  // end of state change
    
        // see if switch D is OFF or ON
      byte switchStateD = digitalRead (switchPinD);
     
      // has it changed since last time?
      if (switchStateD != oldSwitchStateD)
        {
        oldSwitchStateD =  switchStateD;  // remember for next time
        delay (debounceTime);   // debounce
        if (switchStateD == LOW)
           {
           Serial.println ("Switch D is ON.");
           Keyboard.print(".");
           }  // end if switchStateD is LOW
        else
           {
           Serial.println ("Switch D is OFF.");
           Keyboard.print(".");
           }  // end if switchStateD is HIGH
        }  // end of state change
    
       
      }  // end of loop
    Creo que el código se repite haciendo muchas veces la misma función pero para varias entradas, y por eso es más largo. Tiene dos pulsaciones especiales que tiene cada una de ellas un DELAY, que es de pulsación automática. De momento, no necesito ese DELAY así que he asignado las teclas que necesito a entradas "normales". Espero que se vea bien el código con la cita CODE. :LOL:

    EDITO: He quitado parte del código, ya que es todo igual. He dejado solo dos teclas, aunque el código sigue siendo el mismo. ;)
     
    Última edición: 2 Jun 2017
  23. Tizon

    Tizon Coordinador Coordinador Miembro del Club

    Registrado:
    13 Jul 2003
    Mensajes:
    27.055
    Me Gusta:
    19.282
    Ubicación:
    Madrid
    Modelo:
    Tracer 9GT
    Joer y yo sin ver este Hilo. @katraska sorprenderme con alguna cosita curiosa para la Rapsberry. :)
     
  24. MiguelX5

    MiguelX5 En Practicas

    Registrado:
    8 Feb 2017
    Mensajes:
    242
    Me Gusta:
    148
    He conseguido conectar los sensores pir de la alarma que venía preinstalada en casa al arduino, ahora puedo monitorizarlos todos, avisos por mails... estoy encantado con estos inventos.

    Os hace un grupo de whatsapp? Pueden salir cosas guapas entre todos.

    Salu2
     
  25. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    Efectivamente este código gestiona la pulsación de varios botones en diferentes entradas del arduino. En tu caso con una te sirve. De las dos opciones que te indicaba, éste ha escogido la primera: con la variable oldSwitchState se acuerda del estado que tenía la entrada la última vez que se modificó su estado, de modo que mientras siga en un nivel determinado, no entra en el primer bloque if, y no pulsa la tecla docenas de veces.

    El retardo de 10ms que pone no será detectable en el uso normal, y creo que lo pone para eliminar por software el rebote de los pulsadores. Así que no lo quites ;)

    salu2
     
    A Tizon le gusta esto.
  26. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20

    Jeje, con la rasp estoy empezando. Tiene 2 cosas que me obligan a un esfuerzo personal: uno es avanzar en Linux, ya que actualmente puedo hacer cosas con linux, pero si algo no funciona no sé dónde mirar, y por otro lado, comenzar a programar en python, que no es un lenguaje complejo, pero hay que ponerse con él.

    Pero todo se andará.. ;)
     
    A Tizon le gusta esto.
  27. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    ¿cómo mandas mail desde arduino? ¿usas un módulo ESP8266 o similar para conectarte a internet?

    salu2
     
    A Tizon le gusta esto.
  28. MiguelX5

    MiguelX5 En Practicas

    Registrado:
    8 Feb 2017
    Mensajes:
    242
    Me Gusta:
    148
    Correcto

    aunque también se puede hacer con una shield específica para Arduino.

    Ahora estoy muy centrado en los ESP8266 (pequeños, baratos, con wifi...), inicialmente iba a hacer todo a través de radiofrecuencia 433 y attiny, pero en cuanto descubrí los 8266... otro mundo.

    Saludos!
     
    A katraska y Tizon les gusta esto.
  29. MiguelX5

    MiguelX5 En Practicas

    Registrado:
    8 Feb 2017
    Mensajes:
    242
    Me Gusta:
    148
    Youtube es tu amigo,

    lo que no se encuentre ahí...

    Yo la tenía para emuladores inicialmente, ahora la tengo como servidor para GPS del coche, como servidor para los sensores de casa...

    Todo es dedicarle tiempo.

    Salu2
     
    A Tizon le gusta esto.
  30. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    Cierto que todo es cuestión de tiempo, pero en arduino estás poniendo cosas en producción en una semana, mientras que con la rasp hay que pensar en meses , jeje

    salu2
     

Compartir esta página