### SDI-12 Sensor Setup and Response Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Instructions/sdi12setupresponse.md This example demonstrates how to set up the datalogger as an SDI-12 sensor and respond to requests from an SDI-12 recorder. It is typically placed within a SlowSequence Do...Loop. ```CRBasic 'Declare Public Variables Public RefTemp, batt_volt 'Main Program BeginProg Scan (1,Sec,0,0) PanelTemp (RefTemp,4000) Battery (batt_volt) NextScan SlowSequence Do SDI12SensorSetup(4,C1,0,4) Delay(1,3,sec) Dim Sdi12Source(4) Dim i,count count = count+1 For i = 1 To 4 Sdi12Source(i) = count + i Next SDI12SensorResponse(SDI12Source) Loop EndProg ``` -------------------------------- ### MQTT Example Program Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Instructions/mqttpublishmeta.md This example demonstrates the setup and usage of MQTT-related instructions within a CRBasic program. It includes defining constants, declaring variables, setting up data tables with sampling and publishing configurations, and the main program logic for data acquisition and conditional MQTT metadata publishing. ```CRBasic ' MQTT Example program Const CSIJSON = 1 Const GEOJSON = 2 'Const publishQoS = 0 'Publishes and does not get ack from broker Const publishQoS = 1'Waits for ack from broker and retries Public PubMeta as Boolean Public PubPublic As Boolean ConstTable (myConstTableTest,0) MQTTPublishConstTable (publishQoS) Const myString As String = "123" Const myDouble As Double = 987.654321 Const publishQoS_1 = 1 Const subscribeQoS_1 = 1 EndConstTable Public batteryVolt, crTemp Public Array(6) As Long Alias Array(1) = my_array(2) Alias Array(5) = my_scaler Dim i as Long Public lon = NaN Public lat = NaN Public alt = NaN Public outstat As Boolean Public lastfile As String * 128 Public filecount As Long Public fhandle as long Public num_read as long Dim GEO_JSON As String * 2000 DataTable (OneMinute,True,-1 ) ' TableFile("USR:OneMin",&H407, 1, 0,60, Sec, outstat,lastfile) TableFile("USR:OneMin",&H20, 1, 0,60, Sec, outstat,lastfile) DataInterval (0,60,Sec, 10) Sample (1,crTemp,FP2) Sample (1,batteryVolt, FP2) Sample (2,Array, Long) 'MQTTPUblishTable(MQTT QoS, Number of records to publish, Interval to publish, format) MQTTPublishTable(publishQoS, 0, 60, Sec, GEOJSON, lon, lat, alt) EndTable 'Main Program BeginProg SetStatus ("USRDriveSize",7500) For i = 1 To 6 Array(i) = i Next i Scan (1,sec,1,0) Battery (batteryVolt) PanelTemp (crTemp,15000) for i = 1 to 6 Array(i) += i Next i If pubmeta then MQttPublishMeta("OneMinute", "crTemp","DoorOpen","-1") MQttPublishMeta("OneMinute", "","test","5") MQttPublishMeta("", "","Test","12") PubMeta = false Endif If pubpublic then MQttPublishPublicTable(1) pubpublic = false EndIf CallTable(OneMinute) If outstat then fhandle = fileopen(lastfile,"r",0) If fhandle then num_read = FileReadLine(fhandle,GEO_JSON,2000) fileclose(fhandle) Endif filecount += 1 Endif NextScan EndProg ``` -------------------------------- ### TimedControl Sequence Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/timedcontrol.md This example demonstrates setting up and executing a timed sequence for SDM-CD16AC ports. It includes initial setup, defining port settings and timings, and dynamic control within the scan loop. Ensure PipelineMode is enabled. ```CRBasic PipeLineMode '***Constants*** Const SCAN_INTERVAL = 100'100 mSec 'Switching Constants Const NumSitesInSeq = 5 Const Scans_Sec = 1000/SCAN_INTERVAL 'Variables. 'The ValveNum Variable is used to Display the active Valve/SDMCD16 Channel Public ValveNum As Long 'The ValveSet Array is used to set the timing for the control of the SDMCD16. Public ValveSet(NumSitesInSeq,2) As Long Public ValveSwitches(5) As Long Public Index As Long 'Flags to Allow manual switching Public SeqActiveFlag As Boolean Public SeqProgramedFlag As Boolean 'Initial Setup of TimedControl sequence TimedControl(NumSitesInSeq,2,Min,1,Index,ValveSet,2) BeginProg 'Load SDMCD16AC Settings for each valve number 'These values are used for manual control ValveSwitches(1) = 2^0'2^0=1 or binary 1, Valve Number 1, SDMCD16 Channel 1 ValveSwitches(2) = 2^1'2^1=2 or binary 10, Valve Number 2, SDMCD16 Channel 2 ValveSwitches(3) = 2^2'2^2=4 or binary 100, Valve Number 3, SDMCD16 Channel 3 ValveSwitches(4) = 2^3'2^3=8 or binary 1000, Valve Number 4, SDMCD16 Channel 4 ValveSwitches(5) = 2^4'2^4=16 or binary 10000, Valve Number 5, SDMCD16 Channel 5 'Load sequence array with valve setings ValveSet(1,1) = 2^0'Valve Number 1, SDMCD16 Channel 1 ValveSet(2,1) = 2^1'Valve Number 2, SDMCD16 Channel 2 ValveSet(3,1) = 2^2'Valve Number 3, SDMCD16 Channel 3 ValveSet(4,1) = 2^3'Valve Number 4, SDMCD16 Channel 4 ValveSet(5,1) = 2^4'Valve Number 5, SDMCD16 Channel 5 'Load sequence array with site timing information, 'The equation allows the values to be entered as seconds rather than counts. ValveSet(1,2) = Scans_Sec*10'10 Seconds on Site 1 ValveSet(2,2) = Scans_Sec*20'20 Seconds on Site 1 ValveSet(3,2) = Scans_Sec*30'30 Seconds on Site 1 ValveSet(4,2) = Scans_Sec*30'30 Seconds on Site 1 ValveSet(5,2) = Scans_Sec*30'30 Seconds on Site 1 'Note that the total number of seconds adds up to 2 minutes SeqActiveFlag = True Scan (SCAN_INTERVAL,mSec,10,0) 'Measure Sensors '(sensor measurements omitted from program) If SeqActiveFlag Then ValveNum=Index If SeqProgramedFlag = False Then ValveSet(1,1) = ValveSwitches(1) ValveSet(1,2) = Scans_Sec*10 TimedControl(NumSitesInSeq,2,Min,1,Index,ValveSet,2) SeqProgramedFlag = True EndIf Else ValveSet(1,1) = ValveSwitches(ValveNum) ValveSet(1,2) = 0 If SeqProgramedFlag = True Then TimedControl(1,0,Min,ValveSwitches(ValveNum),Index,ValveSet,1) SeqProgramedFlag = False EndIf EndIf 'Set the SDMCD16AC SDMCD16AC (ValveSet,1,1) NextScan EndProg ``` -------------------------------- ### Full Program Example with Units Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Instructions/units.md A complete CRBasic program demonstrating variable declaration with units, data table setup, and data collection using Battery and PulseCount instructions. ```CRBasic 'Declare Variables and Units Public Batt_Volt Public Rain_in UnitsBatt_Volt=Volts UnitsRain_in=inch 'Define Data Tables DataTable(Table1,True,-1) DataInterval(0,60,Min,0) Totalize(1,Rain_in,FP2,False) EndTable 'Main Program BeginProg Scan(5,Sec,1,0) 'Default Datalogger Battery Voltage measurement Batt_Volt: Battery(Batt_Volt) 'CS700 Rain Gauge measurement Rain_in: PulseCount(Rain_in,1,P_LL,1,0,0.01,0) 'Call Data Tables and Store Data CallTable(Table1) NextScan EndProg ``` -------------------------------- ### SerialIn Example: Sending and Receiving Data Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/serialin.md This example demonstrates setting up two serial ports for communication, sending a string out on one port, and receiving it back on another. It includes variable declarations, data table setup, and the main program loop. ```CRBasic 'Declare Public Variables Public RefTemp, batt_volt Public Counter Public OutString as string * 1000 Public InString as string * 1000 'Define Data Tables DataTable (Test,1,-1) DataInterval (0,15,Sec,10) Minimum (1,batt_volt,FP2,0,False) Sample (1,RefTemp,FP2) Sample (1,OutString,String) EndTable 'Main Program BeginProg 'Set up communication ports to send and receive data 'jumper wire fromC1 (COM1 TX) to C4 (COM3 RX) SerialOpen(ComC1,115200,0,0,10000) SerialOpen(ComC3,115200,0,0,10000) Scan (1,Sec,0,0) PanelTemp (RefTemp,15000) Battery (Batt_volt) counter = counter + 1 OutString = "enter output string here " + counter 'Send String over control port C1(COM1 TX). SerialOut(ComC1,OutString,"",0,100) 'Receive String over comntrol portC4 (COM3 RX). SerialIn(InString,ComC3,100,0,1000) 'Call Output Tables CallTable Test NextScan EndProg ``` -------------------------------- ### ModbusMaster Example: Reading Holding Registers Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/modbusmaster.md This example demonstrates how to use the ModbusMaster instruction to read holding registers from a Modbus slave device. It includes variable declarations, data table setup, and the core ModbusMaster call. Ensure correct COM port, baud rate, Modbus address, function code, variable array, start address, length, tries, and timeout are specified. ```CRBasic 'Declare Public Variables Public PTemp, batt_volt,ModbusData(20),Result 'Define Data Tables DataTable (Test,1,-1) DataInterval (0,15,Sec,10) Minimum (1,batt_volt,FP2,0,False) Sample (1,PTemp,FP2) Sample (1,ModbusData(),FP2) EndTable 'Main Program BeginProg Scan (1,Sec,0,0) PanelTemp (PTemp,15000) Battery (Batt_volt) 'Retrieve Modbus Data ModbusMaster(Result,COMRS232,115200,3,3,ModbusData(),1,10,3,100) 'Enter other measurement instructions 'Call Output Tables CallTable Test NextScan EndProg ``` -------------------------------- ### LI7200 Instruction Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/li7200.md This example demonstrates the setup and usage of the LI7200 instruction within a CRBasic program. It includes variable declarations, data table setup, and the main program loop incorporating the LI7200 instruction for CO2 and H2O measurements. ```CRBasic Public wind(5) Public irga(5) Alias wind(1) = Ux Alias wind(2) = Uy Alias wind(3) = Uz Alias wind(4) = Ts Alias wind(5) = sonic_diag Alias irga(1) = CO2 Alias irga(2) = H2O Alias irga(3) = agc Alias irga(4) = irga_cell_tmpr Alias irga(5) = irga_cell_press Units wind = m/s Units Ts = C Units sonic_diag = arb Units CO2 = umol/mol Units H2O = mmol/mol Units agc = arb Units irga_cell_tmpr = C Units irga_cell_press = kPa DataTable (ts_data,TRUE,-1) DataInterval (0,0,mSec,10) CardOut (0,-1) Sample (5,Ux,IEEE4) Sample (5,CO2,IEEE4) EndTable 'Main Program BeginProg SDMSpeed (30) Scan (50,mSec,3,0) CSAT3 (Ux,1,3,91,20) LI7200(CO2,1,7,5) CallTable ts_data NextScan EndProg ``` -------------------------------- ### Set Up GOES Transmitter Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/goessetup.md Example of setting up the GOES transmitter using CRBasic. This instruction should only be run once in a datalogger program. ```CRBasic 'NESDIS Assignments 'ID = H0104C186 'ST MsgWindow = 10 sec 'ST Channel = 151 'ST BPS = 100 'Random Channel = 195 'Random BPS = 300 'ST Repeat Interval = one hour 'ST Offset = 10 minutes, 5 sec 'Random Repeat Interval = one hour Public GOESResult BeginProg Scan (1,Sec,3,0) GOESSetup(GOESResult,&H0104C186,10,151,300,195,300,"0_1_0_0" ,"0_10_5" ,"1_0_0" ) NextScan EndProg ``` -------------------------------- ### ModbusServer Example 1: Default Coils Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/modbusserver.md Configures the datalogger as a Modbus server with default coil mapping (C1-C8). This example demonstrates basic setup and data assignment to Modbus input registers. ```CRBasic Public PTemp, batt_volt, ModResult Public ModIn(80) 'Main Program BeginProg ModbusServer(ComRS232,9600,1,ModIn(),0) Scan (2,Sec,0,0) PanelTemp (PTemp,15000) Battery (Batt_volt) ModIn(1) = batt_volt ModIn(2) = PTemp ModIn(3) = ModResult NextScan EndProg ``` -------------------------------- ### Test Server Settings with HTTPGet and HTTPPost Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/httpget.md This example program tests server settings and payload formats using HTTPPost and HTTPGet. It also demonstrates the streaming option for HTTPPost. It requires manual setting of boolean variables (Go, Get, Stream, Manual_Stream) to trigger specific actions. ```CRBasic ' Constants '---------------------------- Const MAINSCANRATE = 1 Const SERVER_URI = "https://xxxxxxxxxxxxxx.m.pipetest.net"'Enter your URI here Const HEADER = "Content-Type: text/plain" ' Public Variables '---------------------------- Public PTemp Public Batt*Volt Public Text_to_Send As String \_30 = "Hello World" Public Data_Record As String * 100 Public Go As Boolean Public PostResult As Long Public Get As Boolean Public GetResult As Long Public Manual_Stream As Boolean Public Manual_S_Result As Long Public Stream As Boolean Public S_Result As Long Public Response As String *500 DataTable (Test,1,-1) DataInterval (0,15,Sec,10) Minimum (1,Batt_Volt,FP2,False,False) Sample (1,PTemp,FP2) EndTable ' Main Program BeginProg Scan (MAINSCANRATE,Sec,0,0) PanelTemp (PTemp,50) Battery (Batt_Volt) CallTable Test NextScan SlowSequence 'Manually set Go = true to test HTTPPost; view results in online test bin. Scan(1,Sec,0,0) If Go = True Then PostResult =HTTPPost(SERVER_URI,Text_to_Send,Response,HEADER) Go = False EndIf 'Manually set Get = True to test HTTPGet; view results in online test bin. If Get = True Then GetResult =HTTPGet(SERVER_URI,Response,HEADER) Get = False EndIf 'Manually set Stream = True to test auto-streaming of data from the Test data table each time a new record is written. If Stream = True Then S_Result =HTTPPost(SERVER_URI,"Test",Response,"",0,0,Sec,32) Stream = False EndIf 'Set Manual_Stream = true to test sending only one table record at a time based on a user-configured trigger. If Manual_Stream = True Then GetRecord (Data_Record,Test,1) Manual_S_Result =HTTPPost(SERVER_URI,Data_Record,Response,HEADER) Manual_Stream = False EndIf NextScan EndProg ``` -------------------------------- ### FileControl Command Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Info/webserverapicommands1.md Sets a program to run on power up. The command includes the file name and action parameter. ```HTTP http://192.168.4.14/?command = filecontrol&file = CPU:tc-fast.cr300&action = 2 ``` -------------------------------- ### CRBasic FileList Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Instructions/filelist.md This example demonstrates how to use the FileList function to get a list of files from the datalogger CPU drive and store them in a string array. Ensure the destination array is appropriately sized. ```CRBasic Public NumFiles, Files(10) As String * 25 BeginProg Scan (1,Sec,3,0) NumFiles=FileList("CPU",Files(1)) NextScan EndProg ``` -------------------------------- ### AM25T Multiplexer Measurement Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/am25t.md This example demonstrates setting up and using the AM25T thermocouple multiplexer with a datalogger. It includes variable declarations, unit definitions, data table setup, and the main program logic for measurements. ```CRBasic 'Declare Variables and Units Public Batt_Volt Public RTemp_C Public Temp_C(10) Units Batt_Volt=Volts Units RTemp_C=Deg C Units Temp_C=Deg C 'Define Data Tables DataTable(Table1,True,-1) DataInterval(0,60,Min,0) Sample(10,Temp_C(),FP2) EndTable 'Main Program BeginProg Scan(30,Sec,1,0) 'Default Datalogger Battery Voltage measurement Batt_Volt: Battery(Batt_Volt) 'AM25T Multiplexer AM25T(Temp_C(),10,mV200C,1,1,TypeT,RTemp_C,C1,C2,VX1,True,0,60,1,0) 'Call Data Tables and Store Data CallTable(Table1) NextScan EndProg ``` -------------------------------- ### Testing Server Settings with HTTPPost and HTTPGet Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/httppost.md This example program is designed to test server settings and payload formats using both HTTPPost and HTTPGet. It also demonstrates the streaming option for HTTPPost. Ensure you replace the placeholder URI with your actual test endpoint. ```CRBasic ' Constants '---------------------------- Const MAINSCANRATE = 1 Const SERVER_URI = "https://xxxxxxxxxxxxxx.m.pipetest.net"'Enter your URI here Const HEADER = "Content-Type: text/plain" ' Public Variables '---------------------------- Public PTemp Public Batt*Volt Public Text_to_Send As String \_30 = "Hello World" Public Data_Record As String * 100 Public Go As Boolean Public PostResult As Long Public Get As Boolean Public GetResult As Long Public Manual_Stream As Boolean Public Manual_S_Result As Long Public Stream As Boolean Public S_Result As Long Public Response As String \*500 DataTable (Test,1,-1) DataInterval (0,15,Sec,10) Minimum (1,Batt_Volt,FP2,False,False) Sample (1,PTemp,FP2) EndTable ' Main Program BeginProg Scan (MAINSCANRATE,Sec,0,0) PanelTemp (PTemp,50) Battery (Batt_Volt) CallTable Test NextScan SlowSequence 'Manually set Go = true to test HTTPPost; view results in online test bin. Scan(1,Sec,0,0) If Go = True Then PostResult =HTTPPost(SERVER_URI,Text_to_Send,Response,HEADER) Go = False EndIf 'Manually set Get = True to test HTTPGet; view results in online test bin. If Get = True Then GetResult =HTTPGet(SERVER_URI,Response,HEADER) Get = False EndIf 'Manually set Stream = True to test auto-streaming of data from the Test data table each time a new record is written. If Stream = True Then S_Result =HTTPPost(SERVER_URI,"Test",Response,"",0,0,Sec,32) Stream = False EndIf 'Set Manual_Stream = true to test sending only one table record at a time based on a user-configured trigger. If Manual_Stream = True Then GetRecord (Data_Record,Test,1) Manual_S_Result =HTTPPost(SERVER_URI,Data_Record,Response,HEADER) Manual_Stream = False EndIf NextScan EndProg ``` -------------------------------- ### Get File Lists from Multiple Drives Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/filelist.md This example demonstrates how to use FileList to get lists of files from the datalogger's CPU, CRD, and USR drives, storing the counts and file names in separate arrays. ```CRBasic Public NumFiles(3), Files(3,10) As String * 25 BeginProg Scan (1,Sec,3,0) NumFiles(1)=FileList("CPU",Files(1,1)) NumFiles(2)=FileList("CRD",Files(2,1)) NumFiles(3)=FileList("USR",Files(3,1)) NextScan EndProg ``` -------------------------------- ### Basic ModbusClient Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic350/Instructions/modbusclient.md This example demonstrates setting up a datalogger to read holding registers from a Modbus server device using the ModbusClient instruction. It includes variable declarations, data table setup, and basic datalogger measurements. ```CRBasic 'Declare Public Variables Public PTemp, batt_volt,ModbusData(20),Result 'Define Data Tables DataTable (Test,1,-1) DataInterval (0,15,Sec,10) Minimum (1,batt_volt,FP2,0,False) Sample (1,PTemp,FP2) Sample (1,ModbusData(),FP2) EndTable 'Main Program BeginProg Scan (1,Sec,0,0) PanelTemp (PTemp,4000) Battery (Batt_volt) 'Retrieve Modbus Data ModbusClient(Result,COMRS232,115200,3,3,ModbusData(),1,10,3,100) 'Enter other measurement instructions 'Call Output Tables CallTable Test NextScan EndProg ``` -------------------------------- ### MQTT PublishMeta Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/mqttpublishmeta.md This example demonstrates the usage of MQTTPublishMeta with different parameters, including specifying a table, field, key, and value. It also shows how to use an empty table parameter for the general metadata topic. ```CRBasic ' MQTT Example program Const CSIJSON = 1 Const GEOJSON = 2 'Const publishQoS = 0 'Publishes and does not get ack from broker Const publishQoS = 1'Waits for ack from broker and retries Public PubMeta as Boolean Public PubPublic As Boolean ConstTable (myConstTableTest,0) MQTTPublishConstTable (publishQoS) Const myString As String = "123" Const myDouble As Double = 987.654321 Const publishQoS_1 = 1 Const subscribeQoS_1 = 1 EndConstTable Public batteryVolt, crTemp Public Array(6) As Long Alias Array(1) = my_array(2) Alias Array(5) = my_scaler Dim i as Long Public lon = NaN Public lat = NaN Public alt = NaN Public outstat As Boolean Public lastfile As String * 128 Public filecount As Long Public fhandle as long Public num_read as long Dim GEO_JSON As String * 2000 DataTable (OneMinute,True,-1 ) ' TableFile("USR:OneMin",&H407, 1, 0,60, Sec, outstat,lastfile) TableFile("USR:OneMin",&H20, 1, 0,60, Sec, outstat,lastfile) DataInterval (0,60,Sec, 10) Sample (1,crTemp,FP2) Sample (1,batteryVolt, FP2) Sample (2,Array, Long) 'MQTTPUblishTable(MQTT QoS, Number of records to publish, Interval to publish, format) MQTTPublishTable(publishQoS, 0, 60, Sec, GEOJSON, lon, lat, alt) EndTable 'Main Program BeginProg SetStatus ("USRDriveSize",7500) For i = 1 To 6 Array(i) = i Next i Scan (1,sec,1,0) Battery (batteryVolt) PanelTemp (crTemp,15000) for i = 1 to 6 Array(i) += i Next i If pubmeta then MQttPublishMeta("OneMinute", "crTemp","DoorOpen","-1") MQttPublishMeta("OneMinute", "","test","5") MQttPublishMeta("", "","Test","12") PubMeta = false Endif If pubpublic then MQttPublishPublicTable(1) pubpublic = false EndIf CallTable(OneMinute) If outstat then fhandle = fileopen(lastfile,"r",0) If fhandle then num_read = FileReadLine(fhandle,GEO_JSON,2000) fileclose(fhandle) Endif filecount += 1 Endif NextScan EndProg ``` -------------------------------- ### AM25T Thermocouple Multiplexer Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Instructions/am25t.md This example demonstrates setting up and using the AM25T thermocouple multiplexer with a datalogger. It includes variable declarations, unit definitions, data table setup, and the main program logic for measurement and storage. ```CRBasic 'Declare Variables and Units Public Batt_Volt Public RTemp_C Public Temp_C(10) Units Batt_Volt=Volts Units RTemp_C=Deg C Units Temp_C=Deg C 'Define Data Tables DataTable(Table1,True,-1) DataInterval(0,60,Min,0) Sample(10,Temp_C(),FP2) EndTable 'Main Program BeginProg Scan(30,Sec,1,0) 'Default Datalogger Battery Voltage measurement Batt_Volt: Battery(Batt_Volt) 'AM25T Multiplexer AM25T(Temp_C(),10,mV34,1,1,TypeT,RTemp_C,C1,C2,VX1,True,0,60,1,0) 'Call Data Tables and Store Data CallTable(Table1) NextScan EndProg ``` -------------------------------- ### PulseCount and PulseCountReset Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic1x/Instructions/pulsecountpulsecountreset.md This example demonstrates how to use PulseCount and PulseCountReset to measure wind speed and store the results in miles per hour. It includes variable declarations, data table setup, and the main program logic. ```CRBasic 'Declare Variables and Units Public Batt_Volt Public WS_mph Units Batt_Volt=Volts Units WS_mph=miles/hour 'Define Data Tables DataTable(Table1,True,-1) DataInterval(0,1,Min,0) Sample(1,WS_mph,FP2) EndTable 'Main Program BeginProg 'zero all pulse counters before starting program PulseCountReset Scan(5,Sec,1,0) 'Default Datalogger Battery Voltage measurement Batt_Volt: Battery(Batt_Volt) '014A Wind Speed Sensor measurement WS_mph: PulseCount(WS_mph,1,P1,1,1,1.789,1.0) If WS_mph<1.01 Then WS_mph=0 'Call Data Tables and Store Data CallTable(Table1) NextScan EndProg ``` -------------------------------- ### GOESData Instruction Example Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Instructions/goesdata.md This program sample demonstrates how to configure data tables, take measurements, and use the GOESData instruction to transmit data hourly. It also includes GOESStatus for monitoring transmission success. ```CRBasic 'declarations PUBLIC TCTemp PUBLIC PanelT PUBLIC battery1 DIM SATData DIM SATStatus(13) 'program table DataTable (Tempdata,1,1000) DataInterval (0,1,hr,10) Sample (1,TCTemp,FP2) Sample (1,PanelT,FP2) Sample (1,battery1,FP2) EndTable BeginProg Scan (10,Min,3,0) Battery (battery1) PanelTemp (PanelT,4000) TCDiff (TCTemp,1,mv34,1,TypeT,PanelT,True,0,4000,1.8,32) CallTable TempData If TimeIntoInterval (0,1,Hr) GOESData(SATData,TempData,0,0,1) EndIF If TimeIntoInterval (0,1,Day) GOESStatus (SATStatus,1) EndIF NextScan EndProg ``` -------------------------------- ### AddFile Command Example (Python) Source: https://github.com/philberndt/crbasic-docs/blob/main/docs/CRbasic300/Info/webserverapicommands1.md Uploads a file to the datalogger's /cpu/ directory using Python. Requires authentication credentials. ```python import requests url = "http://192.168.4.14/cpu/" files = {"file": open("testing.cr6", "rb")} auth = ("testing", "testing1234") response = requests.put(url, files=files, auth=auth) print(response.status_code) ```