Cesar buenos días, me llamo Carlos, quería felicitarte por la forma como ejecutas la enseñanza, me parece muy pedagógico que desarrolles los vídeos sin tener un código ya realizado, no conozco ningún canal que lo haga de esta forma. Tu hablar pausado permite que los que tengan poco conocimiento capten mejor tu enseñanza y los que ya conozcan algo, pueden aumentar la velocidad del vídeo. Tú pedagogía hace que tus seguidores puedan elaborar sus propios códigos conociendo el funcionamiento individual de cada parte del hardware y del software. Hace poco encontré tu canal, muchos aplausos, la forma de tu enseñanza es única, UN ABRAZO DESDE COLOMBIA.
Simplemente genial. Mis felicitaciones por compartir tus conocimientos de manera amena. Se me hace muy interesante ver cómo va avanzando el trabajo y resolviendo Los problema que surgen. Gracias por subir este tipo de contenido.
por fin alguien que explica bien como es la programación ,el LED que pende y se apaga esta bueno para implementarlo en la iluminación del display , un abrazo Cesar te felicito!!! .
Como me divierto viendo sus videos al tiempo que aprendo con cada error y acierto. Cuando se trabaja sobre la marcha no falta que la ley de murphy nos dañe el momento, pero si estamos bien preparados para sortear los impaces al final salimos triunfantes. Felicitaciones!!!
que buen tutorial!! muchas gracias sigo cada uno de tus videos.....que bueno lo que decis "la gracia de estos videos es aprender, no demostrar lo que yo se" gracias por compartir tus conocimientos..
Visto por fin todo el vídeo. He pedido un encoder para seguir todos los pasos. Ha estado genial César. Gracias por compartir tu tiempo. Un saludo desde España.
Muy buena forma de hacerlo, yo estuve trabajando con el encoder y menús, yo aplique que si se activa el encoder usando millis para que me dé después de un tiempo el count, si lo giran de más solo cuente 1 en un lapso de 200 millis
Gracias a nuestro querido maestro trasandino logre, después de dos años, concretar un menú con encoder y dentro del menú poder seleccionar tiempos en items del mismo. Gracias Cesar y gracias también a One Button por estas alegrías. Si alguien lo necesita esta a disposición pero no se como se publica.
Hola Eduardo, gracias por tu comentario, si quieres compartir código puedes pegarlo en una app que tengo en mi página web paste.cefuve.com y nos compartes la url que resulta. Saludos!
Maravilloso video como de costumbre, me gusta la forma que explica, ya que es más amigable como si fuera una clase de universidad. Esperamos ver otro video pronto. Pd: Para aquellos que leen mi comentario ayudemos a compartir los vídeos del profesor y de esta manera pueda crecer el canal y el obtenga un ingreso extra. Saludos.
Saludos felicitaciones tienen un seguidor más de todos los cursos que he seguido este es el mejor porque vas programando y probando me gusto tu canal éxitos
exelente amigo, los codigos los vas armando a medida que avanza el video, y los problemas que tienes, son los mismos problemas que tenemos todos al implemenar algo.
valla, comparto ese suspiro al terminar la programacion y ver que funciona. del minuto 1:19:30 jejejeje. Tienes que hacer siempre eso al terminar un proyecto y debes de incluirlo en tus proyectos.
40:42 sizeof () -> devuelve el número de bytes, como cada opción ocupa 2 bytes, al dividir el número total entre lo que pesa cada opción, obtenemos el número de elementos en el array😉
Hola Antonio, gracias por comentar, el tema es que "LED ON" usa más de 2 bytes, y como se muestra en el video, el sizeof se comporta distinto si se usa para el array o para uno de sus elementos. Todavía no le encuentro la lógica definitiva, pero va encaminado en lo que tu dices. Saludos!
Muchas gracias! No solo expicas el concepto. Enseñas a pensar. Basandote en tu proyecto voy a intentar controlar un Nema17 y que se posicione en 12 lugares preestablidos. Estoy hablando de una maqueta de trenes y en particula una plataforma giratoria.
No hay de que! excelente proyecto para poner en práctica los conceptos tratados. Un desafío extra sería poder configurar la velocidad a la que gira el motor... Mucho éxito, saludos!
Buenísimo el video. Me va a servir de inspiración . Mi idea es mostrar parámetros de configuración predefinidos, que se mueva con el encoder por todo los parametrros y cuando apriete el botón , pueda entrar en edición de ese parametro y pueda cambiarlo, para mas tarde, cuando elija salir, guardar los cambios en la eprom. Si tienes algo hecho al respecto, me encantaría poder verlo, si no lo tienes y te parece una buena idea para tu canal, genial, pienso que los usuarios que no son programadores echan en falta, poder interactuar con arduino de una forma tan amigable. Gracias por compartir y te felicito por tu forma tan didáctica.
Explico lo del sizeof(matriz) da los bytes que ocupa el array en memoria. En el caso de la matriz de String, no es lo que ocupa el texto, sino los punteros a las cadenas de texto. Y el sizeof(matriz[0]) da lo que ocupa el tipo de dato que tienes almacenado (no el texto que tiene el objeto)
Muchas gracias Miguel!! para entenderlo mejor, comparto un link donde se puede ejecutar una prueba del código: www.online-cpp.com/wvHDabUkAN El operador sizeof() devuelve distintos valores, dependiendo de la estructura y tipo de dato que se quiera operar. Por eso, como tu bien dices, el String (que es un "invento" de Arduino), finalmente hace referencia al puntero de un char. Finalmente, las cadenas de texto (String) tiene una longitud de bytes establecida, y la matriz de String no es más que la suma de estas longitudes, por esto, al hacer la división entre estos valores, da como resultado la cantidad de elementos en la matriz. Saludos.
Gracias Luis por tu comentario, para el encoder tiene que ser un antirebote muy sutil, y también dejar claro, que la mejor forma de trabajar el encoder es con interrupciones. Saludos!
buenas amigo saludos buen vídeo te quería hacer una pregunta ya que tengo un problema, podría manejar el menú de una maquina digital con el encoder? ya que la maquina lleva un raton multifuncional su conector es de 5 pines la propia perilla es un pulsador es decir la perilla del ratón gira para la derecha y la izquierda el ratón no se consigue ni en el fabricante ni en ningun sitio podría con el encoder hacer esa función de ratón para manejar la computadora de la maquina y poder operar en el menú de la maquina.
Hola, no es tan simple, así como le expones pareciera ser que todo calza, pero dependerá de como esté fabricado el ratón. Tienes algún código o marca del raton, alguna hoja de datos??
@@cefuve no nada es la la computadora de una maquina digital la maquina la compre sin el ratón y el ratón no se consigue te digo el cable de conecion tiene 4 cables rojo negro blanco y amarillo savez si se puede hacer algo?
Por alguna razón, youtube borra los comentarios con URL... cefuve.com/paste/paste.php?id=113 Una aclaración, los códigos los voy pidiendo en los videos de la sección #coding, para simular los dispositivos que ahí voy presentando. Saludos!
Hola, hay que modificar este código: github.com/cefuve/For-UA-cam/blob/main/menu_encoder/menu_encoder.ino Agregar las opciones: String opciones[] = {"temperatura 15", "temperatura 20", "humedad 50", "volteo"}; Y en la función run_option(){ if(count == 0){ //realizar la acción para llegar a 15° } //seguir con las demás opciones } Tengo un video de menu en mi curso de arduino, menu con submenus. Saludos.
Hola Cesar. Como se dice en España, vas como una moto, generando videos cada día prácticamente. Este me ha gustado mucho, porque además, para los que no tienen experiencia todavía, pueden ver que las cosas cuestan hasta tenerlas puestas a punto. Nadie enseña el proceso de programación. Y quería hacerte un comentario que podrías abordarlo en otro video. Todos estos mensajes que se muestran, y que son fijos, podrían ocupar la memoria de programa en vez de la RAM del micro. Dado que la memoria de programa es mucho mayor. Hay micros que tiene 250 o 500 bytes de RAM. No es el caso de los Arduino, pero en general, creo que se podrían colocar en la memoria de programa y ya podrías enseñar cómo se accede a ella. Entiendo que debe existir un mecanismo que te permita leer de memoria de programa. Los micos de la familia del 51 lo tienen. Este debería tenerlo también . Una vez se conozca la forma de hacerlo, todas estas tablas con información fija como es el caso de los mensajes, podrían colocarse en la memoria de programa en vez de la memoria de datos y así ahorrar esta memoria que es mucho mas pequeña. Lo mismo ocurre con las direcciones de las funciones que se ejecutan. Una vez compilado el programa, ya es una información fija y por lo tanto, podría estar en la memoria de programa. Enhorabuena por tu gran trabajo. Un cordial saludo.
Hola Toni, interesante acotación, mientras te leía, buscaba en la mente la forma de hacerlo... Por ahora, solo se me ocurre establecer las opciones del menú con #define, para que queden en la memoria de programa, porque no se si la palabra clave const lo hace. De todas formas habría que investigar a profundidad, porque de seguro en algún momento dicha información debería pasar por la RAM para ser procesada (solo que no se mantendría en ella). Quedó "tarea para la casa", gracias por comentarlo!! Saludos.
@@cefuve César creo que habría que buscar la instrucción que te permita definir una tabla en memoria de programa y una función que te permita leer de ella, porque escribir sabemos que no es posible en memoria de programa desde el mismo programa. Un saludo
@@AFSMG Buenísimo Toni! no he estudiado esa función, tira buena pinta... const dataType variableName[] PROGMEM = {data0, data1, data3…}; Aunque a posterior, la manipulación parece no ser nada sencillo. Pero cuando tenemos recursos limitados, hay que tener un As bajo la manga. Gracias!
buenos dias desde España, me baje el codigo, pero a la hora de ompilar me da este mensaje de error (no matching function for call to 'LiquidCrystal_I2C::begin()' ), muchas gracias por compartir con nosotros .
Hola excelente trabajo te felicito muy bien explicado te molesto podridas pasarme la librería i2C que usaste porque probé con una que descargue pero no es la misma desde ya muchas gracias
Hola Pablo, perdón, en el video prometí dejar la librería y nunca lo hice, gracias por preguntar. La librería debería ser esta: github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
@@pablocalvo870 no hay problema, en la dirección que te di, hay un botón que dice "code", al presionarlo se abre un cuadro que al final dice "Download ZIP". De todos modos te dejo el link, saludos! github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/archive/refs/heads/master.zip
Hola muy buen canal,te sigo en varios temas!!,ahora queria hacerte una consulta a ver si podes ayudarme....necesito armar un sistema de datalogger para registrar la temperatura de un sensor ds18b20 tomando mediciones de forma continua durante 3 horas y a una cierta cadencia cada muestra...la idea que tengo es usar un encoder para entrar a un menu para seleccionar los tiempos de toma de muestra y mediante un display 1602 con interfaz i2c y un modulo micro sd ir guardando todas las muestras de temperatura que realice durante 3 horas seguidas...es posible usar un unico arduino uno para conectar todo esto para armar el proyecto?,o no me alcanzaria memoria y capacidad del procesador del arduino UNO y deberia pensar en otra plataforma,tal como un RASPBERRY PI?
Hola Sebastian, lo veo completamente viable con un solo arduino, ya que estamos hablando de elementos que no requieren grandes librerías y memoria. Saludos!
la verdad me termino perdiendo... claro... es porque no soy programador jeje. pero me encanta y voy a seguir siguiendote. por favor te pido me aconsejes un curso, libro o algo para aprender bien a programar arduino. copio pego y hago algunas modificaciones al codigo pero al ponerse complejo me pierdo. saludos y espero mas contenido. sos de los pocos que hacen buen contenido de esta materia.
Es natural, se trata de conceptos muy técnicos y un entendimiento más profundo. Sin querer desmotivarte, yo llevo 15 años en esto y aún así me falta un gran recorrido por transitar... Por eso, el mejor consejo que te puedo dar es perseverar, estudiar y por sobre todo practicar. No te puedo recomendar cursos porque no te he tomado ninguno... Intenta proponerte metas, solucionar problemas básicos e ir avanzando. Saludos!
@@cefuve Amazon compro Twitch y con la suscripcion de Amazon Prime te incluyen una suscripcion a un canal de Twitch. La mia seria para ti, me gustaria agradecerte tus videos y animarte en la medida de lo posible a que sigas haciendolos. Me gusta mucho la idea de ver como vas desarrollando la logica y resolviendo los problemas sobre la marcha. Se hace muy practico ver como vas aplicando las diferentes solciones. Muchas gracias por compartir tus conocimientos!!
Ah gracias a ti por la consideración, se valora la intención y me da ánimo para seguir, aunque hoy en día más que un tema de animo es un tema de tiempo. Espero hacer otro video pronto, saludos!
Buenas, muy buenos sus videos y explicación y las clases teóricas, practicas, lo felicito. Podría pedirle un favor dentro de sus posibilidades, estoy en proyecto que necesito que en la pantalla al inicio aparezca un menu para escoger 6 opciones con un teclado matriz de 4*1 solo con los números 1,2,3,4, lo he intentado pero ha sido fallidos mis intentos, podría por favor explicar como hacerlo, muchas gracias de antemano, saludos desde Caracas, Venezuela
Hola, para hacerlo fácil utiliza la librería keypad. www.arduino.cc/reference/en/libraries/keypad/ Aquí tienes un ejemplo para establecer un teclado personalizado: github.com/Chris--A/Keypad/blob/master/examples/CustomKeypad/CustomKeypad.ino En tu caso debería editar esto: const byte ROWS = 1; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1','2','3','4'} }; Y estableces los pines donde estas conectado el teclado: byte rowPins[ROWS] = {2}; byte colPins[COLS] = {3,4,5,6}; Incluso, si no quieres complicarte, puedes usar cada botón individual y leerlos con digitalRead() sin problemas. Saludos!
Cesar como se nota que estás en verano. He visto sólo parte del vídeo, llevamos los horarios cambiados. Hasta donde he llegado que casi 50 minutos es genial, en tu línea . Y referente a sizeof, esta es la explicación que he encontrado " realmente es una función del lenguaje C++, que proporciona cuántos bytes ocupa una variable dentro del programa. Por lo que si dividimos cuantos bytes ocupa el array entero, con respecto a un elemento del mismo, obtendremos la longitud total. Mañana termino de verlo. Un saludo desde España.
Si, donde vivo están "cayendo los patos asados"... Aún sigo sin entender la operación matemática, se que sizeof entrega la cantidad de byte, pero en el video conté 18 bytes del array y 4 del elemento, por ende las matemáticas no me dan. Estoy pensando que tiene que ver con el tipo de variable, más que con el contenido de la variable... Se me ocurrieron unas pruebas, cuando tenga tiempo las pondré en práctica. Saludos!
disculpa, soy muy nuevo en esto, solo llevo un mes programando arduino, y se me plantean muchas dudas, te he de decir que no tengo ningun conocimiento previo de programacion. te comento esto por si en alguna ocasion hago alguna pregunta obvia. gracias de nuevo
Buenas Cesar, entiendo que la division funciona porque al contar los bytes, es del tipo de dato en si de cada elemento del array. Cada string del array ocupa X bytes, entonces si medis el array completo va a ser N*X bytes, donde N es la cantidad de elementos del array y X el tamaño del tipo de dato del array. En el caso de string creo que era 8 bytes el tamaño de dato pero sino, suponiendolo asi seria entonces 4 elementos *8 bytes=32 bytes (el total) eso dividido por el tamaño de bytes del primer elemento, que es un string, osea 8 bytes siguiendo con el supuesto, te da -> 32 bytes/8 bytes=4. Y resulta que siempre se va a cumplir si el array tiene el mismo tipo de dato para cada elemento. En general seria-> N elementos * X Bytes/X bytes = N elementos* 1 = N elementos
Gracias por tu comentario @PickyTube. La "lógica" es la que tu mencionas, tampoco se cuanto byte usa la variable tipo String. En este link lo explican con detalle y ejemplos thecircuitmaker.com/arduino-array-length/ Saludos y gracias nuevamente!
@@cefuve Pero creo que es importante porque ahora tenemos muchos P I C en el mercado y muchos tipos de pantallas. Creo que a mucha gente le gustará este tema. Recomiendo pensar en ello.
Si, partiendo por que microchip compró atmel, a parte microchip es una empresa consolidada en el mercado. Voy a investigar si tienen novedades dignas de compartir. Gracias por tu comentario, saludos!
Saludos Maestro, buen video; queria aprovechar para pedirte que hagas un video para solucionar el Overflow de un timer que funciona 24/7 ¿Qué se debe hacer para evitarlo? Gracias, saludos desde Perú
@@cefuveSaludos estimado Cesar, es que tengo una duda respecto a programar multitareas con la función millis, por ejemplo, si uso un sensor de temperatura y humedad de forma permanente (todo el año), qué ocurrirá cuando lo programado con millis se desborde (overflow) cuando supere los 50 días aprox. de funcionamiento. Gracias por darte la molestia de responder.
@@rolandoalosilla6121 ah, muy bien, esa pregunta la analicé en otro comentario, te comparto la respuesta... Hagamos el ejercicio de que llegamos al desborde. 1 s = 1.000 milis 1 minuto = 60.000 milis 1 hora = 3.600.000 milis 1 día = 86.400.000 milis (unsigned long = 4.294.967.295) Por ende, en 49 días tendrémos la variable en: 4.233.600.000 En 49 días y 17 horas estará en: 4.294.800.000 En 49 días, 17 horas y 2 minutos estará en: 4.294.920.000 En 49 días, 17 horas, 2 minutos y 47 segundos estará en: 4.294.967.000 Entonces, analicemos el código en el borde de la variable... if(millis() >= tiempo_actual + 1000){ tiempo_actual = millis(); } - En 49 días, 17 horas, 2 minutos y 47 segundos if(millis() >= tiempo_actual + 1000){ tiempo_actual = 4.294.967.000; } - En 49 días, 17 horas, 2 minutos y 48 segundos if(millis() >= 4.294.967.000 + 1000){ //la suma desborda a tiempo_actual //quedando la condición (millis() >= 705) //y como millis también se desborda, //después entrará nuevamente al if tiempo_actual = 705; } En conclusión, hay una elevada probabilidad de que siga funcionando...
Recuerda el desbordamiento de millis, se restan los tiempos y se compara la diferencia con el tiempo que se desea que transcurra, tu lo resolviste y yo lo aplico
Profe tengo un código para probar ecus de autos es de un curso que compre y viene con botones pero es muy extenso y no he podido utilizarlo con 3l encoder
Hola a tod@s, Me gustaría mostrar el código en una pantalla LCD o en el "monitor serial" de los datos de un mando a distancia qué se reciben en un módulo de RF, alguien hizo algo parecido? Ya sea con un ARDUINO o con un PIC Gracias de antemano.
hola, como oros videos !! muy buenos!!... pero en este caso tengo instalada la libreria LiquidCrystal_I2C Pero me tira este PROBLEMA ....no matching function for call to 'LiquidCrystal_I2C::begin()' ... COMO QUE NO LA LEE !! COMO LO PUEDO SOLUCIONAR DESCARGUE OTRAS LIBRERIAS, PERO NADA . si porfavor me podrias ayudar con esto, Te lo agradecería... DE TODAS FORMAS SIGUE ASI GENIO!!!!
Hola Gabriel, descargaste la librería desde el link en la descripción?? github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library Si es así, quizás tengas otra con el mismo nombre, que debas borrar. Saludos!
Cesar buenos días, me llamo Carlos, quería felicitarte por la forma como ejecutas la enseñanza, me parece muy pedagógico que desarrolles los vídeos sin tener un código ya realizado, no conozco ningún canal que lo haga de esta forma. Tu hablar pausado permite que los que tengan poco conocimiento capten mejor tu enseñanza y los que ya conozcan algo, pueden aumentar la velocidad del vídeo. Tú pedagogía hace que tus seguidores puedan elaborar sus propios códigos conociendo el funcionamiento individual de cada parte del hardware y del software. Hace poco encontré tu canal, muchos aplausos, la forma de tu enseñanza es única, UN ABRAZO DESDE COLOMBIA.
Muchas gracias Carlos. Gracias por darte el tiempo de reconocer y avalar mi método, un gran saludo!
Simplemente genial.
Mis felicitaciones por compartir tus conocimientos de manera amena.
Se me hace muy interesante ver cómo va avanzando el trabajo y resolviendo
Los problema que surgen. Gracias por subir este tipo de contenido.
Gracias por comentarlo Francisco, saludos!
por fin alguien que explica bien como es la programación ,el LED que pende y se apaga esta bueno para implementarlo en la iluminación del display , un abrazo Cesar te felicito!!! .
Muchas gracias Pablo, saludos!
Como me divierto viendo sus videos al tiempo que aprendo con cada error y acierto.
Cuando se trabaja sobre la marcha no falta que la ley de murphy nos dañe el momento, pero si estamos bien preparados para sortear los impaces al final salimos triunfantes.
Felicitaciones!!!
Muchas gracias! por eso, para estar bien preparados hay que estudiar y practicar practicar practicar. saludos!
muy bueno..!! saludos desde misiones argentina..!!! un nuevo seguidor somos por estos lugares...!!
que buen tutorial!! muchas gracias sigo cada uno de tus videos.....que bueno lo que decis "la gracia de estos videos es aprender, no demostrar lo que yo se" gracias por compartir tus conocimientos..
Muchas gracias Rocío, saludos!
Visto por fin todo el vídeo. He pedido un encoder para seguir todos los pasos. Ha estado genial César. Gracias por compartir tu tiempo. Un saludo desde España.
Genial, me avisas como te va programandolo, saludos!
Wow amigo muchísimas gracias tu explicación es muy clara 👍👍👍👍👍👍👍👍
hola Cesar, tantos años sin verte, muy buena tu explicacion!!!
Wena compadre, muchas gracias! Saludos.
Excelente explicación , muy detallada ,lo felicito por su magnifico trabajo-Muchas gracias por compartir
Se aprende bastante con tus vídeos, no me canso de verlos.
Genial!! gracias por verlos.
De lo mejor que vi ...Felicitaciones !!!!!!!!
Muy buena forma de hacerlo, yo estuve trabajando con el encoder y menús, yo aplique que si se activa el encoder usando millis para que me dé después de un tiempo el count, si lo giran de más solo cuente 1 en un lapso de 200 millis
Hola Eduardo, buena idea para controlar el desborde de pulsos rápidos. Saludos!
Gracias a nuestro querido maestro trasandino logre, después de dos años, concretar un menú con encoder y dentro del menú poder seleccionar tiempos en items del mismo. Gracias Cesar y gracias también a One Button por estas alegrías. Si alguien lo necesita esta a disposición pero no se como se publica.
Hola Eduardo, gracias por tu comentario, si quieres compartir código puedes pegarlo en una app que tengo en mi página web paste.cefuve.com y nos compartes la url que resulta. Saludos!
Maravilloso video como de costumbre, me gusta la forma que explica, ya que es más amigable como si fuera una clase de universidad.
Esperamos ver otro video pronto.
Pd: Para aquellos que leen mi comentario ayudemos a compartir los vídeos del profesor y de esta manera pueda crecer el canal y el obtenga un ingreso extra.
Saludos.
Muchas gracias Alex, espero seguir teniendo el tiempo para seguir aportando. Saludos!
Capoooo !!!!! Sos un fenómeno !!!! Estupendo !!! Saludos desde el otro lado de la Cordillera !!!!
Muchas gracias Eduardo, un gran saludo a los hermanos trasandinos!!
Un seguidor más saludos desde Perú
Gracias de corazón Cesar.
Tengo que darte las gracias porque aprendí un montón y sigo aprendiendo con tus vídeos. Gracias sos un buen maestro 👍
Es un placer, gracias a ti por ver mis videos.
Gracias hermanoo! Por compartir tus conocimientos.
Aquí comenzando aprender contigo! excelente clase!
Saludos felicitaciones tienen un seguidor más de todos los cursos que he seguido este es el mejor porque vas programando y probando me gusto tu canal éxitos
Hola brother, soy de ARG. vivo en SP Brasil, te deseo muchos sucesos! Abrazo!
Muchas gracias, saludos!
MA SEI BRAVISSIMO!!! grazie! un saluto dall'italia
Felicitaciones por tu esfuerzo y pasión, veo todos tus videos y los apoyo. Sigue haciéndolo!!! 💯
Muchas gracias Juan, saludos!
Saludo desde Venezuela amigo
gracias por la explicación.
Tremendo trabajo! Felicitaciones
exelente amigo, los codigos los vas armando a medida que avanza el video, y los problemas que tienes, son los mismos problemas que tenemos todos al implemenar algo.
geniales tus videos!!! muchas gracias por compartirlos. Son muy amenos y comprensibles. Muy bien muyyy bien!!!
César, que buenos videos, gracias por sus aportes y por el deseo de ensañar.
Muchas gracias mi amigo.
Saludos muy buenos vídeos gracias por tomarte el tiempo en explicar y hacer estos curso felicitaciones ....
Un saludo desde colombia
Muy buen video bro ya han sido aclaradas todas mis dudas ahora boy a meterle mano al proyecto muchas gracias por tu gran aporte saludos
Muy bien Yasiel, me avisas si tienes alguna duda. Que te quede excelente el proyecto!
Muy buen video
valla, comparto ese suspiro al terminar la programacion y ver que funciona. del minuto 1:19:30
jejejeje. Tienes que hacer siempre eso al terminar un proyecto y debes de incluirlo en tus proyectos.
😮💨😮💨😮💨😮💨😮💨
Muy buen video.
40:42 sizeof () -> devuelve el número de bytes, como cada opción ocupa 2 bytes, al dividir el número total entre lo que pesa cada opción, obtenemos el número de elementos en el array😉
Hola Antonio, gracias por comentar, el tema es que "LED ON" usa más de 2 bytes, y como se muestra en el video, el sizeof se comporta distinto si se usa para el array o para uno de sus elementos. Todavía no le encuentro la lógica definitiva, pero va encaminado en lo que tu dices.
Saludos!
Complimenti, bravo e simpatico!
muy buen video! enseñas super bacán! :)
Muchas gracias Gabriel, saludos!
Muy buen video maestro
Muchas gracias!
No solo expicas el concepto. Enseñas a pensar.
Basandote en tu proyecto voy a intentar controlar un Nema17 y que se posicione en 12 lugares preestablidos. Estoy hablando de una maqueta de trenes y en particula una plataforma giratoria.
No hay de que! excelente proyecto para poner en práctica los conceptos tratados. Un desafío extra sería poder configurar la velocidad a la que gira el motor...
Mucho éxito, saludos!
Buenísimo el video. Me va a servir de inspiración . Mi idea es mostrar parámetros de configuración predefinidos, que se mueva con el encoder por todo los parametrros y cuando apriete el botón , pueda entrar en edición de ese parametro y pueda cambiarlo, para mas tarde, cuando elija salir, guardar los cambios en la eprom.
Si tienes algo hecho al respecto, me encantaría poder verlo, si no lo tienes y te parece una buena idea para tu canal, genial, pienso que los usuarios que no son programadores echan en falta, poder interactuar con arduino de una forma tan amigable. Gracias por compartir y te felicito por tu forma tan didáctica.
Gracias por tu comentario Manuel... Si es buena idea, ya que es ampliamente usado para menús, lo tendré en consideración para un video.
Saludos!
GRACIAS MIL GRACIAS
wena compadre buen aporte
Explico lo del sizeof(matriz) da los bytes que ocupa el array en memoria. En el caso de la matriz de String, no es lo que ocupa el texto, sino los punteros a las cadenas de texto. Y el sizeof(matriz[0]) da lo que ocupa el tipo de dato que tienes almacenado (no el texto que tiene el objeto)
Muchas gracias Miguel!! para entenderlo mejor, comparto un link donde se puede ejecutar una prueba del código:
www.online-cpp.com/wvHDabUkAN
El operador sizeof() devuelve distintos valores, dependiendo de la estructura y tipo de dato que se quiera operar. Por eso, como tu bien dices, el String (que es un "invento" de Arduino), finalmente hace referencia al puntero de un char.
Finalmente, las cadenas de texto (String) tiene una longitud de bytes establecida, y la matriz de String no es más que la suma de estas longitudes, por esto, al hacer la división entre estos valores, da como resultado la cantidad de elementos en la matriz.
Saludos.
Prezado senhor, agradeço pelo que ensinou, quando ministrará o curso sobre comunicação de dois Arduinos com NLF24L01?
Obrigado pelo seu comentário, espero fazer algo com esses módulos este ano.
no lo he visto pero buen video
jajaja gracias por la confianza... Después me dices si sigues pensando lo mismo :)
Me gusta tu forma de trabajar, por cierto para depurar el encoder necesitas el antirrebote, bouncer, por eso te salta y se vuelve inestable
Gracias Luis por tu comentario, para el encoder tiene que ser un antirebote muy sutil, y también dejar claro, que la mejor forma de trabajar el encoder es con interrupciones.
Saludos!
Cuando un video explicando la funcion map()
anotado...
buenas amigo saludos buen vídeo te quería hacer una pregunta ya que tengo un problema, podría manejar el menú de una maquina digital con el encoder? ya que la maquina lleva un raton multifuncional su conector es de 5 pines la propia perilla es un pulsador es decir la perilla del ratón gira para la derecha y la izquierda el ratón no se consigue ni en el fabricante ni en ningun sitio podría con el encoder hacer esa función de ratón para manejar la computadora de la maquina y poder operar en el menú de la maquina.
Hola, no es tan simple, así como le expones pareciera ser que todo calza, pero dependerá de como esté fabricado el ratón. Tienes algún código o marca del raton, alguna hoja de datos??
@@cefuve no nada es la la computadora de una maquina digital la maquina la compre sin el ratón y el ratón no se consigue
te digo el cable de conecion tiene 4 cables rojo negro blanco y amarillo savez si se puede hacer algo?
Con tan poca información, no se puede hacer nada...
Saludos, En qué parte se envía el código de simulación de electrodomésticos
Hola Ángel, se pega en paste.cefuve.com y me compartes la url que te da.
Saludos!
Por alguna razón, youtube borra los comentarios con URL...
cefuve.com/paste/paste.php?id=113
Una aclaración, los códigos los voy pidiendo en los videos de la sección #coding, para simular los dispositivos que ahí voy presentando.
Saludos!
@@cefuve ya veo muy buena sección ahora mismo la seguire saludos
Como seria un menu para una incubadora con "temperatura" humedad volteo y poder modificarlo? Es decir modificar grados humedad etc
Hola, hay que modificar este código:
github.com/cefuve/For-UA-cam/blob/main/menu_encoder/menu_encoder.ino
Agregar las opciones:
String opciones[] = {"temperatura 15", "temperatura 20", "humedad 50", "volteo"};
Y en la función run_option(){
if(count == 0){
//realizar la acción para llegar a 15°
}
//seguir con las demás opciones
}
Tengo un video de menu en mi curso de arduino, menu con submenus.
Saludos.
No quiero decir eso es decir que suba o baje 0.1 grados según gire yo el encoder. Pero me veré el vídeo de los submenos
FELICITACIONES QUE BUENOS VIDEOS, UNO PENSARIA QUE SON MUY LARGOS JAJAJA PERO EN REALIDAD QUE ASTA FALTA TIEMPO ..
Gracias!!
Hola Cesar.
Como se dice en España, vas como una moto, generando videos cada día prácticamente. Este me ha gustado mucho, porque además, para los que no tienen experiencia todavía, pueden ver que las cosas cuestan hasta tenerlas puestas a punto. Nadie enseña el proceso de programación. Y quería hacerte un comentario que podrías abordarlo en otro video. Todos estos mensajes que se muestran, y que son fijos, podrían ocupar la memoria de programa en vez de la RAM del micro. Dado que la memoria de programa es mucho mayor. Hay micros que tiene 250 o 500 bytes de RAM.
No es el caso de los Arduino, pero en general, creo que se podrían colocar en la memoria de programa y ya podrías enseñar cómo se accede a ella. Entiendo que debe existir un mecanismo que te permita leer de memoria de programa. Los micos de la familia del 51 lo tienen. Este debería tenerlo también . Una vez se conozca la forma de hacerlo, todas estas tablas con información fija como es el caso de los mensajes, podrían colocarse en la memoria de programa en vez de la memoria de datos y así ahorrar esta memoria que es mucho mas pequeña. Lo mismo ocurre con las direcciones de las funciones que se ejecutan. Una vez compilado el programa, ya es una información fija y por lo tanto, podría estar en la memoria de programa. Enhorabuena por tu gran trabajo. Un cordial saludo.
Hola Toni, interesante acotación, mientras te leía, buscaba en la mente la forma de hacerlo... Por ahora, solo se me ocurre establecer las opciones del menú con #define, para que queden en la memoria de programa, porque no se si la palabra clave const lo hace.
De todas formas habría que investigar a profundidad, porque de seguro en algún momento dicha información debería pasar por la RAM para ser procesada (solo que no se mantendría en ella).
Quedó "tarea para la casa", gracias por comentarlo!! Saludos.
@@cefuve César creo que habría que buscar la instrucción que te permita definir una tabla en memoria de programa y una función que te permita leer de ella, porque escribir sabemos que no es posible en memoria de programa desde el mismo programa. Un saludo
@@cefuve PROGMEM
Por ahí van los tiros
@@AFSMG Buenísimo Toni! no he estudiado esa función, tira buena pinta...
const dataType variableName[] PROGMEM = {data0, data1, data3…};
Aunque a posterior, la manipulación parece no ser nada sencillo. Pero cuando tenemos recursos limitados, hay que tener un As bajo la manga. Gracias!
buenos dias desde España, me baje el codigo, pero a la hora de ompilar me da este mensaje de error (no matching function for call to 'LiquidCrystal_I2C::begin()' ), muchas gracias por compartir con nosotros .
Hola, seguramente estas usando otra librería, no recuerdo si en el video dije el autor de la librería...
Hola excelente trabajo te felicito muy bien explicado
te molesto podridas pasarme la librería i2C que usaste porque probé con una que descargue pero no es la misma desde ya muchas gracias
Hola Pablo, perdón, en el video prometí dejar la librería y nunca lo hice, gracias por preguntar.
La librería debería ser esta:
github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
Mil disculpas pero no pude agregar desde la dirección que me paso la librería seria mucha molestia si me la puede pasar por zip
@@pablocalvo870 no hay problema, en la dirección que te di, hay un botón que dice "code", al presionarlo se abre un cuadro que al final dice "Download ZIP".
De todos modos te dejo el link, saludos!
github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/archive/refs/heads/master.zip
@@cefuve muchas gracias ahora lo encontré disculpa por molestar muy amable
Hola muy buen canal,te sigo en varios temas!!,ahora queria hacerte una consulta a ver si podes ayudarme....necesito armar un sistema de datalogger para registrar la temperatura de un sensor ds18b20 tomando mediciones de forma continua durante 3 horas y a una cierta cadencia cada muestra...la idea que tengo es usar un encoder para entrar a un menu para seleccionar los tiempos de toma de muestra y mediante un display 1602 con interfaz i2c y un modulo micro sd ir guardando todas las muestras de temperatura que realice durante 3 horas seguidas...es posible usar un unico arduino uno para conectar todo esto para armar el proyecto?,o no me alcanzaria memoria y capacidad del procesador del arduino UNO y deberia pensar en otra plataforma,tal como un RASPBERRY PI?
Hola Sebastian, lo veo completamente viable con un solo arduino, ya que estamos hablando de elementos que no requieren grandes librerías y memoria. Saludos!
como puedo comunicarme contigo?
En la descripción de este video están los link.
la verdad me termino perdiendo... claro... es porque no soy programador jeje. pero me encanta y voy a seguir siguiendote.
por favor te pido me aconsejes un curso, libro o algo para aprender bien a programar arduino.
copio pego y hago algunas modificaciones al codigo pero al ponerse complejo me pierdo.
saludos y espero mas contenido. sos de los pocos que hacen buen contenido de esta materia.
Es natural, se trata de conceptos muy técnicos y un entendimiento más profundo. Sin querer desmotivarte, yo llevo 15 años en esto y aún así me falta un gran recorrido por transitar... Por eso, el mejor consejo que te puedo dar es perseverar, estudiar y por sobre todo practicar.
No te puedo recomendar cursos porque no te he tomado ninguno... Intenta proponerte metas, solucionar problemas básicos e ir avanzando.
Saludos!
@@cefuve gracias. tomo tu consejo. saludos.
tienes twitch para mandarte mi Prime?
Hola, no tengo twitch, que es prime?
@@cefuve Amazon compro Twitch y con la suscripcion de Amazon Prime te incluyen una suscripcion a un canal de Twitch. La mia seria para ti, me gustaria agradecerte tus videos y animarte en la medida de lo posible a que sigas haciendolos. Me gusta mucho la idea de ver como vas desarrollando la logica y resolviendo los problemas sobre la marcha. Se hace muy practico ver como vas aplicando las diferentes solciones. Muchas gracias por compartir tus conocimientos!!
Ah gracias a ti por la consideración, se valora la intención y me da ánimo para seguir, aunque hoy en día más que un tema de animo es un tema de tiempo. Espero hacer otro video pronto, saludos!
Buenas, muy buenos sus videos y explicación y las clases teóricas, practicas, lo felicito. Podría pedirle un favor dentro de sus posibilidades, estoy en proyecto que necesito que en la pantalla al inicio aparezca un menu para escoger 6 opciones con un teclado matriz de 4*1 solo con los números 1,2,3,4, lo he intentado pero ha sido fallidos mis intentos, podría por favor explicar como hacerlo, muchas gracias de antemano, saludos desde Caracas, Venezuela
Hola, para hacerlo fácil utiliza la librería keypad.
www.arduino.cc/reference/en/libraries/keypad/
Aquí tienes un ejemplo para establecer un teclado personalizado:
github.com/Chris--A/Keypad/blob/master/examples/CustomKeypad/CustomKeypad.ino
En tu caso debería editar esto:
const byte ROWS = 1;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','4'}
};
Y estableces los pines donde estas conectado el teclado:
byte rowPins[ROWS] = {2};
byte colPins[COLS] = {3,4,5,6};
Incluso, si no quieres complicarte, puedes usar cada botón individual y leerlos con digitalRead() sin problemas.
Saludos!
Cesar como se nota que estás en verano. He visto sólo parte del vídeo, llevamos los horarios cambiados. Hasta donde he llegado que casi 50 minutos es genial, en tu línea . Y referente a sizeof, esta es la explicación que he encontrado " realmente es una función del lenguaje C++, que proporciona cuántos bytes ocupa una variable dentro del programa.
Por lo que si dividimos cuantos bytes ocupa el array entero, con respecto a un elemento del mismo, obtendremos la longitud total.
Mañana termino de verlo. Un saludo desde España.
Si, donde vivo están "cayendo los patos asados"... Aún sigo sin entender la operación matemática, se que sizeof entrega la cantidad de byte, pero en el video conté 18 bytes del array y 4 del elemento, por ende las matemáticas no me dan.
Estoy pensando que tiene que ver con el tipo de variable, más que con el contenido de la variable... Se me ocurrieron unas pruebas, cuando tenga tiempo las pondré en práctica.
Saludos!
Yo vi funcion de un encoder y interrupciones , digiltalWrite(x,x)==digitaWrite(x,x)? Cont--: cont++; , será q funciona??
Esa expresión como tal, no parece tener sentido...
Lo que si se puede hacer en el lenguaje C es acortar el if:
digitalRead(pin) ? count++ : count--;
Es un operador condicional terrario ,
disculpa, soy muy nuevo en esto, solo llevo un mes programando arduino, y se me plantean muchas dudas, te he de decir que no tengo ningun conocimiento previo de programacion. te comento esto por si en alguna ocasion hago alguna pregunta obvia. gracias de nuevo
Hola, no hay problema, ya viste mi curso?
Buenas Cesar, entiendo que la division funciona porque al contar los bytes, es del tipo de dato en si de cada elemento del array. Cada string del array ocupa X bytes, entonces si medis el array completo va a ser N*X bytes, donde N es la cantidad de elementos del array y X el tamaño del tipo de dato del array. En el caso de string creo que era 8 bytes el tamaño de dato pero sino, suponiendolo asi seria entonces 4 elementos *8 bytes=32 bytes (el total) eso dividido por el tamaño de bytes del primer elemento, que es un string, osea 8 bytes siguiendo con el supuesto, te da -> 32 bytes/8 bytes=4. Y resulta que siempre se va a cumplir si el array tiene el mismo tipo de dato para cada elemento.
En general seria-> N elementos * X Bytes/X bytes = N elementos* 1 = N elementos
aha, lo mas importante falto: Geniales tus videos! Un abrazo
Gracias por tu comentario @PickyTube. La "lógica" es la que tu mencionas, tampoco se cuanto byte usa la variable tipo String. En este link lo explican con detalle y ejemplos thecircuitmaker.com/arduino-array-length/
Saludos y gracias nuevamente!
Se le podría poner nombre al 0,1,2,3?
¿Puedes hacer un video de este tipo con P I C?
uuff hace mil años no programo PIC, aunque tengo el programador y unos cuantos chip...
@@cefuve Pero creo que es importante porque ahora tenemos muchos P I C en el mercado y muchos tipos de pantallas. Creo que a mucha gente le gustará este tema. Recomiendo pensar en ello.
Si, partiendo por que microchip compró atmel, a parte microchip es una empresa consolidada en el mercado. Voy a investigar si tienen novedades dignas de compartir. Gracias por tu comentario, saludos!
@@cefuve Muy grato.
Saludos Maestro, buen video; queria aprovechar para pedirte que hagas un video para solucionar el Overflow de un timer que funciona 24/7 ¿Qué se debe hacer para evitarlo? Gracias, saludos desde Perú
Hola Rolando, no entiendo a que te refieres con el overflow de un timer funcionando 24/7, me podrías dar el contexto? cual es el problema específico?
@@cefuveSaludos estimado Cesar, es que tengo una duda respecto a programar multitareas con la función millis, por ejemplo, si uso un sensor de temperatura y humedad de forma permanente (todo el año), qué ocurrirá cuando lo programado con millis se desborde (overflow) cuando supere los 50 días aprox. de funcionamiento. Gracias por darte la molestia de responder.
@@rolandoalosilla6121 ah, muy bien, esa pregunta la analicé en otro comentario, te comparto la respuesta...
Hagamos el ejercicio de que llegamos al desborde.
1 s = 1.000 milis
1 minuto = 60.000 milis
1 hora = 3.600.000 milis
1 día = 86.400.000 milis
(unsigned long = 4.294.967.295)
Por ende, en 49 días tendrémos la variable en: 4.233.600.000
En 49 días y 17 horas estará en: 4.294.800.000
En 49 días, 17 horas y 2 minutos estará en: 4.294.920.000
En 49 días, 17 horas, 2 minutos y 47 segundos estará en: 4.294.967.000
Entonces, analicemos el código en el borde de la variable...
if(millis() >= tiempo_actual + 1000){
tiempo_actual = millis();
}
- En 49 días, 17 horas, 2 minutos y 47 segundos
if(millis() >= tiempo_actual + 1000){
tiempo_actual = 4.294.967.000;
}
- En 49 días, 17 horas, 2 minutos y 48 segundos
if(millis() >= 4.294.967.000 + 1000){ //la suma desborda a tiempo_actual
//quedando la condición (millis() >= 705)
//y como millis también se desborda,
//después entrará nuevamente al if
tiempo_actual = 705;
}
En conclusión, hay una elevada probabilidad de que siga funcionando...
@@cefuve Mil gracias estimado Cesar, lo probaré. y disculpa el exceso de confianza pero si haces un video creo que muchos te lo agradeceremos.
Necesito ayuda con el encoder
Hola, ayuda en que, específicamente?
20:50 jajajaja
🦫
🐿 este si, parece jajaja
Recuerda el desbordamiento de millis, se restan los tiempos y se compara la diferencia con el tiempo que se desea que transcurra, tu lo resolviste y yo lo aplico
Recordatorio mental, gracias 👌🏻
Bonjour du Québec
Amigo me ayudas con un proyecto
Hola, de que se trata? y que tipo de ayuda necesitas especificamente?
Profe tengo un código para probar ecus de autos es de un curso que compre y viene con botones pero es muy extenso y no he podido utilizarlo con 3l encoder
Si gustas me das tu número de teléfono y te lo envio por whatsapp
@@edwinmeneses7552 O sea, quieres modificar el código, para reemplazar los botones por un encoder? y en que topas?
Si sr
Algún encoder más pequeño, que sea de montaje superficial con misma función
Hola, busca por lo siguiente:
- encoder EC11 smd
- mouse encoder 5h smd
- EC10NH encoder
- CEN652812A01 encoder
- mini rotary encoder
@@cefuve
Gracias por responder🙏🏻
un año después retomo el proyecto 😅
Hola a tod@s,
Me gustaría mostrar el código en una pantalla LCD o en el "monitor serial" de los datos de un mando a distancia qué se reciben en un módulo de RF, alguien hizo algo parecido?
Ya sea con un ARDUINO o con un PIC
Gracias de antemano.
hola, como oros videos !! muy buenos!!... pero en este caso tengo instalada la libreria LiquidCrystal_I2C Pero me tira este PROBLEMA ....no matching function for call to 'LiquidCrystal_I2C::begin()' ... COMO QUE NO LA LEE !! COMO LO PUEDO SOLUCIONAR DESCARGUE OTRAS LIBRERIAS, PERO NADA . si porfavor me podrias ayudar con esto, Te lo agradecería... DE TODAS FORMAS SIGUE ASI GENIO!!!!
Hola Gabriel, descargaste la librería desde el link en la descripción??
github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
Si es así, quizás tengas otra con el mismo nombre, que debas borrar.
Saludos!
@@cefuve Gracias por la atención, lo voy a probar 👌👍
@@cefuve esta libreria ya no está disponible
This repository has been archived by the owner. It is now read-only.
@@manuelembuena989 Hola, la librería está disponible para descargarla y usarla.
Solo que el programador ya no hará cambios en la librería...
Saludos!
mi compilador no acepta: lcd.beguin(); sí el: lcd.init();
Hola Eduardo, seguramente estas usando la librería de otro programador.