Link to the video of the problem:
https://drive.google.com/file/d/1AnA7IG ... share_link
Thank you,
Bryanp
The windows form:
Code: Select all
;/ Created with PureVision64 v6.01 x64
;/ Sun, 29 Jan 2023 10:23:18
;/ by Bryan
XIncludeFile "temerature_Constants.pb"
Procedure SizeWindowHandler()
PVX::PVDynamic_Resize(WindowID(EventWindow()))
EndProcedure
BindEvent(#PB_Event_SizeWindow,@SizeWindowHandler())
Procedure.i Window_Form1()
If OpenWindow(#Window_Form1,0,0,600,312,"Temperature Program",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_Invisible)
CreateImageMenu(#MenuBar_Form1,WindowID(#Window_Form1))
MenuTitle("File")
MenuItem(#MenuBar_Form1_New,"New")
MenuBar()
MenuItem(#MenuBar_Form1_Open,"Open")
MenuItem(#MenuBar_Form1_Save,"Save")
MenuBar()
MenuItem(#MenuBar_Form1_Exit,"Exit")
MenuTitle("Settings")
MenuItem(#MenuBar_Form1_Comport,"Serial Port")
ComboBoxGadget(#Gadget_Form1_ComboBox1,50,30,100,20,#PB_ComboBox_Editable)
SetGadgetFont(#Gadget_Form1_ComboBox1,LoadFont(#Gadget_Form1_ComboBox1,"Arial",10))
MenuTitle("Help")
MenuItem(#MenuBar_Form1_Help,"Help")
MenuBar()
MenuItem(#MenuBar_Form1_About,"About")
TextGadget( #Gadget_text_1,200,50,500,20, "Degrees C",#PB_Text_Center)
TextGadget( #Gadget_text_2,200,80,500,20, "Degrees C",#PB_Text_Center)
TextGadget( #Gadget_text_3,200,110,500,20, "Degrees C",#PB_Text_Center)
TextGadget( #Gadget_text_4,200,140,500,20, "Degrees C",#PB_Text_Center)
TextGadget( #Gadget_text_5,200,170,500,20, "Degrees C",#PB_Text_Center)
TextGadget( #Gadget_text_6,200,200,500,20, "Degrees C",#PB_Text_Center)
TextGadget( #Gadget_text_7,0,10,200,20, "Serial Port Select",#PB_Text_Center)
StringGadget(#Gadget_Form1_temp1,170,50,200,20,"")
StringGadget(#Gadget_Form1_temp2,170,80,200,20,"")
StringGadget(#Gadget_Form1_temp3,170,110,200,20,"")
StringGadget(#Gadget_Form1_temp4,170,140,200,20,"")
StringGadget(#Gadget_Form1_temp5,170,170,200,20,"")
StringGadget(#Gadget_Form1_temp6,170,200,200,20,"")
WindowBounds(#Window_Form1,WindowWidth(#Window_Form1),WindowHeight(#Window_Form1),#PB_Ignore,#PB_Ignore)
PVX::PVDynamic_AddWindow(#Window_Form1)
HideWindow(#Window_Form1,#False)
ProcedureReturn WindowID(#Window_Form1)
EndIf
EndProcedure
Code: Select all
;/ Created with PureVision64 v6.01 x64
;/ Sun, 29 Jan 2023 10:27:45
;/ by Bryan Pollock
XIncludeFile "C:\PureVision64\Modules\Module_PVGadgets.pbi"
;- Global Variables and Constants
Global BubbleTipStyle=0
Define EventID,MenuID,GadgetID,WindowID
;- Window Constants
Enumeration 1
#Window_Form1
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue
;- Gadget Constants
Enumeration 1
;Window_Form1
#MenuBar_Form1_TitleFile
#MenuBar_Form1_New
#MenuBar_Form1_Open
#MenuBar_Form1_Save
#MenuBar_Form1_Exit
#MenuBar_Form1_TitleEdit
#MenuBar_Form1_Comport
#MenuBar_Form1_TitleHelp
#MenuBar_Form1_Help
#MenuBar_Form1_About
#Gadget_text_1
#Gadget_text_2
#Gadget_text_3
#Gadget_text_4
#Gadget_text_5
#Gadget_text_6
#Gadget_text_7
#Gadget_Form1_ComboBox1
#Gadget_Form1_temp1
#Gadget_Form1_temp2
#Gadget_Form1_temp3
#Gadget_Form1_temp4
#Gadget_Form1_temp5
#Gadget_Form1_temp6
#SERIAL_PORT_NUM
#SERIAL_PORT
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue
;- MenuBar Constants
Enumeration 1
#MenuBar_Form1
EndEnumeration
#MenuBarIndex=#PB_Compiler_EnumerationValue
Code: Select all
;/ Created with PureVision64 v6.01 x64
;/ Sun, 29 Jan 2023 10:27:45
;/ by Bryan Pollock
Declare GetAvailableComPorts()
Declare Read_Arduino()
Global NewList AvailableComs.s()
XIncludeFile "temerature_Constants.pb"
XIncludeFile "temerature_Windows.pb"
If Window_Form1()
SerialPort.s = GetGadgetText(#Gadget_Form1_ComboBox1)
Define quitForm1=0
Repeat
EventID =WaitWindowEvent()
MenuID =EventMenu()
GadgetID =EventGadget()
WindowID =EventWindow()
Select EventID
Case #PB_Event_CloseWindow
Select WindowID
Case #Window_Form1
quitForm1=1
EndSelect
Case #PB_Event_Menu
Select MenuID
Case #MenuBar_Form1_New
Case #MenuBar_Form1_Open
Case #MenuBar_Form1_Save
Case #MenuBar_Form1_Exit
Case #MenuBar_Form1_Comport
Case #MenuBar_Form1_Help
Case #MenuBar_Form1_About
EndSelect
Case #PB_Event_Gadget
Select GadgetID
Case #Gadget_Form1_ComboBox1
GetAvailableComPorts()
SerialPort.s = GetGadgetText(#Gadget_Form1_ComboBox1)
If Not IsSerialPort(#SERIAL_PORT)
OpenSerialPort(#SERIAL_PORT, SerialPort, 115200, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
EndIf
ForEach AvailableComs()
AddGadgetItem(#Gadget_Form1_ComboBox1, 0,AvailableComs())
Next
Select EventType()
Case #PB_EventType_Change
Case #PB_EventType_Focus
Case #PB_EventType_LostFocus
Default
EndSelect
Case #Gadget_Form1_temp1
Select EventType()
Case #PB_EventType_Change
Case #PB_EventType_Focus
Case #PB_EventType_LostFocus
Default
EndSelect
Case #Gadget_Form1_temp2
Select EventType()
Case #PB_EventType_Change
Case #PB_EventType_Focus
Case #PB_EventType_LostFocus
Default
EndSelect
Case #Gadget_Form1_temp3
Select EventType()
Case #PB_EventType_Change
Case #PB_EventType_Focus
Case #PB_EventType_LostFocus
Default
EndSelect
Case #Gadget_Form1_temp4
Select EventType()
Case #PB_EventType_Change
Case #PB_EventType_Focus
Case #PB_EventType_LostFocus
Default
EndSelect
EndSelect
EndSelect
Read_Arduino()
Until quitForm1
CloseWindow(#Window_Form1)
EndIf
End
Procedure Read_Arduino()
If IsSerialPort(#SERIAL_PORT) > 0
buffer.b
text.s
L.i ;length of the text
text=""
Repeat
While AvailableSerialPortInput(#SERIAL_PORT) > 0
If ReadSerialPortData(#SERIAL_PORT, @Buffer, 1)
Text = Text + Chr(Buffer)
EndIf
Wend
Until Chr(Buffer) = "e"
length=Len(text)
text=Left(text,length)
text1.s = StringField(text,1,",")
SetGadgetText(#Gadget_Form1_temp1,text1)
text2.s = StringField(text,2,",")
SetGadgetText(#Gadget_Form1_temp2,text2)
text3.s = StringField(text,3,",")
SetGadgetText(#Gadget_Form1_temp3,text3)
text4.s = StringField(text,4,",")
SetGadgetText(#Gadget_Form1_temp4,text4)
text5.s = StringField(text,5,",")
SetGadgetText(#Gadget_Form1_temp5,text5)
text6.s = StringField(text,6,",")
SetGadgetText(#Gadget_Form1_temp6,text6)
EndIf
EndProcedure
Procedure GetAvailableComPorts() ;this procedure scans the registry (on win) or dmesg (on linux) to find the connected com ports
Protected hKey, lpcbName, lpName.s, a$, lType, i, j, Dmesg, Fgrep, Port.s
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", 0, #KEY_QUERY_VALUE, @hKey) = #ERROR_SUCCESS
lpName = Space(1024)
Repeat
lpcbName = 1024
If RegEnumValue_(hKey, i, @lpName, @lpcbName, 0, 0, 0, 0) = #ERROR_SUCCESS
a$ = Left(lpName, lpcbName)
If a$ = ""
Break
EndIf
lpcbName = 1024
lType = 0
If RegQueryValueEx_(hKey, a$, 0, @lType, @lpName, @lpcbName) = #ERROR_SUCCESS
AddElement(AvailableComs())
AvailableComs() = lpName
EndIf
i + 1
Else
Break
EndIf
ForEver
RegCloseKey_(hKey)
EndIf
CompilerEndSelect
EndProcedure
#include <arduino.h>
#include <math.h>
using namespace std;
const int samples = 30;
// Kevin at 0 degree C
const double Kelvin = 298.15;
// Resistor at the top of the top of the Thermistor divider for Laser Temp
const double R = 11923.00;
// Thermistor at Room
double therm = 10000.0;
//Beta from datasheet of thermistor
const double beta = 3984.0;
double thermResistance = 0.0;
const int laserTemp1 = A0;
const int laserTemp2 = A1;
const int laserTemp3 = A2;
const int laserTemp4 = A3;
const int laserTemp5 = A4;
const int laserTemp6 = A5;
//int Temp1;
//int Temp2;
//int Temp3;
//int Temp4;
//int Temp5;
//int Temp6;
// the voltage value off the laser temp resistor divider
float laserTempValue1 = 0.0;
float laserTempValue2 = 0.0;
float laserTempValue3 = 0.0;
float laserTempValue4 = 0.0;
float laserTempValue5 = 0.0;
float laserTempValue6 = 0.0;
unsigned long previousMillis = 0;
unsigned long currentTime = millis();
unsigned long previousTime = 0;
unsigned long elapsedTime = 0;
unsigned long interval = 100;
double laserTempValueinC = 0.0;
int sampling(int inputs);
double sendit(int Temp1);
void delayAdc();
void setup() {
// initialize both serial ports:
Serial.begin(115200);
}
void loop() {
sendit(laserTemp1);
//Serial.print("Temp 1: ");
Serial.print(laserTempValueinC);
Serial.print(",");
sendit(laserTemp2);
//Serial.print("Temp 2: ");
Serial.print(laserTempValueinC);
Serial.print(",");
sendit(laserTemp3);
//Serial.print("Temp 3: ");
Serial.print(laserTempValueinC);
Serial.print(",");
sendit(laserTemp4);
//Serial.print("Temp 4: ");
Serial.print(laserTempValueinC);
Serial.print(",");
sendit(laserTemp5);
//Serial.print("Temp 5: ");
Serial.print(laserTempValueinC);
Serial.print(",");
sendit(laserTemp6);
//Serial.print("Temp 6: ");
Serial.print(laserTempValueinC);
Serial.print(",");
Serial.print("e");
;
delay(50);
}
double sendit(int Tempin){
laserTempValue1 = 5.0 * sampling(Tempin) / 1023;
thermResistance = R*laserTempValue1 / ((5.0 - laserTempValue1));
laserTempValueinC = (1/(log(thermResistance/R)/beta+1/298.15))-273.15;
delay(200);
return laserTempValueinC;
}
int sampling(int inputs)
{
int i;
int sample1 = 0;
for (i = 0; i < samples; i++)
{
sample1 = sample1 + analogRead(inputs);
delayAdc();
}
sample1 = sample1 / samples;
return sample1;
}
void delayAdc()
{
previousMillis = currentTime;
if (currentTime - previousMillis >= interval)
previousMillis = currentTime;
}
[/code]