$regfile = "m8def.dat"
$crystal = 7372800 ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
$hwstack = 32
$swstack = 32
$framesize = 32
Pwr_all Alias Portd.2 'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portd.5
Pwr_video Alias Portd.6
Piezo Alias Portd.4
'Variablen
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5
Dim Quittierung As String * 21
Dim Gpshoehe As String * 5
Dim Gps_zeichen As Byte
Dim Gpsdaten As String * 98
Dim Gps_header As String * 6
Dim Gps_anzahl As Byte
Dim Gps_teilstring(14) As String * 12
Dim Gps_hoehenteilstring(2) As String * 8
Dim Befehls_zeichen As Byte
Dim Befehlsdaten As String * 101
Dim Befehls_header As String * 6
Dim Befehls_anzahl As Byte
Dim Befehls_teilstring(5) As String * 21
Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Dim Temperatur As String * 5
Dim S1_winkel As Byte
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflösen
Pwr_all = 1 ' bei Systemstart Peripherie auf ON
Pwr_gps = 1
Pwr_video = 1
'Portkonfiguration / Initialisierung
Config Pwr_all = Output
Config Pwr_gps = Output
Config Pwr_video = Output
Config 1wire = Portd.3 ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
'Config Lcd = 20 * 4
'Cls
'Cursor Off
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren
Start Adc 'ADC starten
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 128
Open "com1:" For Binary As #1
Open "COMB.7:9600,8,N,1" For Input As #2 'PB.7 = RxD SoftUART / GPS
'Config Servos = 1 , Servo1 = PortB.0 , Reload = 10 'Servos konfigurieren
'Config Portb.0 = Output 'PortB.1 ist Output für Servo1
Declare Sub Xbee ' Senderoutine, um $GROUND#... permanent zu senden
Enable Interrupts
Print "KaprigPRINT"
Sound Piezo , 220 , 227
Waitms 125
Sound Piezo , 220 , 227
Waitms 125
Sound Piezo , 220 , 227
Waitms 125
Waitms 1500
Do
'( 'tests
S1_winkel = 50
Servo(1) = S1_winkel
Waitms 500
S1_winkel = 150
Servo(1) = S1_winkel
')
'==========Temperaturmessung mit DS18B20Z 1Wire============================
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800
1wreset
1wwrite &HCC
1wwrite &HBE
For X = 1 To 9
Temp(x) = 1wread()
Next
Celsius = Makeint(temp(1) , Temp(2))
T = Celsius / 16
Temperatur = Fusing(t , "##.#")
'==========Spannung LiPo 2S messen========================================
Spannung = Getadc(0) ' Zelle messen und berechnen
Zellspannung_orig = Spannung * Adc_multi
Zellspannung_orig = Zellspannung_orig * 2
Zellspannung = Fusing(zellspannung_orig , "#.#")
If Zellspannung_orig <= 6.4 Then ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
Gosub Lipo_saver
End If
Start Adc ' möglicherweise gstoppten ADC ("Lipo_saver") wieder starten
'==========Rx Prüfen auf Befehlseingänge==================================
Befehls_zeichen = Inkey(#1) ' Zeichen einlesen
If Befehls_zeichen = 36 Then Input #1 , Befehlsdaten Noecho ' ist "$" vorhanden, dann Daten/HardUART einlesen >> Befehlsdaten
Befehls_header = Mid(befehlsdaten , 1 , 6) 'ersten 6 Zeichen nach Befehls_header einlesen
If Befehls_header = "KAPRIG" Then 'wenn KAPRIG Befehlssatz, dann
Befehls_anzahl = Split(befehlsdaten , Befehls_teilstring(1) , "#") 'aus Befehlsdaten in 5 Teilstrings/Arrays, getrennt durch "#", aufteilen
Befehlsdaten = "" 'befehlsdaten leeren
Gosub Commands ' Auswertung der Befehle/Teilstrings in Subroutine "commands"
End If
'==========GPS-Auswertung (NL-504ETT)=====================================
Gps_zeichen = Inkey(#2) ' Zeichen einlesen
If Gps_zeichen = 36 Then Input #2 , Gpsdaten Noecho ' ist "$" vorhanden, dann Daten/SoftUART #1 einlesen >> Gpsdaten
Gps_header = Mid(gpsdaten , 1 , 5) 'ersten 5 Zeichen nach Gps_header einlesen
If Gps_header = "GPGGA" Then 'wenn GPGGA Befehlssatz, dann
Cls
Gps_anzahl = Split(gpsdaten , Gps_teilstring(1) , ",") 'aus Gpsdaten in 14 Teilstrings/Arrays, getrennt durch ",", aufteilen
Gps_anzahl = Split(gps_teilstring(10) , Gps_hoehenteilstring(1) , ".") 'Teilstring 10, Höhe xxx.xx, aufteilen in Wert vor dem "."
Gpsdaten = "" 'gpsdaten leeren
Gpshoehe = Gps_hoehenteilstring(1) 'gpshoehe = Höhe in Metern vor dem Komma über Meeresspiegel
End If
Call Xbee ' kontinuierliches Senden der Parameter
Loop
End
'----------------Befehlsbibliothek "Commands"-----------------------------------
Commands:
Select Case Befehls_teilstring(2)
Case "TAKEPHOTO" ' Teilstring(2) auswerten auf "TAKEPHOTO"
Locate 4 , 1
Lcd Befehls_teilstring(2)
Pwr_all = 0
Waitms 500
Pwr_all = 0
Quittierung = "Photo is taken"
Waitms 500
Quittierung = ""
Cls
Pwr_all = 1
Case ""
Case ""
End Select
Select Case Befehls_teilstring(3) ' hier optionale Auswertung von weiteren Teilstrings
Case ""
Locate 4 , 1
Lcd Befehls_teilstring(3) ""
'(
Decr S1_winkel 'um 1 verkleinern
Servo(1) = S1_winkel
Incr S1_winkel 'um 1 erhöhen
Servo(1) = S1_winkel
')
End Select
Return
'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------
Lipo_saver:
Quittierung = "LiPo-Saver!" ' Quittierung an Bodenstation
Stop Adc ' ADC abschalten um Strom zu sparen
Stop Ac ' AC abschalten um Strom zu sparen
Pwr_all = 0 ' testweise Ausgabe PWR_all = 0 --> hier: LED an!
Locate 4 , 1
Print "LiPo-Saver!"
Waitms 500
Quittierung = "" 'Quittierung löschen
Return
'----------------Sonstiges------------------------------------------------------
Sub Xbee
Print "§GROUND#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Gpshoehe ; "#" ; Temperatur ; "#"
End Sub