Autor Tema: codekey  (Leído 2611 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sandra_rcb2000

  • PIC12
  • **
  • Mensajes: 92
codekey
« en: 05 de Agosto de 2003, 15:16:00 »
hola agradezco a todos sus recomendaciones pero no e podido implementarlas porque no e logrado integrarlas correctamente a mi programa.
les anexo el mismo para que se entienda mejor lo que pretendo.
el programa consiste en la activacion de un rele a traves de un teclado 4*3 a manera de cerradura electronica.
el programa consta de dos claves independientes de un digito[7y8]para los usuarios a y b que al ser introducidas a traves del teclado activan un rele por un periodo de 1.5 seg.suficiente para exitar la bobina de una contra electrica asi mismo el programa solo permite 3 intentos para ingresar la clave correcta despues de los cuales activa un buzzer a manera de alarma.
ahora mis preguntas son las siguientes
que modificaciones tengo que hacer para que las claves de acceso sean de 4 digitos y no de 1
me gustaria poder cambiar las claves de acceso a traves del teclado por ejemplo digitando #*
no tengo experiencia en esto de los pics de echo este seria my primer programa bcon una aplicacion plactica
espero puedan ayudarme un beso a todos

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: codekey
« Respuesta #1 en: 06 de Agosto de 2003, 12:38:00 »
Bueno 4 dígitos seria de 0000 a 9999.
Tu utilizas un registro de 8 bits que si lo separas en dos  niebles de 4  seria  00 a 99 si lo trabajas decimal.
Con esto solo tienes dos dígitos.

Ya muchas formas de hacerlo:

Utilizando una variable Word que en realidad son dos registros de 8 bits y te curras los 4 niebles por separado . Con el comando DIG de pbp puede ayudar .

Tambien si no te importa gastar un poco mas de  ram , con arrays byte es facil .

My_clave:
clave[0]=7
clave[1]=5
clave[2]=2
clave[3]=9



chek_clave:
for a=0 to 3
gosub scan_key
if clave[a]=key then

etc,etc
solo es para que te hagas una idea .

la clave la puedes guardar en la eprom interna .

No empieces a escribir un montón de código sin ir provando lo que hace.

enga .

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: codekey
« Respuesta #2 en: 07 de Agosto de 2003, 05:47:00 »
" nos liamos con el comando DIG , pero esto seria una forma de hacerlo
" no dispongo de ningun teclado para provar

Codigo:


MyKey     var word    " tu clave
BufferKey var word    " clave entrada por el teclado
Key       var byte    " tecla pulsada

Intentos  var byte
Digitos   var byte
Temp      var word

"*********************************************************
Intenta:
for  Intentos = 1 to 3
     BufferKey = 0
     Temp = 1000
     for Digitos = 1 to 4                 " buscas 4 digitos
       gosub  scan_key                    " espera tecla pulsada
       if Key = 10 then Intenta           "Tecla cancelar  ejemplo "*" empieza de nuebo
       BufferKey = BufferKey + (Key*Temp)
       Temp = Temp / 10
     next Digitos                        " tienes los 4 digitos en BufferKey

     if BufferKey = MyKey then goto Bingo  "Ok

next Intentos

gosub Error       " error despues de 3 intentos
goto Intenta      " otra vez
"*********************************************************
Bingo:
 "bla
 "bla
goto Intenta

Scan_Key:
 " bla
 " bla
 " si emites un pitido al pulsar la tecla quedara + profesional
 " tecla "0" Key=0 etc.
return

Error:
 "beep
 "bla
 "bla
return




Desconectado sandra_rcb2000

  • PIC12
  • **
  • Mensajes: 92
RE: codekey
« Respuesta #3 en: 08 de Agosto de 2003, 13:27:00 »
no cave duda que un bucle for...next implementado con maestria puede convertirse en una verdadera obra de arte.
e implementado tus sugerencias las cuales funcionan correctamente.anexo el programa que es ya operacional solo aria falta implementar una mejora la posibilidad de cambiar las claves a trabesw del teclado ya que como esta implementado ahora si se quisiera cambiar las mismas abria que gravar nuevamente el pic con las claves nuevas.si alguien en el foro esta en la posibilidad de contribuir con esta mejora o cualquier correccion sera bienvenida.
un beso

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: codekey
« Respuesta #4 en: 08 de Agosto de 2003, 16:14:00 »
la eeprom interna es lo mejor , mira :

Codigo:

Al_resetear:
"calves por de fecto al reprogramar el pic
DATA @0,  $30,$39   "12345 clave contra electrica
DATA @2,  $D4,$31   "54321 clave de panico

clave_contra var word
clave_panico var word
gosub Lee_Claves

Lee_Claves:
 READ 0,clave_contra.highbyte
 READ 1,clave_contra.lowbyte
 READ 2,clave_panico.highbyte
 READ 3,clave_panico.lowbyte
return

Guarda_Claves:
 WRITE 0,clave_contra.highbyte
 WRITE 1,clave_contra.lowbyte
 WRITE 2,clave_panico.highbyte
 WRITE 3,clave_panico.lowbyte
return



haver que puedes hacer con esto , ahora se complica un poco mas , pero si lo haces con pequeñas subrutinas veras kes muy facil.
aHora no tengo tiempo pero ya hare un ejemplo para que lo prueves .

Y ya veo que te manejas con el basic ,Ok solo es cuestion de practicar ahora .
Tiene funciones un poco liadas y sobre dimensionadas , pero si lo alternas con asembler es un cohete.

saluDos ..




Desconectado sandra_rcb2000

  • PIC12
  • **
  • Mensajes: 92
RE: codekey
« Respuesta #5 en: 08 de Agosto de 2003, 18:56:00 »
hola se que tengo mal estructurado mi programa lo poco que se de picbasic lo e conseguido con mucho esfuerzo ya que desafortunadamente en la red hay muy poca informacion al respecto.
intentare implementar tus recomendaciones esta ves si que se ve complicado espero no perderme.
un abraso y un beso desde la tierra del tequila

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: codekey
« Respuesta #6 en: 09 de Agosto de 2003, 07:33:00 »
Codigo:

"****************** inicio *************************************
gosub Lee_Claves       " lee las claves guardadas en la eeprom
                       " recuerda que le has puesto 5 digitos en la clave
                       " y el maximo valor de la clave no puede ser mayor de 65535
                       "
intenta:               "programa principal
gosub Borra_buffer
    gosub scan_key                 " Haver que tecla pulsas ?
    if Key = 11 then               "(#) MODIFICAR  clave
       gosub Cambia_claves
    else
    if Key < 10 then                "se ha pulsado  0..9 -> ya tienes un digito
       gosub  Entra_clave4          "a buscar el resto  de digitos
       if key <> 10 then continua   "se ha cancelado ??
    endif
    endif
goto intenta                        " si pulsas "*" no hace nada

continua:
" case bla , bla
goto intenta
"*****************************************************************

Entra_clave5:                       " entrar 5 digitos por teclado
 gosub Borra_buffer
 gosub scan_key                     "espera el primer digito
 if key=10 then return              "tecla(*) cancelar
Entra_clave4:                       "resto de digitos
 bufferkey=bufferkey + (key*temp)   "ya se ha leido un digito
 temp=temp/10
 for digitos = 1 to 4               "buffer espera los 4 digitos restantes del teclado
    gosub scan_key                  "subrutina que optiene el valor de la tecla pulsada
    if key=10 then return           "tecla(*) cancelar
    bufferkey=bufferkey + (key*temp)
    temp=temp/10
 next digitos
return                              "tienes los 5 digitos en el buffer


Cambia_claves:
Clave_Actualizar var byte

       gosub scan_key                          " que clave cambias ???  1 , 2
       if key = 10 then return                 " cancelado
       if key < 3 then                          " teclas 1 o 2
           Clave_Actualizar = Key               "guardas key
           gosub  Entra_clave5                  "ahora se ha de entrar la clave actual
           if key=10 then return                "cancelado
           Select case  Clave_Actualizar
              case 1                            "** clave contra electrica  **
                 if bufferkey=clave_contra then "premio ¡¡ puedes continuar
                     gosub  Entra_clave5        " aqui se ha de entrar la nueva clave
                     if key=10 then return      "cancelado
                     clave_contra=bufferkey     "cambiada
                 else
                     goto Cambia_claves         "beep clave incorrecta , intenta otra vez ?
                 endif
              case 2                            "** clave de panico **
                "bla
                "bla
                "bla
           End Select
           gosub Guarda_Claves                  "la guardas bien guardada
           return                               "ok
      endif
       "gosub beep has pulsado una obcion  no permitida solo 1 , 2
goto Cambia_claves

Borra_buffer:
 bufferkey=0
 temp=10000
return



¿ funcionará ?
y si tienes cualquier duda , no dudes en decirlo .

Desconectado sandra_rcb2000

  • PIC12
  • **
  • Mensajes: 92
RE: codekey
« Respuesta #7 en: 10 de Agosto de 2003, 17:57:00 »
inplemente el ejemplo que me mandaste pero no funciono
solo me asepta la pri9mera clave 12345,y no cambia las claves,
indicame si estoy equivocada en el procedimiento para cambiar la clave
tecla # +numero de opcion 1 o 2 +clave actual+clave nueva.
ahora intentando cambiar las clavesw por defecto no pude comvertir el numero a bit parte alta,bit parte baja
me explico el numero decimal 12345 tu lo dividiste en dos
partes $30,$39 como ago esto???
espero que puedas hacerme favor de checar el programa ya que estoy segura que tengo un problema de prioridad de instruccion ya que para mi experiencia sea comvertido
en un programa muy grande.
y si pudieras explicarme con manzanas el prosedimiento
que me mandaste ya que lo entiendo en lo general pero no a fondo.
como siempre te agradezco tus comentarios.
un saludo y un beso

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: codekey
« Respuesta #8 en: 11 de Agosto de 2003, 11:35:00 »
Lo tienes todo bien ¡¡¡
solo 3 errores de despiste con la variable cambiada .
no sera por el tekilaaaa... ;
suele pasar , no te preocupes .
lo he probado  con el hardware virtual y he visto lo que hace tu programa .

para cambiar clave_contra pulsas 0 y clave_panico pulsa 1
yo tambien lo puse mal ya que comprobaba si key era < 3
entonces si pulsabas 1 o 2 Ok , pero con el cero entrarias tambien , lo crrecto es if key < 2

con respecto a DATA @0,  $30,$39   "12345 clave contra electrica :

12345 es un valor decimal . $3039 es su equivalente binario . Lo puedes convertir con la calculadora de windows .

 un consejo :
 en vez de usar el  comando high y low usa esto
 error_led=1 : pause 500 : error_led=0
 consume menos memoria de programa y gana velocidad .

Estudialo por partes y veras que no tiene ninguna complicacion .

aqui lo tienes , ya veras que son 3 chorradas .

sisco .




Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: codekey
« Respuesta #9 en: 11 de Agosto de 2003, 11:47:00 »
RE: codekey[/b]

<

Desconectado sandra_rcb2000

  • PIC12
  • **
  • Mensajes: 92
RE: codekey
« Respuesta #10 en: 13 de Agosto de 2003, 08:06:00 »
pue bien aqui lo tienes


 

anything