Spanish como hacer una app que solo utilice la linterna y pueda atenuar su brillo

Juan edwin

Member
saludos a todos
Quiero hacer una aplicación simple con un botón para encender la linterna y un control deslizante para atenuar el brillo de la luz de la linterna, se podrá, lo quiero para un Samsung J7 Android 6.
saludos
 

TILogistic

Expert
Licensed User
Longtime User
La modulación por ancho de pulso (PWM) es una técnica que permite controlar la potencia promedio entregada a un dispositivo mediante la variación del ancho de los pulsos en una señal digital. En esencia, se utiliza una señal cuadrada que alterna entre encendido y apagado, y la cantidad de tiempo que la señal permanece en estado alto (encendida) en relación con el tiempo total del ciclo determina la potencia promedio. Esta técnica es ampliamente utilizada en electrónica para controlar la velocidad de motores, la intensidad de luces LED, y en fuentes de alimentación conmutadas, entre otros.

Test:

Agrega permisos en el manifiesto para usar cámara y linterna:
XML:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
B4X:
Sub Process_Globals
    Dim cm As JavaObject
    Dim cameraId As String
    Dim timerPwm As Timer
    Dim pwmDutyCycle As Int ' 0 a 100 %
    Dim pwmCounter As Int
End Sub

Sub Globals
    Dim seekBar1 As SeekBar
    Dim btnStart As Button
    Dim btnStop As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout1") ' Con seekBar1, btnStart, btnStop
    cm = JavaObject.InitializeContext.RunMethod("getSystemService", Array("camera"))
    Dim cameraIdList As JavaObject = cm.RunMethod("getCameraIdList", Null)
    cameraId = cameraIdList.RunMethod("get", Array(0))

    timerPwm.Initialize("timerPwm", 50) ' 50ms ciclo timer

    seekBar1.Max = 100
    seekBar1.Progress = 100 ' brillo máximo por defecto
    pwmDutyCycle = 100
    pwmCounter = 0

    btnStart.Enabled = True
    btnStop.Enabled = False
End Sub

Sub seekBar1_ProgressChanged (Value As Int, UserChanged As Boolean)
    pwmDutyCycle = Value ' Actualiza el ciclo de trabajo
End Sub

Sub btnStart_Click
    timerPwm.Enabled = True
    btnStart.Enabled = False
    btnStop.Enabled = True
End Sub

Sub btnStop_Click
    timerPwm.Enabled = False
    TurnOffFlash()
    btnStart.Enabled = True
    btnStop.Enabled = False
End Sub

Sub timerPwm_Tick
    pwmCounter = (pwmCounter + 10) Mod 100
    If pwmCounter < pwmDutyCycle Then
        TurnOnFlash()
    Else
        TurnOffFlash()
    End If
End Sub

Sub TurnOnFlash
    cm.RunMethod("setTorchMode", Array(cameraId, True))
End Sub

Sub TurnOffFlash
    cm.RunMethod("setTorchMode", Array(cameraId, False))
End Sub
 
Last edited:
Upvote 0

PaulMeuris

Well-Known Member
Licensed User
I have tested this library example with my Samsung J7 Android version 8.1:
https://www.b4x.com/android/forum/t...tends-the-camera-library-functionality.23801/
I made a new layout just to test the flash mode.
1753266667050.png

Tap on the button to set the flash mode to "torch".
1753266755232.png

Tap on the button again to set the flash mode to "off"
You can find the modified version in the attachment.
I haven"t tested the code from @TILogistic yet to set the intensity.
 

Attachments

  • Camera.zip
    14.6 KB · Views: 24
Upvote 0

TILogistic

Expert
Licensed User
Longtime User
El ejemplo solo controla el flash con cm.RunMethod("setTorchMode", Array(cameraId, True/False))
NO abre la cámara, solo enciende/apaga el flash LED
como linterna

Para la cámara debes usar la API Camera2
 
Upvote 0

TILogistic

Expert
Licensed User
Longtime User
see:
 
Upvote 0

Juan edwin

Member
a habido algunos problemillas pero gracias de todas formas por tu ayuda, esto lo veo como un intermitente aunque no lo hace con la velocidad requerida para que simule la atenuacion, sera mi dispositivo... saludos gracias
 
Upvote 0
Top