Descargar archivos ({{ 4 }})
Version 0.2.5
{{{"Hola negritos, recién me compre un Arduino UNO. Me gustaría saber si aquí hay quien me pueda ayudar a aprender a usarlo.\nPara mí es un hobby, en la universidad no estudie nada relacionado al tema, pero durante la educación media tuve un poco de contacto con la programación y la ley de ohm. Aún así eso tiene más de 10 años.\nDe verdad voy a apreciar cualquier ayuda que me puedan brindar." | renderPostMessage 102464}}}
>> | {{{"Bueno, ya logré realizar los pequeños proyectos de principiante de Youtube, esos de prender un led, apagarlo, hacer que parpadee, etc.\nAsí que quise intentar algo por mi cuenta, en este caso, una secuencia de LEDs que parpadean, que pudiera prender o apagar al presionar un pulsador.\nHasta el momento funciona, mas o menos, lo puedo prender sin ningún problema, realiza la secuencia de parpadeos sin ningún problema, es al momento de apagarlo cuando tengo el problema, y es que solo se apaga si tengo el pulsador presionado al mismo tiempo en que termina la secuencia. Me gustaría poder apagarlo en cualquier momento de la secuencia.\n¿En qué la estoy cagando?\nEste es el código\n[code]int LED1 = 2;\nint LED2 = 3;\nint LED3 = 4;\nint LED4 = 5;\nint LED5 = 6;\nconst int pulsador=7; \nbool estadoAC=false; // Estado actual del boton \nbool estadoAN=false; //Variable para guardar el estado anterior del pulsador\nbool estado_led=false;\nunsigned long tiempo_actual=0;\nunsigned long tiempo_anterior=0;\nint intervalo=60;\nbool inicio=0;\n\nvoid setup(){\n\npinMode(pulsador, INPUT);\npinMode (LED1, OUTPUT);\npinMode (LED2, OUTPUT);\npinMode (LED3, OUTPUT);\npinMode (LED4, OUTPUT);\npinMode (LED5, OUTPUT);\n\n}\n\nvoid loop(){\n \n estadoAC = digitalRead(pulsador);\n \n if (estadoAC && !estadoAN)\n estado_led = !estado_led; \n estadoAN=estadoAC; \n\n if (estado_led == true){ \n tiempo_actual = millis();\n if (tiempo_actual - tiempo_anterior >= intervalo){\n tiempo_anterior=tiempo_actual;\n inicio = ! inicio;\n }\n \n if(inicio==true)\n digitalWrite(LED1, HIGH);\n delay(60);\n digitalWrite(LED1, LOW);\n delay(60);\n digitalWrite(LED2, HIGH);\n delay(60);\n digitalWrite(LED2, LOW);\n delay(60); \n digitalWrite(LED3, HIGH);\n delay(60);\n digitalWrite(LED3, LOW);\n delay(60);\n digitalWrite(LED4, HIGH);\n delay(60);\n digitalWrite(LED4, LOW);\n delay(60);\n digitalWrite(LED5, HIGH);\n delay(60); ///////\n digitalWrite(LED1, HIGH);\n delay(60);\n digitalWrite(LED1, LOW);\n delay(60);\n digitalWrite(LED2, HIGH);\n delay(60);\n digitalWrite(LED2, LOW);\n delay(60); \n digitalWrite(LED3, HIGH);\n delay(60);\n digitalWrite(LED3, LOW);\n delay(60);\n digitalWrite(LED4, HIGH);\n delay(60);\n digitalWrite(LED5, HIGH);\n delay(60); ///// \n digitalWrite(LED1, HIGH);\n delay(60);\n digitalWrite(LED1, LOW);\n delay(60);\n digitalWrite(LED2, HIGH);\n delay(60);\n digitalWrite(LED2, LOW);\n delay(60); \n digitalWrite(LED3, HIGH);\n delay(60);\n digitalWrite(LED4, HIGH);\n delay(60);\n digitalWrite(LED5, HIGH);\n delay(60); ////// \n digitalWrite(LED1, HIGH);\n delay(60);\n digitalWrite(LED1, LOW);\n delay(60);\n digitalWrite(LED2, HIGH);\n delay(60);\n digitalWrite(LED3, HIGH);\n delay(60);\n digitalWrite(LED4, HIGH);\n delay(60);\n digitalWrite(LED5, HIGH);\n delay(60); ///////\n digitalWrite(LED1, HIGH);\n delay(60);\n digitalWrite(LED2, HIGH);\n delay(60);\n digitalWrite(LED3, HIGH);\n delay(60);\n digitalWrite(LED4, HIGH);\n delay(60);\n digitalWrite(LED5, HIGH);\n delay(60); \n digitalWrite(LED5, LOW);\n delay(60);\n digitalWrite(LED4, LOW);\n delay(60);\n digitalWrite(LED3, LOW);\n delay(60);\n digitalWrite(LED2, LOW);\n delay(60);\n digitalWrite(LED1, LOW);\n delay(60); \n \n \n }\n \n else\n digitalWrite(LED1, LOW); \n digitalWrite(LED2, LOW);\n digitalWrite(LED3, LOW); \n digitalWrite(LED4, LOW); \n digitalWrite(LED5, LOW);\n } [/code]\nAldo, gran parte del codigo es un vil copy paste, así que no lo entiendo del todo. Honestamente no lograba hacer que la señal que manda el botón, hiciera andar la secuencia." | renderPostMessage 102466}}} |
>> | {{{">>102466\n[code]\nenum {LED1 = 2, LED2, LED3, LED4, LED5;\n[/code]" | renderPostMessage 102467}}} |
>> | {{{">>102467\nGracias negrito, pero es mi segundo día haciendo esta mierda y no entiendo bien.\n¿Crees que me puedas explicar un poco más?" | renderPostMessage 102470}}} |
>> | {{{">>102470\nNo soy ese negro pero:\nDeberías aprender programación en C++ antes de crear programas para arduino, o solo terminarás copiando código de internet sin realmente entender qué hace.\nSegundo, lo que te recomendó ese negro es emplear una enumeración para evitar declarar tantos enteros (eso también se conoce como code smell o código de baja calidad). Por cierto, al negro se le olvidó cerrar el enum con '}'.\nLas enumeraciones son básicamente grupos de enteros para identificar algo en específico. Empiezan en cero, pero puedes especificar que empiecen a contar desde otro número.\nY por último, la razón por la que tu código no funciona es porque al usar la función delay() estás congelando el hilo de ejecución. Verás, las instrucciones se ejecutan línea por línea, y al usar delay() estás retardando la función loop() y con ella, tu comparador if(estadoAC) por unos segundos. Mi solución es dividir los parpadeos en \"ticks\", como se hace en programas iterativos, sin usar delay:\n[code]\nenum {LED1 = 2, LED2, LED3, LED4, LED5};\nint siguienteLed = LED1;\n\nconst int pulsador = 7;\nbool apagado = false,\n estadoAc = false,\n estadoAn = false;\n\nunsigned long tiempo = 0,\n tiempoUltimoTick = 0,\n duracionTick = 60;\n\nvoid setup() {\n // INPUT_PULLUP elimina el problema de hold vs single press\n pinMode(pulsador, INPUT_PULLUP);\n for (int i = LED1; i <= LED5; i++)\n pinMode(i, OUTPUT);\n}\n\nvoid loop()\n{\n estadoAc = digitalRead(pulsador);\n if (!estadoAc && estadoAn) { // esto es al revés\n apagado = !apagado;\n apagarLeds();\n siguienteLed = LED1;\n }\n estadoAn = digitalRead(pulsador);\n if (apagado)\n return;\n\n tiempo = millis();\n // lo siguiente solo se ejecuta cada 60 milisegundos (duracionTick)\n if (tiempo - duracionTick >= tiempoUltimoTick) {\n apagarLeds();\n digitalWrite(siguienteLed, HIGH);\n if (siguienteLed == LED5)\n siguienteLed = LED1;\n else\n siguienteLed++;\n tiempoUltimoTick = tiempo;\n }\n}\n\nvoid apagarLeds()\n{\n for (int i = LED1; i <= LED5; i++)\n digitalWrite(i, LOW);\n}\n[/code]" | renderPostMessage 102471}}} |
>> | {{{">>102471\nGracias negrito, tienes razón voy a aprender c++, al final el código que pusiste si funcionó. Pero no le entendí ni nada.\nAldo ¿c++ me serviría para usar también raspberry? En algún momento me gustaría juguetear con una de esas." | renderPostMessage 102492}}} |
>> | {{{">>102464 (OP)\nPues busca algun proyecto que te guste y sigue los pasos... no hay mucho que explicar." | renderPostMessage 102493}}} |
>> | {{{">>102492\nCon que aprendas C++ me refiero a que posiblemente primero deberías aprender C, porque, sorpresa, no son lo mismo. De hecho el código que posteé arriba es realmente solo C porque no estoy usando namespaces, genéricos, clases, nullptrs, referencias ni contenedores. Te recomiendo aprender C11 y después C++11, ya que es lo más parecido al subset de C++ que usa Arduino.\n>¿c++ me serviría para usar también raspberry?\nToma en cuenta que a diferencia de Arduino que es solo un microcontrolador, Raspberry es básicamente un computador contemporáneo pero con specs más sencillas. Para usar Raspberry primeramente deberías aprender Linux kek, ya que las placas Raspberry suelen funcionar con Raspbian (sistema operativo basado en Debian Linux)\nY si no tienes monitor, teclado y ratón de sobra para manipularlo, tendrás que aprender a usar SSH también para comunicarte con la placa desde otro PC.\nY si, puedes usar C++ con raspberry pero no es obligatorio, al ser un PC moderno puedes usar otros lenguajes, incluso python, golang, javascript o shellscript puro." | renderPostMessage 102496}}} |
>> | 164918654446.png [Google] [ImgOps] [iqdb] [SauceNAO] ( 83.06KB, 951x728, Sin título.png ) {{{">>102496\nAy mierda ;__; ya estaba aprendiendo a usar c++.\n¿Le sigo dando o mejor me voy al C11?" | renderPostMessage 102504}}} |
>> | {{{">>102504\nlo ideal es siempre aprender C primero" | renderPostMessage 102506}}} |
>> | {{{">>102504\n>Ay mierda ;__; ya estaba aprendiendo a usar c++. \nnegro mejor aprende Rust y te quitas problemas de encima." | renderPostMessage 102507}}} |
>> | {{{">>102504\nNo le hagas caso a >>102507, aprende C, que toda la programacion embebida se hace con ese lenguaje (y ensamblador).\nEl mejor consejo que puedes seguir es el de >>102496" | renderPostMessage 102508}}} |
>> | {{{">>102507\nC es compatible con C++. Puedes escribir un main.cpp en C puro y no tendrás problemas, no obstante si te recomiendo usar cout sobre printf, ya que es mejor, y también para que te familiarices con los namespaces.\n>>102507\n>rust\n>2MB para un binario de hola mundo\n>1000 crates para una librería de color en tty\n>VAS a usar let mut\n>NO puedes tener más de una referencia mutable\n>¿rust está siendo más un dolor de bolas que una solución? usa unsafe bro\nMejor andate a colgar rustranny" | renderPostMessage 102510}}} |
>> | {{{">>102510\n>>102510\n>Mejor andate a colgar rustranny\nte aseguro que conozco mejor que todos en este mugrero C++. Como para asegurarte que Rust es mucho más sano. \nTodos los argumentos que mencionaste son o mitos o no tienen fundamentos técnicos. Si no entidendes porque razón es mejor inmutable por defecto , es porque jamás has trabajado en equipo en un proyecto grande y con muchos modulos." | renderPostMessage 102518}}} |
>> | {{{">>102510\n>NO puedes tener más de una referencia mutable \nTener referencias a lo pendejo y aún empleado shared_ptr es un sintoma de que escribes código sucio." | renderPostMessage 102519}}} |
>> | {{{">>102507\nDilata" | renderPostMessage 102521}}} |
>> | {{{">>102521\n>Dilata\n<intenta programar." | renderPostMessage 102527}}} |
>> | {{{">>102506\n>>102508\n>>102510\nGracias por sus consejos negritos, por eso los quiero mucho (si homo).\nHoy tengo la mañana libre así que voy a empezar a ver C." | renderPostMessage 102532}}} |
>> | {{{">>102518\n>Filtrado por los punteros\n>Filtrado por sistemas embebidos\n>>102519\nTal vez para un brainlet rustfag que es incapaz de escribir funciones triviales y de menos de 10 líneas y en su lugar depende de crear 1000 crates para que su código sea casi decente." | renderPostMessage 102533}}} |
>> | {{{">>102533\nMis kekes, que para ti la aritmetica de apuntadores y los sistemas embebidos sea ciencia de cohetes, no significa que lo sea para todos, además eso demuestra que no sabes C++. Eres de esa gente que llama a C++. C con clases." | renderPostMessage 102534}}} |
>> | {{{">>102534\nKek pero si eres un rustranny de bajo IQ que cree que es eficiente usar basura como lifetimes y dependencias bloteadas hasta el culo. Muy probablemente fuiste filtrado por C o C++, y el hecho de que llames a algo tan básico \"ciencia de cohetes\" demuestra mi punto. Y encima tienes la caradurez de venir a confrontarme a mi que he sido el único que escribió código práctico en el hilo. Muy probablemente crees que tu si que sabes C++ porque aprendiste lo que es polimorfismo ad hoc hace unos días, pero igual C++ es brainlet tier kek\nCuando sepas lo que es cálculo lambda me vienes a debatir sobre programación, simio." | renderPostMessage 102542}}} |
>> | 164929599089.jpg [Google] [ImgOps] [iqdb] [SauceNAO] ( 182.86KB, 1399x764, laughing-bonobo....jpg ) {{{">>102542\n>hecho de que llames a algo tan básico \"ciencia de cohetes\"\nNo sabes ni leer español. Lee de nuevo, te voy a creer que sabes codificar.\n>cálculo lambda me vienes a debatir sobre programación, simio.\nAYLMAO, no sabes nada sobre computación teórica, tu argumento es tan idiota como decir \"cuando sepas usar turing complete\"." | renderPostMessage 102543}}} |
>> | 164929631749.gif [Google] [ImgOps] [iqdb] [SauceNAO] ( 1.37MB, 264x264, smug2.gif ) {{{">>102543\nEso es porque en ningún momento me referí a C++ como \"ciencia de cohetes\", ese fuiste tú proyectándote porque te dije que eres un filtrado, lo cual es cierto. Creo que el que no sabe leer es otro kek\n>AYLMAO, no sabes nada sobre computación teórica, tu argumento es tan idiota como decir \"cuando sepas usar turing complete\".\nNo podrías escribir nada relevante en un lenguaje como scheme ya que ni usar punteros de C++ sabes kek.\nTu capacidad cerebral no alcanza para eso. Deja de hacer el ridículo.\nPor cierto, buen autoretrato el que posteaste kek" | renderPostMessage 102544}}} |
>> | {{{">>102544\n> ese fuiste tú proyectándote porque te dije que eres un filtrado, lo cual es cierto.\n>punteros\n>punteros\nEs el único feature que conoces de C y C++ y es lo que se te viene a la cabeza como difícil. \nLo único dificil es conseguir buenos programadores que no sean chimpances como tu que no saben ni escribir código limpio. Eso si es complicado. \nPero sigue shitposteando código basura, con suerte encuentras un empleo de alguna empresa desesperada que contrata \"lo que esea\"." | renderPostMessage 102545}}} |