complete new logic
This commit is contained in:
parent
8b9ee72d38
commit
a8177bd0e3
61
main.c
61
main.c
@ -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));
|
threshold = atoi(*(argv + 1));
|
||||||
variance = atoi(*(argv + 2));
|
variance = atoi(*(argv + 2));
|
||||||
|
|
||||||
if (!threshold) {
|
if (!threshold) {
|
||||||
printf("Expected integer for threshold temperature: %s\n", *(argv + 1));
|
logMessage("Expected integer for threshold temperature: %s\n", *(argv + 1));
|
||||||
return -2;
|
return 2;
|
||||||
} else if (!variance) {
|
} else if (!variance) {
|
||||||
printf("Expected integer for variance: %s\n", *(argv + 2));
|
logMessage("Expected integer for variance: %s\n", *(argv + 2));
|
||||||
return -3;
|
return 3;
|
||||||
|
} else {
|
||||||
|
function = 0;
|
||||||
|
}
|
||||||
|
} 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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user