With the ESP8266 I want to make a frequency generator to generate frequencies from 50 to 500 Hz.
However, the way I generate frequencies, these are very volatile. For example, at 50 Hz it varies from 49.2 to 50.8 Hz.
Is there any other option than the one I use?
However, the way I generate frequencies, these are very volatile. For example, at 50 Hz it varies from 49.2 to 50.8 Hz.
Is there any other option than the one I use?
B4X:
Sub Process_Globals
Public Serial1 As Serial
Private wifi As ESP8266WiFi
Private astream As AsyncStreams
Private f_out As Pin
Private led_out As Pin
Dim bstring(100) As String
Dim pulse_h As Int = 2
Dim pulse_l As Int = 900
Dim led_h As Int : led_h = (pulse_l + pulse_h) / 2
Dim stevec1 As Int :stevec1 = 0
Dim pulse_timer As Timer
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
astream.Initialize(Serial1.Stream, "astream_newdata", Null)
Log("Connected: ", wifi.Connect2("usr", "pswd")) 'change as needed
Log("AppStart Now")
f_out.Initialize(16, f_out.MODE_OUTPUT) 'GPIO16 - pulse
led_out.Initialize(5,led_out.MODE_OUTPUT) 'GPIO05 - LED
pulse_timer.Initialize("pulse_timer_Tick",0.01)
pulse_timer.Enabled = True
TimeNIST.Start
AddLooper("Looper1")
End Sub
Private Sub Looper1
'stevec1 = stevec1 + 1
If stevec1 = 1 Then
f_out.DigitalWrite(True) 'pulse ON
led_out.DigitalWrite(True) 'LED on
End If
If stevec1 = pulse_h Then
f_out.DigitalWrite(False) 'pulse OFF
End If
If stevec1 = led_h Then
led_out.DigitalWrite(False) 'LED OFF
End If
If stevec1 = pulse_l Then
stevec1 = 0
End If
End Sub
Sub pulse_timer_Tick
stevec1 = stevec1 + 1
' Select Case stevec1
' Case 1
' f_out.DigitalWrite(True) 'pulse ON
' led_out.DigitalWrite(True) 'LED on
' Case pulse_h
' f_out.DigitalWrite(False) 'pulse OFF
' Case led_h
' led_out.DigitalWrite(False) 'LED OFF
' Case pulse_l
' stevec1 = 0
' End Select
' If stevec1 = 1 Then
' f_out.DigitalWrite(True) 'pulse ON
' led_out.DigitalWrite(True) 'LED on
' End If
' If stevec1 = pulse_h Then
' f_out.DigitalWrite(False) 'pulse OFF
' End If
' If stevec1 = led_h Then
' led_out.DigitalWrite(False) 'LED OFF
' End If
'
' If stevec1 = pulse_l Then
' stevec1 = 0
' End If
End Sub
Sub astream_NewData (Buffer() As Byte) 'Data from Bluetooth HM-11
Dim bc As ByteConverter
Dim ptr As Int = 0
For Each s() As Byte In bc.Split(Buffer,",")
If ptr > Buffer.Length - 1 Then Exit
bstring(ptr) = bc.StringFromBytes(s)
ptr = ptr + 1
Next
'Log("ptr = : " , ptr)
'Log("Buffer Lenght = : " , Buffer.Length)
'For x = 0 To ptr
' Log(bstring(x))
'Next
dekodiraj
End Sub
Private Sub dekodiraj
If bstring(0) = "S" Then
pulse_h = bstring(1)
pulse_l = bstring(2)
led_h = (pulse_h + pulse_l)/2
'Log("Pulse_h: " , pulse_h, " Pulse_l: " , pulse_l)
End If
If bstring(0) = "Time" Then
get_time
End If
End Sub
Public Sub get_time
TimeNIST.Start
Log("Date: ", TimeNIST.GetDate)
Log("Time (UTC): ", NumberFormat(TimeNIST.GetHours, 2, 0), ":", NumberFormat(TimeNIST.GetMinutes, 2, 0), _
":", NumberFormat(TimeNIST.GetSeconds, 2, 0))
End Sub
Last edited: