Guten Tag,
ich habe ein C-Script geschrieben, dass für die Steuerung von Relays zuständig ist. Man soll damit, das jeweilige Relay, der im Array 'RelayPin' festgelegten GPIO-Pins,
abhängig von den in der Kommandozeile vorgegebenen Argumenten und Werten, ein- oder ausschalten oder auf Input bzw. Output setzen können.
Die Relays lassen sich per WiringPi schalten, was ich mit einem Test-Script überprüft habe und das hier beigefügte Script lässt sich starten und
gibt die beim Start mitangegebenen Argumente per 'printf("");' auch aus. Allerdings springt das Programm nicht in die if-Verzweigung in die es sollte,
obwohl man den richtigen Befehl angibt. Ich habe es immer mit 'gcc Bewässerung.c -l wiringPi' kompiliert und per './a.out arg1 arg2 arg3' ausgeführt.
Über WiringPi habe ich mich direkt im Script informiert. https://github.com/WiringPi/Wirin…ngPi/wiringPi.h
Trotz intensiver Recherche bin ich zu keinem Ergebniss gekommen und hoffe, dass sich hier jemand findet der mir bei diesem Problem helfen kann.
Sollten weitere Informationen nötig sein, werde ich diese auf Anfrage natürlich baldest gehend liefern.
Vielen Dank im Voraus für jeden sinnvollen Kommentar
Peveros910
//------------------------------------>Module<------------------------------------
#include <stdio.h>
#include <wiringPi.h>
//------------------------------------>Variablen<------------------------------------
#define ON 0
#define OFF 1
int RelayPin[8];
int RelayPin[8] =
{
3,
5,
7,
8,
9,
10,
11,
12
};
//------------------------------------>Funktionen<------------------------------------
//------------>Funktion: 'contains'<------------
int contains(int array[], int value)
{
int contains = 0;
int i;
for (i = 0; i < sizeof(array); i++)
{
if (value == array[i])
{
contains = 1;
}
}
return contains;
}
//------------>Prozedur: 'set_gpio'<------------
void set_gpio(int mode)
{
int i;
for (i = 0; i < sizeof(RelayPin); i++) pinMode(RelayPin[i], mode);
}
//------------>Prozedur: 'set_pin'<------------
void set_pin(int argc, char argv2, char argv3)
{
if ((argc == 3) && (contains(RelayPin, argv2) && ((argv3 == ON) || (argv3 == OFF))))
{
digitalWrite(RelayPin[argv2], argv3);
}
else
{
printf("\nBitte geben Sie eine gültige Pin-Nummer und den gewünschten Zustand an: set_pin [Pin-Nummer] [Zustand]{ON|OFF}");
}
}
//------------------------------------>Programm<------------------------------------
int main(int argc, char *argv[])
{
printf("--------------------------------------------'%s'--------------------------------------------\n", argv[0]);
if (argc > 1) printf("\nFolgende Argumente:\n");
int i;
for (i = 1; i < argc; i++) printf("- %d: '%s'\n", i, argv[i]);
printf("\nAnzahl der Argumente = '%d'\n", (argc - 1));
wiringPiSetupSys();
if (argc == 1)
{
printf("\nGeben Sie weitere Argumente an, wie z.B.:\n\n'setup_gpio'/'unset_gpio'\n'set_relay'\n\n");
}
//------------>Befehl: 'setup_gpio'<------------
if (argv[1] == "setup_gpio")
{
printf("In 'setup_gpio'!\n");
int i;
for (i = 0; i < sizeof(RelayPin); i++)
{
set_pin(3, RelayPin[i], OFF);
}
set_gpio(OUTPUT);
if (argc > 2)
{
printf("\nAlle auf 'setup_gpio' folgenden Argumente wurden ignoriert.\n");
}
}
//------------>Befehl: 'set_relay'<------------
if (argv[1] == "set_relay")
{
printf("In 'set_relay'!\n");
if (argc = 3)
{
int arg2 = (argv[2] + 1);
printf("arg2 = %s\n", arg2);
set_pin(argc, arg2, argv[3]);
}
else
{
printf("\nBitte geben sie das zu schaltende Relay und den gewünschten Zustand an!\n\nset_relay [RelayNummer] [Zustand]{ON/OFF}");
}
}
//------------>Befehl: 'unset_gpio'<------------
if (argv[1] == "unset_gpio")
{
int i;
for (i = 0; i < sizeof(RelayPin); i++)
{
set_pin(3, RelayPin[i], OFF);
}
set_gpio(INPUT);
if (argc > 2)
{
printf("Alle auf 'unset_gpio' folgenden Argumente wurden ignoriert.\n");
}
}
}
Alles anzeigen