complete new logic

This commit is contained in:
Ferit Yiğit BALABAN 2023-09-16 22:00:20 +03:00
parent 8b9ee72d38
commit a8177bd0e3
Signed by: fyb
GPG Key ID: E21FEB2C244CB7EB

69
main.c
View File

@ -16,6 +16,7 @@
#define FAN_PIN 17 #define FAN_PIN 17
#define LOG 1 #define LOG 1
#define LOG_FILE "/var/log/fan_control.log" #define LOG_FILE "/var/log/fan_control.log"
#define STATUS "/var/log/fanstatus"
#define HIGH 1 #define HIGH 1
#define LOW 0 #define LOW 0
@ -33,58 +34,70 @@ int main(int argc, char **argv) {
double temperature; double temperature;
int threshold; int threshold;
int variance; int variance;
int function;
if (argc != 3) { if (argc == 2) {
printf("Expected threshold temperature and variance\n"); if (!strcmp(*(argv + 1), "on")) {
return -1; logMessage("Unexpected token: %s\n", *(argv + 1));
} return 1;
} else
function = 1;
} else if (argc == 3) {
threshold = atoi(*(argv + 1));
variance = atoi(*(argv + 2));
threshold = atoi(*(argv + 1)); if (!threshold) {
variance = atoi(*(argv + 2)); logMessage("Expected integer for threshold temperature: %s\n", *(argv + 1));
return 2;
if (!threshold) { } else if (!variance) {
printf("Expected integer for threshold temperature: %s\n", *(argv + 1)); logMessage("Expected integer for variance: %s\n", *(argv + 2));
return -2; return 3;
} else if (!variance) { } else {
printf("Expected integer for variance: %s\n", *(argv + 2)); function = 0;
return -3; }
} else {
logMessage("Expected threshold temperature and variance\n");
return 4;
} }
if (gpioInitialise() < 0) { if (gpioInitialise() < 0) {
printf("Failed to initialize GPIO.\n"); logMessage("Failed to initialize GPIO.\n");
return 1; return 5;
} }
gpioSetMode(FAN_PIN, PI_INPUT); fanRunning = getFanStatus();
fanRunning = gpioRead(FAN_PIN); logMessage("Fan status: %d\n", fanRunning);
gpioSetMode(FAN_PIN, PI_OUTPUT); gpioSetMode(FAN_PIN, PI_OUTPUT);
fd = open(TEMP_PATH, O_RDONLY); fd = open(TEMP_PATH, O_RDONLY);
if (fd < 0) { if (fd < 0) {
printf("Error opening temperature file\n"); logMessage("Error opening temperature file\n");
return 2; return 6;
} }
if (read(fd, buffer, sizeof(buffer)) < 0) { if (read(fd, buffer, sizeof(buffer)) < 0) {
printf("Error reading temperature\n"); logMessage("Error reading temperature\n");
close(fd); close(fd);
return 3; return 7;
} }
close(fd); close(fd);
temperature = atof(buffer) / 1000.0; temperature = atof(buffer) / 1000.0;
printf("CPU Temperature: %.2f°C\n", temperature); logMessage("CPU Temperature: %.2f°C\n", temperature);
if (!fanRunning && temperature >= threshold + variance) { if (!fanRunning && temperature >= threshold + variance) {
gpioWrite(FAN_PIN, HIGH); fanRunning = HIGH;
printf("Setting pin GPIO17 to HIGH\n"); logMessage("Setting pin GPIO17 to HIGH\n");
} else if (temperature <= threshold - variance) {
gpioWrite(FAN_PIN, LOW);
printf("Setting pin GPIO17 to LOW\n");
} else { } else {
printf("Pin GPIO17 is already HIGH\n"); if (temperature <= threshold - variance) {
fanRunning = LOW;
logMessage("Setting pin GPIO17 to LOW\n");
} else
logMessage("Pin GPIO17 is already HIGH\n");
} }
gpioWrite(FAN_PIN, fanRunning);
writeFanStatus(fanRunning);
gpioTerminate(); gpioTerminate();
return 0; return 0;
} }