Ich bin leider in Programmierung noch blutiger Laie.

Dummerweise habe ich mir selbst nun eine anspruchsvolle Aufgabe gestellt:
Bis zu 8 Temperatursensoren auslesen und bei überschreiten einer vorgegebenen Temperatur einen Kommandozeilenbefehl absetzen.
Hintergründe:
Die Sensoren sind DS18B20 die über einen AT90USB162-Microchip per USB ausgelesen werden. Mit dem Kommandozeilenbefehl sollen dann an Gembird EG-PMS2 USB-Steckdosenleisten Geräte ausgeschaltet werden.
Das ganze soll eine Terrarien-Überwachung für 8 Terrarien werden, die Wärme-Beleuchtung (BrightSun-Lampen) eines Terrariums soll abgeschaltet werden, wenn eine gewisse Temperatur überschritten wird. Parallel hätte ich die Temperatur gerne auf einem PC-Bildschirm angezeigt. Ich habe kein Zeitlimit für dieses Projekt gesetzt, würde aber gerne im kommenden Frühjahr "fertig" werden können.

Das Programm soll letztlich wie folgt aussehen:
Auf einer GUI soll die Temperatur je Sensor angezeigt werden, als Zuordnung gerne mit Textfeldern davor. (z.B. "Terrarium 1: 25,6°C" )
Die Zieltemperatur für insgesamt 8 Sensoren soll separat eingestellt werden, je Sensor sollen 1-2 Steckdosen abgeschaltet werden, sobald diese Temperatur überschritten wird.
Dazu soll z.B. minütlich die Temperatur abgefragt werden und bei überschreiten des Zielwertes ein Kommandozeilen-Befehl abgesetzt werden.
Beruflich habe ich zwar mit der "Programmierung" von PC-Kassensystemen zu tun, deren "Programmiersprache" ist allerdings sehr einfach, da es nur um Position, Form, Farbe und Funktion von Schaltflächen geht. Ich hoffe aber, das kann mir das Erlernen einer richtigen Programmiersprache etwas erleichtern.
Vorerst möchte ich nur dieses Projekt schreiben, deshalb wünsche ich mir eher einen Quereinstieg, bei dem man mir erklärt, wie mein Programm etwa auszusehen hat und nach was für Programmcode ich suchen muss um oben genannte Wünsche zu erfüllen.
Ich bin der Typ "Learning by doing", Anfängerbücher oder Grundtutorials schaue ich mir zwar gerne an, sie bringen mich aber selten weiter....
Ohje, viel Text...

Ich hoffe, mir kann man mit ein paar Tipps helfen. Sollte mein Thread unpassend sein, bitte melden.
Vielen Dank schonmal! the3of5

Zum Schluss die vorhandene Technik:
Eine Steckdose der Steckdosenleisten kann ich in einer Batch-Datei z.B. mit diesem Befehl ausschalten:
Code: Alles auswählen
start "" "C:\Program Files\Power Manager\pm.exe" -off -Device1 -Socket1
Bisher kann ich damit noch nichts anfangen, ich habe vor, mit CodeBlocks zu arbeiten...
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#if defined(OS_LINUX) || defined(OS_MACOSX)
#include <sys/ioctl.h>
#include <termios.h>
#elif defined(OS_WINDOWS)
#include <conio.h>
#endif
#include "hid.h"
//*----------------------------------------------------------------------------
static char getkey(void);
//*----------------------------------------------------------------------------
int main()
{
int i, r, num, temp;
char c, buf[64], *pwr;
r = rawhid_open(1, 0x16C0, 0x0480, 0xFFAB, 0x0200);
if (r <= 0) {
fprintf(stdout, "No Temp-Sensor found\n");
return -1;
}
fprintf(stdout, "Found Temp-Sensor\n");
while (1) {
//....................................
// check if any Raw HID packet has arrived
//....................................
num = rawhid_recv(0, buf, 64, 220);
if (num < 0) {
fprintf(stdout, "\nError Reading\n");
rawhid_close(0);
return 0;
}
if (num == 64) {
temp = *(short *)&buf[4];
if(buf[2]) { pwr = "Extern"; }
else { pwr = "Parasite"; }
fprintf(stdout, "Sensor #%d of %d: %+.1f\xF8""C Power: %-10s ID: ",
buf[1], buf[0], temp / 10.0, pwr);
for (i = 0x08; i < 0x10; i++) {
fprintf(stdout, "%02X ", (unsigned char)buf[i]);
}
fprintf(stdout, "\n");
}
//....................................
// check if any input on stdin
//....................................
c = getkey();
if(c == 0x1B) { return 0; } // ESC
if(c >= 32) {
fprintf(stdout, "\ngot key '%c', sending...\n", c);
buf[0] = c;
for (i=1; i<64; i++) {
buf[i] = 0;
}
rawhid_send(0, buf, 64, 100);
}
}
}
//*----------------------------------------------------------------------------
#if defined(OS_LINUX) || defined(OS_MACOSX)
// Linux (POSIX) implementation of _kbhit().
// Morgan McGuire, morgan@cs.brown.edu
static int _kbhit() {
static const int STDIN = 0;
static int initialized = 0;
int bytesWaiting;
if (!initialized) {
// Use termios to turn off line buffering
struct termios term;
tcgetattr(STDIN, &term);
term.c_lflag &= ~ICANON;
tcsetattr(STDIN, TCSANOW, &term);
setbuf(stdin, NULL);
initialized = 1;
}
ioctl(STDIN, FIONREAD, &bytesWaiting);
return bytesWaiting;
}
static char _getch(void) {
char c;
if (fread(&c, 1, 1, stdin) < 1) return 0;
return c;
}
#endif
//*----------------------------------------------------------------------------
static char getkey(void)
{
if (_kbhit()) {
char c = _getch();
if (c != 0) return c;
}
return 0;
}
//*----------------------------------------------------------------------------