No to po to tu klikamy żeby ludzie nauczyli się inaczej patrzeć na sprawy programowania. Trzeba się nauczyć trochę sprytu.
Nie chcemy by program tam utknął na sekundę bo potem bedzie to na pewno przeszkadzać w jego rozbudowie.
Masz tak podzielone programowe odmierzanie czasu że możesz przecież te sekundę odliczyć gdzie indziej.
Na dodatek przerobiłem program tak, by odczyty były sprzed sekundy, świeże

Tak więc jeśli w 60 sekundzie sprawdzamy odczyty to dlaczego nie zainicjować pomiarów w 59 sekundzie

Tak wiec też zrobiłem.
Dodatkowo ustawiam jedną zmienną do odmierzenia czasu do wyłączenia ESP.
Równie dobrze mogłoby tam pisać "Odczekaj = 2" i wtedy tylko tam gdzie program jest co sekundę napisałbym "If Odczekaj > 0 Then Decr Odczekaj" itd..
$regfile = "m328pdef.dat"
$crystal = 11059200
$baud = 19200
$hwstack = 128
$swstack = 64
$framesize = 64
Config Submode = New
Config Timer0 = Timer , Prescale = 1024 , Compare A = Disconnect , Compare B = Disconnect , Clear Timer = 1
Enable Compare0a : On Compare0a Int_10ms Nosave : Compare0a = 107 '10ms @11MHz 107
Dim 10ms As Byte , 100ms As Byte , 1s As Byte
Dim T As Integer , S As String * 5
Dim Temp_slonce As String * 5 , Temp_zew As String * 5 , Temp_grunt As String * 5
Dim Humid As Byte , Sensor_data As String * 40 , Tmp_str8 As String * 8 , Count As Byte
Dim Odczekaj As Byte
Config Portb.0 = Output : Portb.0 = 0 : Esp_zasilanie Alias Pinb.0
'-- Temperatura
Sub Temperatura(byval N As Byte)
1wreset Pind , N
1wwrite &HCC , 1 , Pind , N
1wwrite &HBE , 1 , Pind , N
T = 1wread(2 , Pind , N)
T = T * 10
T = T / 16
S = Str(t)
S = Format(s , "##.#")
Select Case N
Case 4
Temp_slonce = S
Case 5
Temp_zew = S
Case 6
Temp_grunt = S
End Select
'## Pomiary bedą uruchamiane na 1s przed odczytem
'1wreset Pind , N
'1wwrite &HCC , 1 , Pind , N
'1wwrite &H44 , 1 , Pind , N
End Sub
'-- Wilgotno?a
Dht_put Alias Portd.7
Dht_get Alias Pind.7
Dht_io_set Alias Ddrd.7
Sub Dht
Count = 0
Sensor_data = ""
Set Dht_io_set
Reset Dht_put
Waitms 25
Set Dht_put
Waitus 40
Reset Dht_io_set
Waitus 40
If Dht_get = 1 Then
Humid = 1
Exit Sub
End If
Waitus 80
If Dht_get = 0 Then
Humid = 2
Exit Sub
End If
While Dht_get = 1 : Wend
Do
While Dht_get = 0 : Wend
Waitus 30
If Dht_get = 1 Then
Sensor_data = Sensor_data + "1"
While Dht_get = 1 : Wend
Else
Sensor_data = Sensor_data + "0"
End If
Incr Count
Loop Until Count = 40
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(sensor_data , 8)
Humid = Binval(tmp_str8)
End Sub
Sub Init_pomiar
Local Dallas As Byte
For Dallas = 4 To 6
1wreset Pind , Dallas
1wwrite &HCC , 1 , Pind , Dallas
1wwrite &H44 , 1 , Pind , Dallas
Next
End Sub
Enable Interrupts
Print "START"
Do
If 10ms = 1 Then
10ms = 0
If 100ms < 100 Then
Incr 100ms
Else
100ms = 0
If 1s < 59 Then
Incr 1s
If 1s = 59 Then Call Init_pomiar 'uruchomienie świeżych pomiarów na sekundę przed odczytem
If Odczekaj = 1 Then
Odczekaj = 0
Reset Esp_zasilanie
End If
Else
1s = 0
Set Esp_zasilanie
Call Temperatura(4)
Call Temperatura(5)
Call Temperatura(6)
Call Dht
Print Temp_slonce ; " " ; Temp_zew ; " " ; Temp_grunt ; " " ; Humid
Odczekaj = 1
End If
End If
End If
Loop
End
Int_10ms:
$asm
PUSH R24
!in R24, sreg
PUSH R24
$end Asm
10ms = 1
'Tuned with NoSave Tool
$asm
POP R24
!out sreg, r24
POP R24
$end Asm
Return
Udanego dnia
