Тёмный

Multitasking usando millis() + Práctica - Arduino 

Cefuve
Подписаться 17 тыс.
Просмотров 33 тыс.
50% 1

** Error en la lógica del millis() **
Hola! Finalmente llegó el momento de programar multitarea con la función millis()... Se me salió un poco de control el video (2 hrs), peeeeroo, tienen el proceso completo para que puedas entender como se crean los códigos, no solo copiar y pegar.
A parte quise incluir una práctica bien jugosa, para que pudieran ver varios aspectos de la programación (sobre todo de las dificultades).
Timeline:
00:00 Presentación
01:25 millis() y micros()
13:07 Ejemplo millis()
21:36 Ejemplo micros()
25:51 Multitarea millis()
35:49 - Reloj digital
49:12 - Parpadeo LED
52:52 - Lectura botón
01:10:48 Establecer rangos horarios (intento fallido)
01:42:07 Establecer rangos horarios (intento correcto)
02:00:00 Prueba final!
02:02:34 Comentarios
El código final lo encuentras en el siguiente link:
** Problema de lógica corregido en el código **
github.com/cefuve/For-RU-vid...
#########
¿Dónde encontrarme en internet?
Webpage: www.cefuve.com​
RU-vid: / cefuve​​
Instagram: / cefuve_electronics
Facebook: / cefuve.electronics
Donaciones:
www.paypal.com/paypalme/cefuve
#########
Thank for music to Joakim Karud, you can find him on:
- Spotify: open.spotify.com/artist/0iAOX...
- iTunes: / joakim-karud
- Bandcamp: joakimkarud.bandcamp.com/​​
- Soundcloud: / joakimkarud

Опубликовано:

 

