Science fair: hur exakt är AC line frekvensen? (3 / 4 steg)
Steg 3: Värdprogrammet
Jag ansluten USB-kabeln till en Raspberry Pi, men i princip alla * nix dator med rätt USB-till-seriell drivrutin fungerar.
Värdprogrammet är mycket enkel. Det är bara en kanal från den seriella porten direkt till syslog.
syslog är ett utmärkt val, eftersom det kommer tidsstämpel raderna och hålla dem i roterade loggfiler. Du kan leta efter utgång raderna i /var/log/syslog och aggregera utdata som önskas.
#include < stdio.h >
#include < string.h >
#include < syslog.h >
#include < termios.h >
#include < unistd.h >
int main (int argc, char ** argv) {
daemon (0, 0);
openlog (argv [0], LOG_PERROR, LOG_USER);
Fil * port = fopen ("/ dev/ttyUSB0", "r +");
om (port == NULL) {
perror ("fel öppnar port");
tillbaka 1.
}
struct termios t;
om (tcgetattr(fileno(port) & t)) {
perror ("fel få termios");
tillbaka 1.
}
cfsetspeed (& t, B9600);
cfmakeraw(&t);
om (tcsetattr(fileno(port), 0, & t)) {
perror ("fel inställningen hastighet");
tillbaka 1.
}
While(1) {
char buf [1024];
om (fgets (buf, sizeof(buf), port) == NULL) bryta;
medan (buf[strlen(buf) - 1] == '\015' || buf[strlen(buf) - 1] == "\012")
BUF[strlen(BUF) - 1] = 0;
syslog (LOG_INFO, "Line monitor rapporterar %s", buf);
}
}