NEIN ich hab geschrieben das es im Sketch bereits vorhanden ist
EDIT:
DAS hier ist der Sketch, der verwendet wird für das menü mit den Funktionen zum Konfigurieren des Moduls:
//Parametrierung 433 MHz HC-12 Modul
//Code fuer Arduino
//Author Retian
//Version 1.0
//Prototypen
void zeigeMenue(void);
void aendereBaudrate(void);
void aendereKanal(void);
void aendereModus(void);
void aendereSendeleistg(void);
void warteAufAntwort(void);
void testeSchlafModus(void);
void scanBaudRate(void);
#define rxPin 3
#define txPin 4
#define setPin 5
#include <MySerialRead.h>
#include <SoftwareSerial.h>
MySerialRead SRead;
SoftwareSerial SWSerial(rxPin, txPin);
byte inByte;
char inChar;
byte readDelay = 200; //Verzoegerung vor Lesevorgang
long baudRate;
char atCommand[12];
char kanal[4];
void setup() {
Serial.begin(115200);
pinMode(setPin, OUTPUT);
digitalWrite(setPin, LOW);
//Nach Low-Setzen des SET-Pin mindestens 40 ms vor dem AT-Kommando warten
delay(40);
Serial.println(F("Parametrierung 433 MHz HC-12 Modul"));
Serial.println(F("Version 1.0"));
Serial.println();
scanBaudRate();
Serial.println();
zeigeMenue();
}
void loop() {
atCommand[0] = '\0'; //letztes AT-Kommando loeschen
Serial.print(F("\nEingabe: "));
if (SRead.readByte(&inByte, SERIAL_WAIT))
{
Serial.println(inByte);
if (inByte == 0) zeigeMenue();
else if (inByte == 1)
{
Serial.println(F("Teste Kommunikation"));
strcpy(atCommand, "AT");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 2)
{
Serial.println(F("Zeige Baudrate"));
strcpy(atCommand, "AT+RB");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 3)
{
Serial.println(F("Zeige Kanal"));
strcpy(atCommand, "AT+RC");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 4)
{
Serial.println(F("Zeige Uebertragungsmodus"));
strcpy(atCommand, "AT+RF");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 5)
{
Serial.println(F("Zeige Sendeleistung"));
strcpy(atCommand, "AT+RP");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 6)
{
Serial.println(F("Zeige alle Parameter"));
strcpy(atCommand, "AT+RX");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 9)
{
Serial.println(F("Zeige Firmware Version"));
strcpy(atCommand, "AT+V");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 12) aendereBaudrate();
else if (inByte == 13) aendereKanal();
else if (inByte == 14) aendereModus();
else if (inByte == 15) aendereSendeleistg();
else if (inByte == 20) testeSchlafModus();
else if (inByte == 95)
{
Serial.print(F("Baudrate: "));
Serial.println(baudRate);
}
else if (inByte == 96) scanBaudRate();
else if (inByte == 97)
{
Serial.println(F("Ruecksetzen auf Werkseinstellung"));
strcpy(atCommand, "AT+DEFAULT");
SWSerial.write(atCommand);
warteAufAntwort();
}
else if (inByte == 98)
{
Serial.println(F("Einstellungen uebernehmen!"));
digitalWrite(setPin, HIGH); //SET-Modus beenden (HC-12 fuehrt Reset aus)
Serial.println(F("Kontrolle des Ruhestromverbrauchs jetzt moeglich!"));
Serial.println(F("Weiter mit beliebiger Zahl!"));
if (SRead.readByte(&inByte, SERIAL_WAIT));
digitalWrite(setPin, LOW); //SET-Modus starten
delay(40);
scanBaudRate();
}
else if (inByte == 99)
{
digitalWrite(setPin, HIGH);
Serial.println(F("Programm beendet!"));
Serial.println(F("Fuer weitere Parametrierung"));
Serial.println(F("Programm neu starten"));
while (1);
}
else Serial.println(F("Ungueltige Eingabe!"));
}
}
void zeigeMenue()
{
Serial.println(F("Menu:"));
Serial.println(F(" 0 ... Zeige Menue"));
Serial.println(F(" 1 ... Teste Kommunikation"));
Serial.println(F(" 2 ... Zeige Baudrate"));
Serial.println(F(" 3 ... Zeige Kanal"));
Serial.println(F(" 4 ... Zeige Uebertragungsmodus"));
Serial.println(F(" 5 ... Zeige Sendeleistung"));
Serial.println(F(" 6 ... Zeige alle Parameter"));
Serial.println(F(" 9 ... Zeige Firmware Version"));
Serial.println(F("12 ... Aendere Baudrate"));
Serial.println(F("13 ... Aendere Kanal"));
Serial.println(F("14 ... Aendere Uebertragungsmodus"));
Serial.println(F("15 ... Aendere Sendeleistung"));
Serial.println(F("20 ... Teste Schlafmodus"));
Serial.println(F("96 ... Scanne Baudrate"));
Serial.println(F("97 ... Ruecksetzen auf Werkseinstellung"));
Serial.println(F("98 ... Einstellungen uebernehmen"));
Serial.println(F("99 ... Einstellungen uebernehmen und Programm beenden"));
}
void aendereBaudrate()
{
bool baudRateGesperrt = false;
long maxBaudRate = 115200;
char modus[4];
byte i = 0;
char inStr[10];
SWSerial.write("AT+RF");
delay(readDelay);
while (SWSerial.available())
{
inStr[i] = SWSerial.read();
i++;
}
inStr[i] = '\0';
strcpy(modus, "FU4");
if (strstr(inStr, modus)) maxBaudRate = 1200;
strcpy(modus, "FU2");
if (strstr(inStr, modus)) maxBaudRate = 4800;
Serial.println(F("Aendere Baudrate"));
Serial.println(F(" 0 .. Abbruch"));
Serial.println(F(" 1 ..... 1200"));
Serial.println(F(" 2 ..... 2400"));
Serial.println(F(" 3 ..... 4800"));
Serial.println(F(" 4 ..... 9600"));
Serial.println(F(" 5 .... 19200"));
Serial.println(F(" 6 .... 38400"));
Serial.println(F(" 7 .... 57600"));
Serial.println(F(" 8 ... 115200"));
Serial.print(F("Eingabe: "));
if (SRead.readByte(&inByte, SERIAL_WAIT))
{
Serial.println(inByte);
if (inByte > 0 && inByte < 9)
{
strcpy(atCommand, "AT+B");
if (inByte == 1) strncat(atCommand, "1200", 4);
else if (inByte == 2)
{
if (maxBaudRate > 2400) strncat(atCommand, "2400", 4);
else baudRateGesperrt = true;
}
else if (inByte == 3)
{
if (maxBaudRate > 4800) strncat(atCommand, "4800", 4);
else baudRateGesperrt = true;
}
else if (inByte == 4)
{
if (maxBaudRate > 9600) strncat(atCommand, "9600", 4);
else baudRateGesperrt = true;
}
else if (inByte == 5)
{
if (maxBaudRate > 19200) strncat(atCommand, "19200", 5);
else baudRateGesperrt = true;
}
else if (inByte == 6)
{
if (maxBaudRate > 38400) strncat(atCommand, "38400", 5);
else baudRateGesperrt = true;
}
else if (inByte == 7)
{
if (maxBaudRate > 57600) strncat(atCommand, "57600", 5);
else baudRateGesperrt = true;
}
else if (inByte == 8)
{
if (maxBaudRate >= 115200) strncat(atCommand, "115200", 6);
else baudRateGesperrt = true;
}
}
else if (inByte == 0)
{
Serial.println(F("Abbruch durch Benutzer!"));
return;
}
else Serial.println(F("Ungueltige Eingabe!"));
}
if (baudRateGesperrt)
{
Serial.println(F("Baudrate gesperrt"));
Serial.print(F("Max. Baudrate: "));
Serial.println(maxBaudRate);
}
else
{
SWSerial.write(atCommand);
warteAufAntwort();
}
}
void aendereKanal()
{
Serial.println(F("Aendere Kanal"));
Serial.println(F("0 ... Abbruch"));
Serial.print(F("Kanal(1-127): "));
if (SRead.readByte(&inByte, SERIAL_WAIT))
{
Serial.println(inByte);
if (inByte >= 1 && inByte <= 127)
{
if (inByte < 10)
{
kanal[0] = '0';
kanal[1] = '0';
kanal[2] = inByte + 48;
kanal[3] = '\0';
}
else if (inByte < 100)
{
kanal[0] = '0';
kanal[1] = (inByte / 10) + 48;
kanal[2] = (inByte % 10) + 48;
kanal[3] = '\0';
}
else
{
kanal[0] = '1';
kanal[1] = ((inByte - 100) / 10) + 48;
kanal[2] = ((inByte - 100) % 10) + 48;
kanal[3] = '\0';
}
strcpy(atCommand, "AT+C");
strncat(atCommand, kanal, 3);
SWSerial.write(atCommand);
}
else if (inByte == 0)
{
Serial.println(F("Abbruch durch Benutzer!"));
return;
}
else Serial.println(F("Ungueltige Zahl!"));
}
warteAufAntwort();
}
void aendereModus()
{
Serial.println(F("Aendere Uebertragungsmodus"));
Serial.println(F(" 0 ... Abbruch"));
Serial.println(F(" 1 ... FU1"));
Serial.println(F(" 2 ... FU2"));
Serial.println(F(" 3 ... FU3"));
Serial.println(F(" 4 ... FU4"));
Serial.print(F("Eingabe: "));
if (SRead.readByte(&inByte, SERIAL_WAIT))
{
Serial.println(inByte);
if (inByte > 0 && inByte < 5)
{
strcpy(atCommand, "AT+FU");
kanal[0] = inByte + 48;
kanal[1] = '\0';
strncat(atCommand, kanal, 1);
SWSerial.write(atCommand);
}
else if (inByte == 0)
{
Serial.println(F("Abbruch durch Benutzer!"));
return;
}
else Serial.println(F("Ungueltige Eingabe!"));
}
warteAufAntwort();
}
void aendereSendeleistg()
{
Serial.println(F("Aendere Sendeleistung"));
Serial.println(F(" 0 ... Abbruch"));
Serial.println(F(" 1 ... -1 dBm"));
Serial.println(F(" 2 ... 2 dBm"));
Serial.println(F(" 3 ... 5 dBm"));
Serial.println(F(" 4 ... 8 dBm"));
Serial.println(F(" 5 ... 11 dBm"));
Serial.println(F(" 6 ... 14 dBm"));
Serial.println(F(" 7 ... 17 dBm"));
Serial.println(F(" 8 ... 20 dBm"));
Serial.print(F("Eingabe: "));
if (SRead.readByte(&inByte, SERIAL_WAIT))
{
Serial.println(inByte);
if (inByte > 0 && inByte < 9)
{
strcpy(atCommand, "AT+P");
kanal[0] = inByte + 48;
kanal[1] = '\0';
strncat(atCommand, kanal, 1);
SWSerial.write(atCommand);
}
else if (inByte == 0)
{
Serial.println(F("Abbruch durch Benutzer!"));
return;
}
else Serial.println(F("Ungueltige Eingabe!"));
}
warteAufAntwort();
}
void testeSchlafModus()
{
Serial.println(F("Teste Schlafmodus"));
strcpy(atCommand, "AT+SLEEP");
SWSerial.write(atCommand);
warteAufAntwort();
digitalWrite(setPin, HIGH); //Mit SET-Modus beenden Schlafmodus aktivieren
Serial.println(F("Kontrolle des Stromverbrauchs im Schlafmodus jetzt moeglich!"));
Serial.println(F("Wecken mit beliebiger Zahl!"));
if (SRead.readByte(&inByte, SERIAL_WAIT));
//Mit SET-Modus starten Schlafmodus beenden,
//anschliessend HC-12 Reset und SET-Modus wieder starten
digitalWrite(setPin, LOW);
delay(50);
digitalWrite(setPin, HIGH); //SET-Modus beenden (HC-12 fuehrt Reset aus)
delay(200);
digitalWrite(setPin, LOW); //SET-Modus starten
delay(40);
Serial.println(F("Schlafmodus beendet!"));
}
void scanBaudRate()
{
//Eingestellte Baudrate ermitteln
baudRate = 600; //Anfangswert fuer die Ermittlung der eingestellten Baudrate
char inString[3];
byte i;
Serial.println(F("Scanne Baudrate des HC-12 Moduls ..."));
do {
if (baudRate == 38400) baudRate *= 1.5;
else baudRate *= 2;
if (baudRate > 115200)
{
Serial.println(F("Keine Kommunikation mit HC-12!"));
return;
}
SWSerial.begin(baudRate);
delay(100);
SWSerial.write("AT");
delay(readDelay);
i = 0;
while (SWSerial.available())
{
inString[i] = SWSerial.read();
i++;
}
}
while (strncmp(inString, "OK", 2) != 0);
Serial.print(F("Baudrate: "));
Serial.println(baudRate);
}
void warteAufAntwort()
{
delay(readDelay);
while (SWSerial.available())
{
inChar = SWSerial.read();
Serial.print(inChar);
delay(2);
}
}