23 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 216   
@arduindustial2838
@arduindustial2838 3 года назад
En el caso de hacer con tiempo un anti rebote también tendría que usar millis no? Si usaría delay se pararía la función hora y la función led , no? Es en el minuto 1:10:00 del video
@cefuve
@cefuve 3 года назад
Correcto, en este caso el delay() mataría nuestras otras funciones... Para un antirebote agregaría un tiempoactual3 y una variable auxiliar "rebotando" para saber en que momento está haciendo ruido el botón. Algo así: int lecturaboton = digitalRead(6); if(lecturaboton != lecturaboton_old){ if(lecturaboton == 0 && rebotando == false){ int lecturaled13 = digitalRead(13); digitalWrite(13, !lecturaled13); rebotando = true; } } lecturaboton_old = lecturaboton; if(rebotando == true){ if(millis() >= tiempoactual3 + 200){ tiempoactual3 = millis(); rebotando = false; } } Espero se entienda, me avisas cualquier cosa. Saludos!
@arduindustial2838
@arduindustial2838 3 года назад
@@cefuve gracias voy viendo por partes y practicando avancé bastante desde que arranque lo que más me gusta de los videos es que se ven los errores que uno seguro va a cometer , mil gracias por tanto , una gran vocación de profesor
@cefuve
@cefuve 3 года назад
Hola Anibal, ya encontré el problema... Al parecer Arduino se "pierde" cuando trabaja con variables de distinto tipo, porque la hora la estoy trabajando como int, lo estoy multiplicando por un int, pero el resultado es en long. Por eso hay que avisarle que trabajaremos con long, para ello basta con agregar la letra L después del número para asignarlo como long. Queda algo así: mitiempo = hour*10000L + minute*100 + second; Saludos.
@arduindustial2838
@arduindustial2838 3 года назад
@@cefuve sabes que eso estuve pensando 💭 todo tiene que ser unsignedlong para que no allá conflicto hay un video de un horno eléctrico con un termopar que le pasaba algo similar , que grande profe !!!después te paso el enlace es breve pero es el mismo caso yo lo hice aller pero me daba el mismo error
@cefuve
@cefuve 3 года назад
@@arduindustial2838 Es un desborde de memoria, al multiplicar un int con un int se espera un int, pero en este caso da un long... Solo basta con cambiar la primera multiplicación (de las horas) porque esa se desborda, las demás funcionan impeque.
@jhonhanvillamolina8268
@jhonhanvillamolina8268 Год назад
Hola,un saludo desde España .primero felicitarte por tan buen aporte que haces a personas como yo que siendo aficionados en el tema de la programación nos cuesta demasiado encontrar personas como tú,que entregan su conocimiento de manera tan didáctica y profesional. Llevo muchos meses mirando videeos de uno y otro lado,pero ninguno como tú,.eres el mejor.por eso quiero darte las GRACIAS así en mayúsculas ,eres un krack.un abrazo
@cefuve
@cefuve Год назад
Hola Jhon, muchas gracias por tu comentario, ya que así puedo saber si lo estoy haciendo bien o mal y seguir con esta misión, llevar la electrónica a la mayor cantidad de gente posible. Saludos!
@javiguitarracerezo3566
@javiguitarracerezo3566 3 года назад
Como siempre,Un !! Lujo de explicación !! Muchas gracias por compartir tus conocimientos.
@cefuve
@cefuve 3 года назад
Muchas gracias! saludos.
@leonardodanieljassomedina3898
@leonardodanieljassomedina3898 3 года назад
Muy buen video, me ha gustado mucho la dinamica de tu video y la alegría con la que lo haces. Aparte, muy buena explicación de los temas, los ejemplos que incluiste. Sin duda un canal que recomendaría.
@cefuve
@cefuve 3 года назад
Muchas gracias Leonardo, saludos!
@edgarch_333
@edgarch_333 3 года назад
Ufff este vídeo debe valer oro, me faltan los tres últimos videos de principiante... Terminadolos me vengo a este, soy nuevo y esa función me dio algunos dólares de cabeza y aún no la domino bien pero se que con tus videos lo lograré
@erebosubuntu9063
@erebosubuntu9063 2 года назад
Apenas ando viendo aplicación de matrices, este video me aclaro dudas en cuanto al tema.
@victorhugoguzmanvazquez6477
Valió la pena la desvelada con este magnífico video! Saludos Desde Pátzcuaro México y a darle!!!
@luiscorderomorente2730
@luiscorderomorente2730 3 года назад
No entiendo como no tienes más suscriptores. Eres el profesor perfecto que estaba buscando. Sigue así por favor!!!
@cefuve
@cefuve 3 года назад
Muchas gracias Luis, saludos!
@gustavomichalik766
@gustavomichalik766 2 года назад
El mejor canal de enseñanza sobre Arduino. Muchas gracias por tus explicaciones tan claras!!
@cefuve
@cefuve 2 года назад
Gracias por tu comentario, Gustavo. Saludos!
@carlosricci8763
@carlosricci8763 4 месяца назад
Muy claro, didactico, y de gran ayuda. Muchas gracias !
@magokevin2313
@magokevin2313 5 месяцев назад
muy bueno.... estos son los videos que valen la pena ver
@arduindustial2838
@arduindustial2838 3 года назад
Excelente clase !!! lo importante es que esta súper detallado , mil gracias por tanto !!!
@cefuve
@cefuve 3 года назад
Genial! Gracias por comentar, saludos.
@eduardoolivares5304
@eduardoolivares5304 3 года назад
Catedra MAGISTRAL ¡ Muchas gracias !
@carlosjonatancardenaspuga7172
@carlosjonatancardenaspuga7172 3 года назад
Me fascina la manera en que explicas amigo, he aprendido bastante contigo, muchas gracias por compartir tus conocimientos. Estaría muy bien que hicieras mas videos sobre este tema. Saludos.
@cefuve
@cefuve 3 года назад
Gracias Carlos, se vendrán más videos... Saludos!
@dunkrukawa
@dunkrukawa 3 года назад
Excelente video profe!! no sabe cuanto tiempo estuve esperando esta clase!! esperemos por favor que sigan más videos sobre millis en distintas aplicaciones que se le puedan dar, con servos, pulsadores, leds, etc! Muchas gracias!!!
@cefuve
@cefuve 3 года назад
Estoy pensando en hacer algunas secciones para ordenar los videos, una de ellas puede ser "ProgramandoSinDelay" jajaja o algo por el estilo. Gracias por comentar, saludos!
@dunkrukawa
@dunkrukawa 3 года назад
@@cefuve Muchísimas gracias!! lo estaré esperando :)!!
@edwardtro1
@edwardtro1 3 года назад
Los vídeos que subes son lo máximo. saludos desde Arequipa-Perú.
@cefuve
@cefuve 3 года назад
Muchas gracias, saludos!
@erebosubuntu9063
@erebosubuntu9063 2 года назад
Oro molido esté video, me gusto tanto que me lo descargue y es la segunda vez que lo veo.
@gastonbarreto7007
@gastonbarreto7007 3 года назад
Sus videos me han ayudado en algoritmos en pseint gracias por compartir conocimiento
@AlexisGonzalez-rd3gu
@AlexisGonzalez-rd3gu 3 года назад
¡Excelente video como siempre! Saludos.
@cefuve
@cefuve 3 года назад
Gracias! Saludos
@siordaz
@siordaz 3 года назад
Muy buen video, impecable y amena explicacion siempre, son mi referencia para mis programas.
@cefuve
@cefuve 3 года назад
Genial Simon, gracias por comentar, saludos!
@PARANOYAMAN
@PARANOYAMAN 2 года назад
Eres un crack!! y todo muy bien explicado, suscrito.
@cefuve
@cefuve 2 года назад
Muchas gracias Samuel, saludos!
@jfloresbel
@jfloresbel 2 года назад
Hola! Muy bueno el video, muy clara la explicación de la función millis. Me sirve para mejorar un controlador de temperatura, que parpadea el display 2 x 16 al mostrar la hora y la temperatura. Respecto a los límites del rango de tiempo, lo resolví transformando ambos límites en segundos de la siguiente forma (hours * 3600 + minutes * 60 + seconds) y que se cumpla la condición si (millis() / 1000) se encuentra entre el minimo y el máximo. De esta forma, no se sale del rango de una variable int y no es necesario "castear" al mezclar variables de distinto tipo. Saludos y gracias!
@cefuve
@cefuve 2 года назад
Hola Jorge, gracias a ti por compartir tu solución y aportar al canal, excelente idea. Saludos!
@carlosangellotti5710
@carlosangellotti5710 3 года назад
Gracias profe ! Excelente como siempre !
@cefuve
@cefuve 3 года назад
Saludos Carlos!
@milagrosalbarracinlopez573
@milagrosalbarracinlopez573 3 года назад
Saludos profe soy Rubén Espinoza desde Perú,que gran explicación al terminar de ver sus vídeos volveré a repasar el curso . Eres un genio profe mil bendiciones y gracias
@cefuve
@cefuve 3 года назад
Muchas gracias Rubén, un gran saludo!
@josesanchez-qm1vr
@josesanchez-qm1vr 2 года назад
waooo, estaba leyendo sobre los microncontroladores AVR y llegue aqui y waoo bro en serio buena explicacion, sin darme cuenta me vi las dos horas :D
@cefuve
@cefuve 2 года назад
Muchas gracias por tu comentario y muchas gracias por ver el video completo :O Saludos!
@prosevenargentina3726
@prosevenargentina3726 3 года назад
muy buena la clase te felicito tenes ese don de maestro que muy poco lo tienen
@nelsoncastro69
@nelsoncastro69 2 года назад
Muy buena la explicación, muy muy wena!... saludos de Paraguay
@cefuve
@cefuve 2 года назад
Wena Nelson jaja saludos!
@leonelrivas4717
@leonelrivas4717 3 года назад
Valió la espera
@amranisalam2311
@amranisalam2311 3 года назад
Muy bien explicado y con buenos ejemplos le felicito y le mando saludos des de Marruecos 😉
@cefuve
@cefuve 3 года назад
Muchas gracias Amrani, Saludos!
@prudenciopinzonl8042
@prudenciopinzonl8042 3 года назад
Biiienn. Excelente.
@felipedeljesusjimenezruiz7627
@felipedeljesusjimenezruiz7627 2 года назад
excelente contenido
@arvpremoldeados2606
@arvpremoldeados2606 Год назад
Que don para explicar genio..
@gtavc007
@gtavc007 3 года назад
sentí el viento de la rosa de la guadalupe y supe que Cefuve habia subido video! xD gracias profe!
@cefuve
@cefuve 3 года назад
Ponga la florcita en agua jajajaj (aparece una flor, no?)
@guillermoestebantorresrenn3173
@guillermoestebantorresrenn3173 3 года назад
sublime!!!!!!!!
@mefugoenmicarro
@mefugoenmicarro 3 года назад
Excelente video, hay un módulo RTC (real time clock) para evitar las inexactitudes del cristal de cuarzo de la arduino, tambien lleva una pila para retener la hora y creo que calendario, saludos!
@cefuve
@cefuve 3 года назад
Así es, el módulo que mencionas tiene varias características muy interesantes. En este video ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-tTzIitB9LBw.html enseño a hacer un despertador digital con dicho módulo. Saludos!
@pepopepez105
@pepopepez105 3 года назад
gran ayuda para entender lo del millis y lo del bool que los tenía un poco atravesados muchas gracias fantástico video, solo eché un poco de menos la buena música de fondo que sueles poner en tus videos al volumen perfecto para que se te oiga con claridad un detallazo que muchos descuidan
@cefuve
@cefuve 3 года назад
Creo que ahora puse más bajo el volumen de la música, seguro con auriculares se escucha... Es un arte ponerle música a los videos jajaja ya lo perfeccionare. Saludos!
@claypole7miguel
@claypole7miguel Год назад
me re sirvió man!
@cefuve
@cefuve 3 года назад
Problema resuelto 01:44:00 Este surge al mezclar int con long, ya que hour es int y lo multiplico por un int, pero el resultado sobrepasa la capacidad del int, por ende debemos decirle que al menos uno de ellos es long, por ejemplo: mitiempo = hour*10000L + minute*100 + second; Con la L después de 10.000 le digo a Arduino que la operación contiene un long, por ende el resultado deberá adaptarse a la variable con máxima capacidad (long tiene más capacidad que int), y así muestra el número como corresponde, ya que estaremos trabajando con las variables que corresponden. Otra forma podría ser: mitiempo = hour*pow(10,4) + minute*pow(10,2) + second; O si asignamos todas las variables como long: long hour = 14; long minute = 28; long second = 0; Saludos!
@joseccorihuamantica5930
@joseccorihuamantica5930 3 года назад
Gracias ms por los videos son buenos
@oswaldoproanio6133
@oswaldoproanio6133 2 месяца назад
¡Felicitaciones! Tienes una capacidad didáctica innata. Tus clases son muy claras y entretenidas. Aprovechando el tema tratado sobre multitsrea usando Millis, por favor, ¿podrías guiarme un poquito en cómo proceder para hacer un temporizador "Time on delay" y otro "Time of delay" sin que se atasque todo el proceso? Gracias de antemano.
@cefuve
@cefuve 2 месяца назад
Gracias por tu comentario. Respecto a tu pregunta, preliminarmente probaría con estampar el tiempo al momento de accionar la entrada, algo como: if (in == HIGH && in_old == LOW) { tiempo_actual = millis(); } if (in == HIGH) { if (millis() - tiempo_actual > 5000){ digitalWrite(salida, HIGH); } } else { digitalWrite(salida, LOW); } Me comentas como te va, Saludos!
@oswaldoproanio6133
@oswaldoproanio6133 2 месяца назад
Muchas gracias por responder. Apenas lo pruebe te comento. Gracias nuevamente.
@jaimestanleyvelardeyanez6622
@jaimestanleyvelardeyanez6622 3 года назад
Buenazo
@Dhan_Z
@Dhan_Z 2 года назад
exelente...
@CarlosMRosa
@CarlosMRosa Год назад
Eres muy excelente explicando...solo le sugiero que aumente el tamaño de las letras en los videos ya que mucha gente los ve desde el celular y ya también muchos ya no vemos mucho
@cefuve
@cefuve Год назад
Gracias Carlos, tendré presente tu recomendación, saludos.
@chavarj8
@chavarj8 Год назад
Interesante ver como vas programando en vivo y tienes errores que corriges y te permite mostrar como se analiza y resuelve el problema....
@jhonalexanderbastidas6747
@jhonalexanderbastidas6747 3 года назад
Profe creo que la manera de solucionar el problema de los rangos era simplemente min ==/==/>= y max ==/==/
@cefuve
@cefuve 3 года назад
Hola Jhon, en el tiempo 1:21:21 lo tengo de esa forma... ah, te refieres a usar OR? con los slash / algo así como: hour == 13 || minute == 15 || second >= 30 Gracias por comentar, saludos!
@ronaldolafalce554
@ronaldolafalce554 3 года назад
Hola , gracias por el aporte que hacés. Si quiero activar una salida por 15 minutos Y luego apague mientras sigo leyendo temperatura o una entrada analógica cómo puedo armar ese temporizador?
@cefuve
@cefuve 3 года назад
Hola Ronaldo, puedes usar esta técnica, con millis, o la de mi otro video, usando delay. Principalmente estableces una variable de conteo y un tiempo fijo, que por cada pasada, aumente en 1 el conteo. Así, pasado cierto conteo, sabrás cuanto tiempo ha pasado y podrás condicionarlo con un if. Saludos!
@fortuberrospivargas7310
@fortuberrospivargas7310 3 года назад
Excelente . Miguel grau
@juancarlosrelloso1302
@juancarlosrelloso1302 3 года назад
Hola me parece el video muy bueno, pero me gustaría que cuando es una unidad de horas, segundos y minutos aparecería 01 y no 1 y ademas que podría aparecer el reloj como tal no imprimiendo la hora cada segundo y si se podría en una pantalla digital seria la pera. Muchas gracias eres un fenómeno, me tendré que ver el video mas de una vez para aprender un poco. Gracias otra vez
@cefuve
@cefuve 3 года назад
Hola Juan, para que aparezcan los ceros, sería así: if(hour < 10) Serial.print("0"); Serial.print(hour); Serial.print(":"); if(minute < 10) Serial.print("0"); Serial.print(minute); Serial.print(":"); if(second < 10) Serial.print("0"); Serial.println(second); Se podría adaptar perfectamente a cualquier pantalla, mas o menos, de la misma forma. Saludos!
@reimundolopez1198
@reimundolopez1198 2 года назад
Existe algun programa para arduino que haga depuración, así tipo como lo hace el visual studio,?? para ver como se comportan las variables línea por línea
@cefuve
@cefuve 2 года назад
Yo por lo menos no conozco ninguno, simplemente hago Serial.print para ver lo que está pasando dentro del micro.
@marinoparada2587
@marinoparada2587 3 года назад
Saludos hermano. Cuando pueda haga un video sobre las interrupciones
@cefuve
@cefuve 3 года назад
Ahí hay buen tema, bien profundo... saludos!
@eddybass6118
@eddybass6118 2 года назад
Te felicito por tu manera de explicar, eres muy didactico. Como haría Yo para colocarle a un secuencia de 5 led lo siguiente: Al primer Led 5 minutos prendido, al segundo Led 4 minutos, al tercer Led 3 minutos, al cuarto Led 2 minutos y al 5 Led 1 minuto? y listo... Que haga solo eso cada vez que Yo reinicie el Arduino.
@cefuve
@cefuve 2 года назад
Gracias Eddy, como le veo yo, se podría hacer con simples delay... En el setup los estableces todos como salidas e inmediatamente después los enciendes todos, luego en el loop los vas apagando uno por uno: delay(60000); digitalWrite(led5, LOW); delay(120000); digitalWrite(led4, LOW); delay(180000); digitalWrite(led3, LOW); delay(240000); digitalWrite(led2, LOW); delay(300000); digitalWrite(led1, LOW); Saludos!
@eddybass6118
@eddybass6118 2 года назад
@@cefuve Muchas gracias mi hermano, Yo pense que había una manera de colocar minutos en vez de segundos... Era por si les queria dar mucho más tiempo, por ejemplo 15 minutos a uno de ellos, eso es para Yo hacer un juego de luches en el en el jardín que tengo en el patio de mi casa, y que se enciandan cada cierto tiempo, y me cambie los colores de los reflectores que estoy colocando en mi jardín... jejeje, Lo voy a probar... Comence ayer a ver tus videos, y mi parecer creo que son los mas claros de muchos que he visto en la Red... Muy amable por responder.
@cefuve
@cefuve 2 года назад
Se podría simplificar haciendo la operación matemática dentro de los paréntesis: delay(15 x 60 x 1000); donde 60x1000 significa 1 minuto, y el 15 se va modificando dependiendo de los minutos que se requieran. Importante mencionar, que todo tiene su límite cuando hablamos de número en microcontroladores, en este caso, para la función delay, se especifica que el tipo de variable es unsigned long. www.arduino.cc/en/reference/delay Esa variable almacena desde el 0 al 4294967295, por lo que podríamos hacer delay de aproximadamente 49 días... Saludos!
@eddybass6118
@eddybass6118 2 года назад
@@cefuve Ahhhh okey...
@reimundolopez1198
@reimundolopez1198 2 года назад
La velocidad de refresco de lo que muestra en la pantalla del monitor serial, depende de los baudios? (9600)?
@cefuve
@cefuve 2 года назад
Los baudios es la velocidad a la que se transmiten los datos mediante comunicación serial. La velocidad con que se imprime en monitor serie dependerá de cómo está estructurado tu código.
@56-angeldamianavila84
@56-angeldamianavila84 2 года назад
que clave eso del return, puede ser usado dentro de funciones if else, para cerrar el bucle loop?
@cefuve
@cefuve 2 года назад
Hola, el return se usa principalmente para devolver un valor desde una función, se puede usar dentro de un if... No se a que te refieres con cerrar el loop. Si tienes un if dentro del loop que ejecuta el return sin devolver valor, el flujo de ejecución se irá al principio del loop. Saludos!
@manuelfilardi4280
@manuelfilardi4280 Год назад
Hola Cesar, tengo una duda , cuando se realiza un reloj y abres el monitor serie siempre empieza a contar desde la hora que tengo puesta en las variables, ¿hay alguna manera de cuando abra el monitor serie vea el reloj en tiempo real, que no sea en un display o similar? Gracias.
@cefuve
@cefuve Год назад
Hola Manuel, se podría hacer eso, pero necesitarías un módulo extra RTC... Lo otro sería usar la macros __TIME__, que toma la hora actual del sistema ¡al momento de compilar! Prueba este código: String tiempo = __TIME__; int s = tiempo.substring(6).toInt(); int m = tiempo.substring(3, 5).toInt(); int h = tiempo.substring(0, 2).toInt(); Serial.println(tiempo); Serial.println(h); Serial.println(m); Serial.println(s); Saludos!
@renejorgealonso4681
@renejorgealonso4681 Год назад
Hola profe gracias por tus videos muy buenos, la explicación super me podrías orientar para realizar un semáforo con millis o Multitasking pero estoy atorado en como aplicarlo
@cefuve
@cefuve Год назад
Hola Rene, para que no te calientes la cabeza, dentro del millis realiza un contador y luego le pones condiciones a la cuenta. Si el contador está entre 0 y 5 que se encienda la luz verde. Si el contador está entre 6 y 7 que se encienda la luz amarilla. Si el contador está entre 8 y 15 que se encienda la luz rojo. Luego pones un if que reinicie el contador al pasar de 15. Saludos!
@renejorgealonso4681
@renejorgealonso4681 Год назад
@@cefuve Muchas gracias profe es mejor así esta menos complicado que los millis hay que seguir estudiando nuevamente gracias
@cefuve
@cefuve Год назад
Si es obligatorio que uses millis, sería algo como: if(verde == 1){ if(millis() - tiempo_actual > 4000){ tiempo_actual = millis(); verde = 0; amarillo = 1; } } if(amarillo == 1){ if(millis() - tiempo_actual > 1000){ tiempo_actual = millis(); rojo = 1; amarillo = 0; } } A ver si se entiende, para que lo complete...
@renejorgealonso4681
@renejorgealonso4681 Год назад
@@cefuve Profe muchas gracias por la información del código claro que lo voy a intentar te lo agradezco saludos.
@GeraMF
@GeraMF 3 года назад
amigo como será el código en arduino para leer pulsos en flanco de subida o bajada usando digitalread()
@cefuve
@cefuve 3 года назад
Hola, justo en el último video "solución: funciones de mantenimiento impresora" muestro como reconocer entre flanco de subida y flanco de bajado... Básicamente uso una variable auxiliar para guardar el estado anterior de la lectura y compararla con la lectura actual: if ( lectura_actual != lectura_anterior ) { if ( lectura_actual == 0 ) { //flanco de bajada } if ( lectura_actual == 1 ) { //flanco de subida } } //Si es el estado de reposo es 1 Saludos!
@DianaMartinez-su6jh
@DianaMartinez-su6jh Год назад
Tienes algún ejemplo en donde lo que controles con el botón sea prender o apagar el blink de un led mientras lo demás sigue funcionando?
@cefuve
@cefuve Год назад
Hola Diana, si, tengo uno de menú con encoder. También hay otros donde hago más de una tarea al mismo tiempo. Saludos.
@quimfornesifiol9769
@quimfornesifiol9769 3 месяца назад
Hola. Sigo incondionalmente tus vídeos. No solo se aprende, sinó que quieres más. Una pregunta: ¿como calculamos que condensador poner para evitar rebotes?
@cefuve
@cefuve 3 месяца назад
Hola, gracias por verlos. Con respecto a tu pregunta, no tengo una fórmula, solo te recomiendo probar con condensadores entre 10nF y 100nF, a mayor valor, más lenta es la reacción. Saludos.
@quimfornesifiol9769
@quimfornesifiol9769 3 месяца назад
@@cefuve gracias
@alexhdz7377
@alexhdz7377 2 года назад
se podria usar la funcion millis() y las interrupciones de arduino al mismo tiempo?
@cefuve
@cefuve 2 года назад
Hola Alex, no habría problemas ya que la función millis usa el timer no las interrupciones. Saludos!
@nicolashaneck4764
@nicolashaneck4764 2 года назад
Excelente video. Muchas gracias por explicar en profundidad. Prodras darme una ayuda, para usar 10 botones y 10 led. Cada botón encenderá o apagará un led por separado (botón 1 corresponde a led ,1, botón 2 a led 2, etc). Además estos led deben prender y apagar de manera intermitente hasta que sean apagados. Si tenés algún vídeo que pueda orientarme te agradecería enormemente. Saludos y muchas gracias.
@cefuve
@cefuve 2 года назад
Hola Nicolas, el video anterior a este es la forma más simple: multitasking usando delay. Y apoyarse con variables auxiliares para activar/desactivar párpados. Algo como... count = 0 blink1 = false LOOP: if (boton1 == 1){ blink1 = !blink1 } delay(10) count++ if (count > 10){ count = 0 if (blink1 == true) digitalWrite(pin, !digitalRead(pin)) } }
@nicolashaneck4764
@nicolashaneck4764 2 года назад
@@cefuve muchas gracias por responder. perfecto lo pondré en practica (no sabia que con blink hacia el parpadeo). Estoy viendo un video que explicas acerca de los pulsadores. son excelentes tus videos. nuevamente muchas gracias, saludos desde argentina.
@cefuve
@cefuve 2 года назад
No hay de que Nicolas. blink es el nombre de la variable solamente, el parpadeo lo hace todo el conjunto del código que te envié... Hay un video de la sección #coding donde simulo la operación de una impresora, si no me equivoco ahí hice parpadear un led de forma similar. Saludos!
@nicolashaneck4764
@nicolashaneck4764 2 года назад
@@cefuve hay unos videos circulando que usan varios botones con resistencias en serie a un solo puerto de entra, probaste si funcionaba?
@cefuve
@cefuve 2 года назад
@@nicolashaneck4764 si, ahora mismo estoy haciendo un proyecto donde uso una entrada analógica para leer 4 botones, sin problemas...
@csr261
@csr261 2 года назад
profe tengo el código funcionando con los comparadores que uso primero compuerta lógica con AND encendido 10 segundos
@cefuve
@cefuve 2 года назад
Me podrías dar un poco de contexto, no me acuerdo de todo lo que explico en los videos, a veces divago jaja
@joseescorche1414
@joseescorche1414 3 месяца назад
Hola saludos como asocio la función millis a que me retenga el accionamiento de 2 servos
@cefuve
@cefuve 3 месяца назад
Hola, la libreria de servo por defecto te retiene el grado de giro cuando le das la acción. No entiendo porque quieres usar millis.
@joseescorche1414
@joseescorche1414 3 месяца назад
@@cefuve hola saludos, quiero que active 1 pulsador el servo a 90grados, luego que suelte el pulsador un tiempo después desactive el servo y vuelva a 0grados
@cefuve
@cefuve 3 месяца назад
Hola, tengo un vídeo del uso de botones... Para ese propósito yo usaría el flanco de subida y el flanco de bajada. saludos!
@joseescorche1414
@joseescorche1414 3 месяца назад
@@cefuve como ese eso de flancos de subida y de bajada, no soy diestro en esto y solo quiero hacer esta especificación del servo para poder pasar la mayeria
@cefuve
@cefuve 3 месяца назад
@@joseescorche1414 ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-DG1g3IiFllQ.htmlsi=OsLj-EA7qactSnQy
@jfloresbel
@jfloresbel 2 года назад
Te hago una consulta en este video, ya que no he encotrado uno en el que trates el tema, y si lo tienes, me interesaría acceder: tipo de datos struct, arrays de struct y punteros. Otro tema que también me interesaría es guardar estados en eeprom, para recuperar el estado del programa ante cortes de energía eléctrica. Saludos y gracias!
@cefuve
@cefuve 2 года назад
No tengo muchos videos, y los que tengo son de nivel principiante, espero con el tiempo ir viendo temas más complejos. Saludos.
@agustinrubinos9833
@agustinrubinos9833 Год назад
tengo una idea con una banda vhf (118-136 mhz) para recibir señales PTT al Rpi, luego use Rpi para controlar un tablero de relés que controla algunas luces. tengo un codigo pero tengo la variable previousMillis y una variable llamada timeLastPush y no se bien ¿Dónde se actualizan? y ¿Dónde se usan? //constant value which will not change: const int PTT = 6; const int REL1 = 2; const int REL2 = 3; const int REL3 = 4; const int REL4 = 5; intervalo largo sin signo = 600000UL; // intervalo en el que apagar un relé //valores que cambiarán: int PTTState = 0; int PTTPushCounter = 0; int últimoestadoPTTS = 0; unsigned largo anteriorMillis = 0; // almacenará la última vez que se actualizó un relé. actualMillis largo sin signo = 0; unsigned long timeLastPush = 0; //Milisek. desde la última vez que se presionó PTT .. sin firmar long timeOutPTT = 10000; // Tiempo de espera en milisegundos DFRobot_LCD lcd(16,2); // Tipo de pantalla LCD configurada 16 caracteres y 2 líneas. void setup() { // inicializando lcd lcd.init(); // inicia el puerto serie para LCD Serial.begin(9600); Serial.println("PTT LISTO"); lcd.setCursor(0,0); //Configuración de pines conectados por el esquema pinMode(PTT,INPUT); pinMode(REL1, SALIDA); pinMode(REL2, SALIDA); pinMode(REL3, SALIDA); pinMode(REL4, SALIDA); Serial.begin(9600); Serial.println("PTT LISTO"); } void loop() { // leer el pin de entrada PTT: PTTState = digitalRead(PTT); // compara el PTTState con su estado anterior if (PTTState != lastPTTState && lastPTTState == 0) { //Si cambió el estado del PTT AND lastPTTState = 0, if ((millis() - timeLastPush) > timeOutPTT ) { //If timeout -límite para PTT alcanzado: timeLastPush = millis(); //Establece el inicio del nuevo contador de tiempo ahora, PTTPushCounter = 0; //Establece el contador PTT en 0. } // si el estado ha cambiado, incrementa el contador if (PTTState == HIGH) { // si el estado actual es HIGH, entonces el PTT pasó de desactivado a activado: PTTPushCounter++; Serial.println("PTT EMPUJADO"); Serial.print("NÚMERO DE PULSACIONES DE PTT: "); Serial.println(PTTPushCounter); } } // Retrasa un poco para evitar rebotes delay(50); // guarda el estado actual como el último estado, para la próxima vez que pase por el ciclo lastPTTState = PTTState; if (PTTPushCounter %4 == 3) { lcd.clear(); lcd.setCursor(3,0); lcd.print("RELÉ 1 ENCENDIDO!"); escritura digital (REL1, ALTA); } si (PTTPushCounter %6== 5) { lcd.clear(); lcd.setCursor(3,0); lcd.print("RELÉ 2 ENCENDIDO!"); escritura digital (REL2, ALTO); } if (PTTPushCounter %8== 7) { lcd.clear(); lcd.setCursor(3,0); lcd.print("RELÉ 3 ENCENDIDO!"); escritura digital (REL3, ALTA); } si (PTTPushCounter %10== 9) { lcd.clear(); lcd.setCursor(3,0); lcd.print("RELÉ 4 ENCENDIDO!"); escritura digital (REL4, ALTO); } actualMillis=millis(); if ((currentMillis - previousMillis) >= intervalo) { // guarda la última vez que encendimos/apagamos el relé lcd.clear(); lcd.setCursor(0,0); lcd.print("¡TODOS LOS RELÉS APAGADOS!"); escritura digital (REL1, BAJO); escritura digital (REL2, BAJO); escritura digital (REL3, BAJO); escritura digital (REL4, BAJO); anteriorMillis = millis(); Serial.println(anteriorMillis); } }
@cefuve
@cefuve Год назад
Hola Agustin, según tu código, el timeLastPush se usa para timeout (se agotó el tiempo), que si después de un tiempo, no se recibe nueva info, se reseteo el contador. if (PTTState != lastPTTState && lastPTTState == 0) { if ((millis() - timeLastPush) > timeOutPTT ) { timeLastPush = millis(); PTTPushCounter = 0; } Y la variable previousMillis es un "delay" que ejecuta instrucciones cada cierto tiempo (lo que manda la variable intervalo). Es otra forma de hacer lo que explico en el video. if ((currentMillis - previousMillis) >= intervalo) { lcd.clear(); lcd.setCursor(0,0); lcd.print("¡TODOS LOS RELÉS APAGADOS!"); escritura digital (REL1, BAJO); escritura digital (REL2, BAJO); escritura digital (REL3, BAJO); escritura digital (REL4, BAJO); anteriorMillis = millis(); Serial.println(anteriorMillis); } Saludos.
@agustinrubinos9833
@agustinrubinos9833 Год назад
@@cefuve gracias profeee!
@fermincarmeloruizmartin7100
@fermincarmeloruizmartin7100 2 года назад
Una pregunta, quizás sin mucho sentido: Si el tipo de variable "unigned long" tiene un valor máximo de 32 bits, si se tiene un proyecto funcionando de forma indefinida y se usa la función "millis", en algún momento esa variable se desbordará. ¿que pasa en ese momento? ¿vuelve a tener el valor =0? ¿Como afectaria en ese caso al proyecto?
@cefuve
@cefuve 2 года назад
Es una muy buena pregunta Fermin, respuesta rápida, vuelve a 0. Respuesta larga, te pego la respuesta que di en otro de mis videos... 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; }
@fermincarmeloruizmartin7100
@fermincarmeloruizmartin7100 2 года назад
@@cefuve Gracias Cesar, con la explicación de cómo quedaría el desborde ha quedado muy claro con el funcionamiento. Es una forma de comprobar cuando se produce el desbordamiento en un proyecto de larga duración y que pueda darse esa situación.
@jscc5702
@jscc5702 2 года назад
Como ejecuto un for como multitarea
@cefuve
@cefuve 2 года назад
Hola, primero no debes usar un for, debes aprovechar el loop en conjunto con una variable contadora y un if para condicional el rango. int x = 4; void loop(){ if(digitalRead(pin) == LOW){ //boton x = 0; //inicialización del for } if( x < 4 ){ //condición del for x++; //iteración del for //se ejecuta 3 veces después de presionar el botón } }
@arduindustial2838
@arduindustial2838 3 года назад
Hola cesar espero que te estés cuidando estuve trabajando en este proyecto el cual convertí en un cuenta horas para las máquinas y conseguí un módulo eeprom externo para probar !! Feliz hasta que me di cuenta que no usa la misma librería que la eeprom interna 🤔, ahora viene la pregunta :usaste estas eeprom ? Podrás orientarme para poder grabar y leer ?
@cefuve
@cefuve 3 года назад
Hola Anibal, como es eso de cuenta horas para las máquinas, algo como tiempo de operación de una máquina? Que eeprom estás usando? Hay un montón de opciones, comunicación paralela, I2C, SPI, RS232, etc... Saludos!
@arduindustial2838
@arduindustial2838 3 года назад
@@cefuve Es un cuenta horas así cuando llega a un valor predeterminado imprima un mensaje “precisa servicio” en un auxiliar del contactor de marcha del motor principal hago accionar lo que simuló con el pulsador . Se calcula 600hs de vida del aceite y la idea que a las 1800 mande otro mensaje de cambio de filtro separador de aceite .Para eso es indispensable que la información se grabe cada minuto por si se interrumpe la energía , el módulo es At24c08 trabaja con I2c pero no usa la librería eeprom.
@arduindustial2838
@arduindustial2838 3 года назад
@@cefuve Módulo De Memoria At24c08 X2un I2c Interface Eeprom Emakers
@arduindustial2838
@arduindustial2838 3 года назад
@@cefuve hola cesar acá en un vídeo explican en italiano la forma de grabar la memoria; y si la graba (lo trascribí y probé) lleva un montón de código y tiene un delay pequeño que creo que no va a interferir. La idea seria, por ejemplo: Empieza a funcionar la maquina, corre el tiempo y cada 1min graba en los primeros 4 espacios la hora .En los en el 5° y 6°espacio los min ;para que en el caso de corte de suministro o al finalizar el día se apague el equipo guarde la cuenta para poder seguir el día siguiente . Luego grabaría el 7°,8°,9°.10°para la hora y así sucesivamente. el tema es que no me quedo claro como cambiar las posiciones creo que como esta el código siempre graba en la posición 0 . Quedo en espera cuando tengas un tiempo lo veas; HAY POCOS VÍDEOS QUE EXPLIQUEN EN DETALLE . Desde ya gracias por la paciencia y la dedicación para explicar !!! #include #define disk1 0x50 int hora=24; int minutos=54; void setup() { Serial.begin(9600); Wire.begin(); unsigned int addr=1; Serial.println("funciona la eeprom"); writeEEPROM(disk1, addr,minutos); int n=readEEPROM(disk1,addr); Serial.println(n); } void loop() {} void writeEEPROM(int i2caddr,unsigned int maddr, byte data){ Wire.beginTransmission(i2caddr); Wire.write((int)(maddr>>8)); Wire.write((int)(maddr&0xFF)); Wire.write(data); Wire.endTransmission(); delay(5); } byte readEEPROM(int i2caddr,unsigned int maddr){ Wire.beginTransmission(i2caddr); Wire.write((int)(maddr>>8)); Wire.write((int)(maddr&0xFF)); Wire.endTransmission(); Wire.requestFrom(i2caddr,1); byte rdata=1; if(Wire.available()){ rdata=Wire.read(); } return rdata; }
@cefuve
@cefuve 3 года назад
Hola Anibal, disculpa la demora. Aquí hay que tener muy en cuenta la forma de organización de la memoria y el tamaño de los tipos de variables. La memoria guarda de a 8 bits por dirección, algo como: dir = data 0 = 00000000 1 = 00000000 2 = 00000000 3 = 00000000 En el caso del reloj, trabajamos con números que se pueden almacenar perfectamente en 8 bits, así puedes guardar cada dato en cada dirección, ejemplo: Guardar hora inicio 08:30:15 writeEEPROM(disk1, 0, horas); writeEEPROM(disk1, 1, minutos); writeEEPROM(disk1, 2, segundos); Quedaría algo así: dir = data 0 = 00001000 (8) 1 = 00011110 (30) 2 = 00001111 (15) 3 = 00000000 Después lees de la siguiente forma: byte data1 = readEEPROM(disk1, 0); byte data2 = readEEPROM(disk1, 1); byte data3 = readEEPROM(disk1, 2); Saludos!
@martinyanez5851
@martinyanez5851 Год назад
Hola buenas tardes Cefuve quisiera decirle que en esta parte 1:41:18 también podría haberlo hecho de la siguiente forma bool mínimo = hour == 13 && minute == 15 && second >= 30; bool máximo = hour == 13 && minute == 16 && second
@cefuve
@cefuve Год назад
Hola Martin, el problema con esa forma, es que no puedes establecer rango más largos. Imagina que quiero establecer 1 hora de funcionamiento: mínimo = hour == 13 && minute == 15 && second >= 30; máximo = hour == 14 && minute == 15 && second
@elturco7367
@elturco7367 2 года назад
Excelente video. Creo que el problema que tienes con la lógica es este: Tu creaste las condiciones de inicio y final bien pero trabajaste con el negado. Prueba si no fue según entendí, que si el negado y el final eran falsos es que se te cumple. Sino creo que escribiste el negado del "o" y es la suma de fe cada negado. Gracias :)
@cefuve
@cefuve 2 года назад
Hola, tu hablas de esta parte 1:29:10 ? dejarías el minimo y maximo negados por separado?
@elturco7367
@elturco7367 2 года назад
@@cefuve pienso que sería una estrategia. Comentame que tal. Excelente video gracias
@cefuve
@cefuve 2 года назад
@@elturco7367 Eso quedaría como una NAND, que lo probé antes... Incluso más adelante en el video me apareció otro problema, por eso terminé usando otra estrategia totalmente distinta. Mira, si se niegan individualmente, queda: if( !minimo || !maximo ) Y si aplicamos el teorema de De Morgan, nos queda como una multiplicación negada: if( !(minimo && maximo) ) Saludos.
@arduindustial2838
@arduindustial2838 3 года назад
Hola cesar porque cuando lo multiplicaste por 10000 daba ese error? Y si en 100000 funciono , y en el caso de los minutos sobra un cero ósea tendría que ser por 100 en vez de mil ? Me encariñe un poco en el error que tiraba cuando multiplicas la hora por 10000
@cefuve
@cefuve 3 года назад
Como viste en el video, quedé "plop", y para no quedarme pegado lo dejé con 100.000... Pero hay algo que no debo estar viendo, a ti te da el mismo error?
@arduindustial2838
@arduindustial2838 3 года назад
@@cefuve hoy vi la facción de video mañana lo practico y te cuento cómo resulto esta muy bueno pasarlo a número entero ya que se podría grabar en una eeprom externa por ejemplo en la fabricación de un horometro para alguna máquina ! Pero quede desconcertado con ese error mañana te cuento cómo me fue
@cefuve
@cefuve 3 года назад
Siii, en la desesperación se me vino esa idea (después de alguna horas jaja) y la verdad, tiene bastante potencial... En cuanto tenga tiempo probaré de nuevo el código, pero aislado, a ver que pasa. Y esperaré tu retroalimentación, Saludos!
@marcossantillan3663
@marcossantillan3663 2 года назад
PROBLEMA hago exactamente lo mismo que explicas en el minuto 33:40 pero el count no me devuelve números, sino que me imprime count cada "tiempoactual+1000", uso la misma placa. agradecería un aporte. excelente tus videos!!!!
@marcossantillan3663
@marcossantillan3663 2 года назад
encontré el error, estaba imprimiendo un char (escribí entre comillas). no estaba haciendo "exactamente lo mismo" jajaja
@cefuve
@cefuve 2 года назад
Hola Marcos, gracias por la honestidad jajaja... Eso suele pasar cuando no se hace "exactamente lo mismo". Saludos!
@dunkrukawa
@dunkrukawa 3 года назад
Por favor necesito de tu ayuda :c ...Cómo podría hacer un ciclo for pero con millis? Sé que en teoría no se podría pero quiero tratar que al entrar a un if, el código se ejecute x número de veces y luego salga de este, continuando así con el código, soy muy novato en muchas cosas pero estoy tratando de implementar millis en mis códigos pero no sé cómo hacer que se ejecute una cierta cantidad de veces y luego deje hacerlo hasta que se le vuelva a ordenar :( , cualquier ayuda estaría más que agradecido, Muchas gracias por tus vídeos me han motivado bastante a continuar con Arduino!🔥✨
@cefuve
@cefuve 3 года назад
Hola, no entiendo muy bien lo que necesitas, porque no le encuentro sentido a hacer un for con millis... Si que se puede hacer un for con if, sería algo así: x = 10; en el loop: if(x > 0){ //se repite hasta que x sea 0 x = x - 1; } Después para entrar de nuevo, solo debes asignar el número de repeticiones a la variable x. Saludos!
@dunkrukawa
@dunkrukawa 3 года назад
@@cefuve Muchas gracias por tu ayuda!🔥✨
@lucasadolfoperezspangenber4121
@lucasadolfoperezspangenber4121 3 года назад
hola buenas me gusto el concepto del vídeo. y es como mencionas si copio y pego no se aprende. estoy con un proyecto de un invernadero inteligente. que tus conocimientos lo pueden sacar adelante. la verdad no estoy a la altura del proyecto y me lo planteo un amigo con su necesidad. y yo con gusto me brindo para lo que se necesites.
@cefuve
@cefuve 3 года назад
Hola Lucas, gracias por comentar. Al final del comentario no terminé de entender tu intención... Pero puedo decirte que con perseverancia se pueden lograr muchas cosas!! así que te motivo a seguir practicando, que no te darás cuenta cuando logres hacer tus propios códigos. Saludos!
@lucasadolfoperezspangenber4121
@lucasadolfoperezspangenber4121 3 года назад
@@cefuve hola buenas otra vez. Sabes que en el anterior video ví algo que me va ayudar mejor. Y es lo de dejar el loop limpio. Y que cada Voi haga la instrucción. De igual manera te escribí a tu página personal para cotizar.
@cefuve
@cefuve 3 года назад
La utilización de funciones personalizadas, no? Es un buen recurso para ordenar el código, hay que intentar no abusar mucho de esa técnica... En la tarde pretendo darme un tiempo para revisar todas mis redes, saludos!
@lucasadolfoperezspangenber4121
@lucasadolfoperezspangenber4121 3 года назад
@@cefuve bueno dale. Hace tranquilo, que andes bien.
@cefuve
@cefuve 3 года назад
@@lucasadolfoperezspangenber4121 A donde lo enviaste? no tengo ningún mensaje con tu nombre. Saludos!
@funciones1234
@funciones1234 11 месяцев назад
😵
@cefuve
@cefuve 11 месяцев назад
🥴
@csr261
@csr261 2 года назад
hola profe eres seco, me sirvió bastante su video en un proyecto que estoy diseñando con arduino. Soy programador de PLC y necesitaba saber de la multitarea en arduino la verdad que cada minuto de su video vale la pena verlo, hay proyectos pequeños que no amerita el uso de un PLC, tomare un cursito de arduino, eso si le falta mas practica con las compuertas lógicas jajajaj saludos profe desde concepción.
@cefuve
@cefuve 2 года назад
Hola César, te dejo invitado a ver mi curso de Arduino en youtube, es básico pero da una base firme para seguir avanzando. Se me corrio la lógica mientras explicaba?? A veces la cabeza me hace cortocircuito jajajajaja. Saludos al gran Concepción!
@csr261
@csr261 2 года назад
@@cefuve gracias por la invitación vere los videos del curso saludos
@jorgevillamilarellano6789
@jorgevillamilarellano6789 Год назад
loopX: for (int i = 0; i < alarm; i++) { digitalWrite(buzzerCtl, HIGH); digitalWrite(ledBuiltIn, HIGH); delay(500); digitalWrite(buzzerCtl, LOW); digitalWrite(ledBuiltIn, LOW); delay(500); } delay(1000); goto loopX; } buenas amigo como haria para agreagar el tiempo de retardo con milli().
@cefuve
@cefuve Год назад
Hola Jorge, no es llegar y meter millis en un código, se debe plantear desde cero el problema, para generar el algoritmo necesario ¿Qué se supone que hace esa sección de código? p.d: No te recomiendo usar goto en lenguajes de alto nivel...
@jorgevillamilarellano6789
@jorgevillamilarellano6789 Год назад
@@cefuve es un codigo de un inversor de corriente es bastante largo
@jorgevillamilarellano6789
@jorgevillamilarellano6789 Год назад
hay lcd sensor de temperatura ,sensor de bateria, feedback,timer es un spwm que ido modificando funciona pero quiero meter un sensor de corriente pero en el void loop se queda como parado en la lcd pero mido las salidas y parece funcionas pero con retraso .
@jorgevillamilarellano6789
@jorgevillamilarellano6789 Год назад
esa parte hace que cuando se activa la alrma por alguno de los sensores enciende los led y activa el buzer sin fin hasta que lo reinicie y tambien apaga el spwm
@cefuve
@cefuve Год назад
Por lo que entiendo, quieres que la alarma y el led enciendan y apaguen indefinidamente. La forma rápida de hacerlo con millis sería algo como: if(millis() - tiempoactual > 500){ tiempoactual = millis(); digitalWrite(buzzerCtl, !digitalRead(buzzerCtl)); digitalWrite(ledBuiltIn, !digitalRead(ledBuiltIn)); } Saludos!
@arturovilla5441
@arturovilla5441 2 года назад
Con pwm en un potenciómetro que active varias cosas
@cefuve
@cefuve 2 года назад
Hola Arturo, a que te refieres?
@arturovilla5441
@arturovilla5441 2 года назад
@@cefuve un velocímetro puede ser
@cefuve
@cefuve 2 года назад
@@arturovilla5441 te refieres a un variador de velocidad para motor mediante pwm? y que se pueda modificar el valor de pwm con un potenciometro? A no ser que quieras una frecuencia de pwm especial, no tiene sentido usar millis ya que hay una función especial para generar pwm (analogWrite). Saludos.
@arturovilla5441
@arturovilla5441 2 года назад
@@cefuve si como un velocímetro con un sensor Hall
@jorgenavarro3473
@jorgenavarro3473 2 года назад
Soy un novato, pero si te tengo cerca, te hubieras llevado un collejón
@jorgenavarro3473
@jorgenavarro3473 2 года назад
No es más fácil (pregunto) si le hubieras puesto == en las horas minutos y segundos Que es lo que tú querías
@cefuve
@cefuve 2 года назад
@@jorgenavarro3473 Hola, en que minuto del video? saludos.
@jorgenavarro3473
@jorgenavarro3473 2 года назад
No me explique bien, tu teoría es que este encendido cuando las dos se cumplan 1:21 (te complicas) si pones una para encender (se mantiene encendido hasta que le digas lo contrario) y después la otra hora para apagar con == así cuando llegue a esa hora exacta hace el cambio, nada de ≤= ni ≥=
@jorgenavarro3473
@jorgenavarro3473 2 года назад
Una 1h con 21minutos
@cefuve
@cefuve 2 года назад
@@jorgenavarro3473 Aaah si, me compliqué entero, pero al final del video usé otra técnica que me dio los resultados esperados (01:42:06). De eso se trata el video, de prueba y error, saludos!
@memioandrium3193
@memioandrium3193 3 года назад
hola profe yo se que tiene que hacer cosas y que posible mente desconfié de mi al ser un extraño, pero quiero crear un grupo en DISCORD de Arduino español ya que no hay o no he encontrado aun, entonces quiero que me ayude con ese sueño. y si le interesa la idea me puede escribir ( memio Andrium#3318 ) ahí le dejo mi usuario si me quiere buscar
@cefuve
@cefuve 3 года назад
Hola, había escuchado hablar de discord, pero hasta ahora no me había decantado por probarlo, se ve bastante interesante, sobre todo la interfaz... Había pensado en algún momento, hacer un foro en mi página web, pero como bien dices, el tiempo es el que falta. Por ahora no está en mis planes generar comunidad en dicha plataforma, pero me hice una cuenta por si haces un grupo y me quieres invitar!! cefuve_electronics#2440 Saludos!
@memioandrium3193
@memioandrium3193 3 года назад
@@cefuve hola compa, claro con mucho gusto estará las puertas abiertas, y si sabes de otras personas que sepan de arduino y me quieran ayudar con todo gusto los recibo con las manos abiertas y que tengas linda tarde
@retrieval-oi6kj
@retrieval-oi6kj 11 месяцев назад
Master, genial curso 😎👍👍👍
Далее
Multitasking usando delay() - Arduino
30:02
Просмотров 21 тыс.
Multitasking en Arduino - Manejando el tiempo
25:48
Просмотров 31 тыс.
Beautiful sport😍
00:20
Просмотров 337 тыс.
doing impossible challenges✅❓
00:25
Просмотров 4,6 млн
BOTONES en ARDUINO + 2 ejercicios
1:05:44
Просмотров 16 тыс.
How to Use Arduino Interrupts The Easy Way
33:28
Просмотров 79 тыс.
Harder Drive: Hard drives we didn't want or need
36:47
#WeekendProjects MENU ENCODER con Arduino
1:20:42
Просмотров 31 тыс.
✅ ESP32  es el mejor? Por Qué yo no lo uso?
10:17
Просмотров 103 тыс.
Top 10 Raspberry Pi Projects for 2022
7:54
Просмотров 1,5 млн