With ArduinoIDE, you can have a .h tab and #include that tab-name.h in the main .ino and a corresponding-matching .cpp is not required. You will likely need to be responsible for your own function prototyping.
Added example below... .h tab code which relies on a standard .h/.cpp library in the sketch directory:
#include "./MAX31855.h" // Local (embedded) library
int thermoDO = 51; // SPI Data Out
int thermoCS_1 = 52; // first EGT thermocouple amp Chip Select
int thermoCLK = 53; // common SPI clock to both 31855s
int thermoCS_2 = 50; // second EGT thermocouple amp Chip Select used in Europa design
int8_t addr_0 = 36; // 2^0 Addressline 0 going to analog mux
int8_t addr_1 = 34; // 2^1 Addressline 1 going to analog mux
int8_t addr_2 = 32; // 2^2 Addressline 2 going to analog mux
int8_t addr_3 = 30; // 2^3 Addressline 3 going to analog mux
/* CONCEPT
* A single MAX31855 chip will be used in conjunction (front-ended) by a 16 channel analog switch. channel_address_ 0-3 will be set HIGH/LOW
* to represent 0 through 15 address. Then, after settling delay(?) the thermocouple object will be called similarily to below. Address will
* be incremented, allowed to settle, and the thermocouple object called again. These calls must take place from within tab JSON and a small
* function created so it can be called from the main program loop on tab: Engine_Monitor_1. Each JSON function must print a unique identifier
* so that the downstream CodeRed program can select the tag, convert to a numeric and assign a label.
*/
MAX31855 thermocouple_(thermoCLK, thermoCS_2, thermoDO);
// ________________________________________________________________________SPI bus #1
float thermocouple_channel( int mux_address) {
switch(mux_address) {
case 0:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, LOW); digitalWrite(addr_2, LOW); digitalWrite(addr_3, LOW);
break;
case 1:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, LOW); digitalWrite(addr_2, LOW); digitalWrite(addr_3, LOW);
break;
case 2:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, LOW); digitalWrite(addr_3, LOW);
break;
case 3:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, LOW); digitalWrite(addr_3, LOW);
break;
case 4:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, LOW); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, LOW);
break;
case 5:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, LOW); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, LOW);
break;
case 6:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, LOW);
break;
case 7:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, LOW);
break;
case 8:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, LOW); digitalWrite(addr_2, LOW); digitalWrite(addr_3, HIGH);
break;
case 9:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, LOW); digitalWrite(addr_2, LOW); digitalWrite(addr_3, HIGH);
break;
case 10:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, LOW); digitalWrite(addr_3, HIGH);
break;
case 11:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, LOW); digitalWrite(addr_3, HIGH);
break;
case 12:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, LOW); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, HIGH);
break;
case 13:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, LOW); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, HIGH);
break;
case 14:
digitalWrite(addr_0, LOW); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, HIGH);
break;
case 15:
digitalWrite(addr_0, HIGH); digitalWrite(addr_1, HIGH); digitalWrite(addr_2, HIGH); digitalWrite(addr_3, HIGH);
break;
}
delay(75);
float temp = 0.00;
double c = thermocouple_.readCelsius();
if (isnan(c)) {
// error code here
} else {
temp = thermocouple_.readInternal() ;
temp = thermocouple_.readFarenheit() ;
}
return (temp) ;
}