Hola amigos del mundo arduino tengo un pequeño problema y espero puedan ayudarme.
Estoy creando un proyecto el cual describo a continuacion:
Necesito desbloquear un celular que tiene un codigo numerico de 6 digitos para lo cual estoy usando una tarjeta arduino leonardo usando la funcion de teclado HID que trae este.
La solucion al problema es que voy generando un datos desde el 1 hasta el 999999 con un contador.
El problema surge cuando está introduciendo los datos y la bateria del equipo no aguantara para todas las combinaciones entonces cuando la bateria llegue a 0 el equipo se apagará y no sabre en que valor se apago para que continúe a volver a empezar desde donde se quedo sino volvera a empezar el ciclo desde el 0 ahora para solucionar el problema pense en usar una tarjeta sd en la cual en un archivo txt se ira guardando los valores intentados.
Logre hacer q se guarden los datos en la sd pero en mi ignorancia nose como usar el ultimo dato guardato en el txt. Por ejemplo:
El archivo tiene los datos
2001
2002
2003
2004
Ahora quiero usar el ultimo valor (2004) en una variable y nose como asignarle a una variable en el codigo para que este empieze a usar el contador desde donde se quedo y no desde el 0001
Podrian ayudarme dandome un ejemplo con relacion a este.
Sospecho que la mayoría aquí anda en proyectos que no tienen nada de práctico o utilidad en la vida real.
Sin tener muy claro lo que quieres hacer, me pregunto porque usarías una batería y esta se acabe antes de un proceso.
Supongamos que tienes un arduino para controlar una lavadora de ropas y esta tiene determinados pasos de lavado de 1 a 200 como si fuese un programador mecánico. Entonces si se corta la energía eléctrica, el programa de lavado debería grabar en que posición de lavado se encuentra y retomar desde ese lugar cuando regrese la energía eléctrica.
Entonces se podría usar la interrupción del pin2 de esta forma.
attachInterrupt(digitalPinToInterrupt(2), Energy, LOW ); // Habilita interrupción en pin 2
El pin 2 de arduino debería caer inmediatamente al corte de energía, pero arduino debe quedar alimentado por un diodo y capacitor suficiente como para funcionar por medio o un segundo mas.
Al caer la tensión en el pin 2 se produce la interrupción y llama a la función Energy. Esta quedaría mas o menos así
void Energy () {
noInterrupts();
EEPROM.update(1, steep);
}
Cuando inicias arduino debes comprobar si el ciclo se ha completado o a ha quedado trunco por un corte de energía, y se es esta ultima condición retomar el programa desde el punto de la variable steep.
Creo que ni me deje entender lo que pretendo es desbloquear un celular por fuerza bruta por cable otg y como este alimenta al arduino por el usb el celular obiamente se va descargando y en algun punto se apagara efectivamente y lo que quiero es guardar los intentos probados para no repetirlos de nuevo
Fue lo que el te respondió. Que los datos se guarden en la EEPROM del Arduino.
Ahora bien, puede tener arduino conectado al celular via OTG y alimentar el ARduino via externa sin que el celular descargue el Arduino.
Eso es algo que no consideraste.
Lo que necesitas es comunicación y la comunicación te la dará el OTG, pero luego de donde se alimene Arduino es otra cuestion, de hecho el circuito de detección prioriza la alimenación externa por sobre la que recibe via USB.
Agradezco la ayuda y si considere alimentar el arduino con una fuente externa y también considere guardar las variables en la EEPROM del arduino pero también considere lo siguiente: que al depender de una fuente externa esta se tendría que volver en un dispositivo fijo con lo cual no me hago mucho problema, segundo al usar la EEPROM interna del arduino esta se va degradando con cada escritura que haga acortando la vida útil de mi dispositivo, y por esas razones decidí que la mejor manera sería usar una memoria externa SD para almacenar estos datos y guardarlos en ella, solo el problema en mi ignorancia reside en que nose como usar los datos almacenados en la SD para que por ejemplo: si mi contador empezaba en la variable cont=0000 al cabo del tiempo de 2 horas este contador estará en un valor de 2500 suponiendo y estaría almacenado en la SD y por x y z razón mi dispositivo se apaga pero ya tengo este valor de 2500 almacenado en la SD y al volver a iniciar mi dispositivo este ya no empieza en 0000 sino en 2500 tomando este valor de la sd.
Ese es mi problema nose como tomar ese valor de la SD, espero puedan ayudarme con ello.
Si tienes un contador de 1 a 1 millón y pretendes guardar a cada salto el valor en la eeprom por supuesto que se acaba pronto, pero lo que tienes que hacer es solo grabar en eeprom si se corta la energía.
Cualquier persona que tenga un mínimo de sinapsis implementaría una función con dos posiciones de memoria, una para almacenar el puntero y otra para la variable. De esta forma necesitaría varias vidas para destruir una epprom.
Suponiendo que la energía se corta cada hora, entonces tendrías 100.000 horas de uso, pero lo cierto es que puede pasar un día sin cortarse la energía o incluso acabar el ciclo de 1 a 1 millón sin interrupción de la corriente.
Estoy un poco harto de los que vienen pidiendo ayuda y después opinan de lo que deberían hacer. Pues hazlo como tu creas conveniente y no andes molestando a los demás.
Agradezco tu ayuda amigo daniel y dejame decirte que nadie te anda obligando a que me respondas y si lo haces es porque tienes algo que aportar verdad?.
Si te tengo harto pues mal por ti amigo este es un foro para exponer dudas y asi entre todos ayudarnos y creo que en ningun momento te falte el respeto y eso deberias entender.
Solo mi duda es como usar un valor guardado en la tarjeta SD en una variable dentro del codigo de arduino nada mas.
Dime claramente que quieres hacer porque inicialmente sonaba raro, intentar quitar la clave de un celular, pero ahora me suena mas raro aún y roza lo ilegal.
Pensé que era un tema personal para un celular propio pero me hace pensar ahora que no conectar fuente externa es porque te interesa que sea móvil y dicha portabilidad no se condice con un problema personal.
Porque no aclaras mejor la idea general no la particular de como hacer las cosas.
Estas equivocado respecto de la EEPROM te vuelvo a repetir.
Como ya te dijo @Daniel_Arg y como te diría cualquiera con sentido común, no vas a estar guardando datos a cada instante, eso es ridículo. Puedes de algun modo monitorear el estado de la batería del celular y advertir cuando almacenar los últimos datos y supongamos que no sea perfecto y que falles, volver a comenzar y repetir 50 números por dar un valor no hace nada si es fuerza bruta.
Pero insisto con la idea general? es un proyecto personal o es una idea comercial?
Es mas que todo un aspecto personal ya que el telefono es de mi papa y una de mis hermanas lo bloqueo con código y no se acuerda lo llevamos a un tecnico y solo nos dio la opcion de flashearlo borrando asi todos los datos y eso es lo que no queremos.
Tres preguntas clave (pero que aún no tienen que ver con el código):
¿Cómo pretendes detectar el apagado del télefono? Mediante la alimentación USB puede que no sea factible porque si hablamos de un smartphone, el proceso de apagado (aún por batería baja) no es instantáneo; es como si fuera un PC. Durante ese proceso el Arduino todavía seguirá tecleando, el problema es que sería en vano y dichas combinaciones al final no se llegan a probar.
¿Cómo vas a detectar cuando el teléfono fue desbloqueado? Recuerda que mientras siga encendido seguirá tecleando. Quizá sería buena idea almacenar el código correcto, pero cuando no hay señalamiento para el Arduino, va a ser imposible.
¿Seguro que con teclado no se aplica el tiempo de espera ante intentos fallidos? Este tiempo de espera es intencional para frustrar cualquier intento de... justamente eso que quieres hacer: ataque de fuerza bruta.
No quiero que tampoco me lo tomes a mal, pero son aspectos que sé que si no los tomas en cuenta, te vas a romper la cabeza contra la pared o la mesa; una de dos.
Hola si contemple todos los puntos que me dices y lo estoy haciendo de una mabera muy ingeniosa solo me quede trabado en la parte del almacenamiento de los codigos intentados y volver a usar el valor donde fue que se corto la alimentacion.
Solo esa es mi duda cuando lo logre con mucho gusto subire un video mostrado el funcionamiento de este y como tome en cuenta todas las variables que me mencionas.
Ahora la pregunta es:
Como leo un valor almacenado en el archivo de texto y lo uso en una variable dentro el codigo de arduino?
Podria alguien decirme eso?
Porque yo no se como leer esa variable a lo mucho que llegue fue a almacenar los datos.
Para después guardarlo con print() y finalmente cerrar el archivo (paso importante).
Asumiendo que en el archivo únicamente está ese dato, para recuperarlo solamente lo abres para lectura (solo especificas el nombre), y así ya con parseInt() lo tienes de vuelta. Por último cierra el archivo cuando no lo necesites, nunca lo olvides.
Cabe destacar que si el archivo no existe o no se pudo abrir por otros motivos, parseInt() te retornará cero. Una forma fácil de probar que un archivo se haya abierto, es sometiendo la respectiva variable de tipo File a un contexto booleano (ej.: como condición de un if).