Hey! My configuration is B4R 4.0, Arduino 2.3.3. ESP32 Wroom. The program for handling OneWire doesn't detect any DS18b20 sensor. In Arduino and the old B4R, the same PCB works fine, so the hardware is correct. What am I doing wrong
B4X:
[CODE=b4x] Sub Process_Globals
Public Serial1 As Serial
Private onewire As OneWire
Private timer1 As Timer
Private bc As ByteConverter
Private address(8) As Byte
Private type_s As Boolean
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
Log("AppStart")
onewire.Initialize(27)
timer1.Initialize("timer1_Tick", 2000)
timer1.Enabled = True
End Sub
Sub Timer1_Tick
If onewire.Search(address) = False Then
onewire.ResetSearch
Log("No more addresses.")
Return
End If
Log("ROM = ", bc.HexFromBytes(address))
If onewire.CRC8(address, 7) <> address(7) Then
Log("CRC is not valid!")
Return
End If
Select address(0)
Case 0x10
Log("Chip = DS18S20")
type_s = True
Case 0x28
Log("Chip = DS18B20")
type_s = False
Case 0x22
Log("Chip = DS1822")
type_s = False
Case Else
Log("Device is not a DS18x20 family device.")
Return
End Select
onewire.Reset
onewire.Select(address)
onewire.Write(0x44, True)
'give it 1 second to read the temperature
CallSubPlus("ReadTemparature", 1000, 0)
End Sub
Private Sub ReadTemparature (u As Byte)
onewire.Reset
onewire.Select(address)
onewire.Write(0xBE, False)
Dim data(12) As Byte
onewire.ReadBytes(data, 9)
Log("Data = ", bc.HexFromBytes(data))
Log("CRC = ", bc.HexFromBytes(Array As Byte(onewire.CRC8(data, 8))))
Dim raw As Int = Bit.Or(Bit.ShiftLeft(data(1), 8), data(0))
If type_s Then
raw = Bit.ShiftLeft(raw, 3)
If data(7) = 0x10 Then
raw = Bit.And(raw, 0xFFF0) + 12 - data(6)
End If
Else
Dim cfg As Byte = Bit.And(data(4), 0x60)
If cfg = 0 Then
raw = Bit.And(raw, Bit.Not(7))
Else if cfg = 0x20 Then
raw = Bit.And(raw, Bit.Not(3))
Else if cfg = 0x40 Then
Bit.And(raw, Bit.Not(1))
End If
End If
Dim celsius As Double = raw / 16
Dim fahrenheit As Double = celsius * 1.8 + 32
Log("Temperature = ", NumberFormat(celsius, 0, 2), " Celsius, " _
, NumberFormat(fahrenheit, 0, 2), " Fahrenheit")
End Sub