Also ich poste hier mal mein "Minimalbeispiel". Es sollte lauffähig sein, wenn man einfach im Browser die IP+/H oder /L oder /P eingibt. Aber die paar Zeilen
if (currentLine.endsWith("GET /P")) {
myServo2.write(90);
delay(1000);
myServo2.write(0);
delay(1000);
myServo2.write(90);
}
führe einfach zum Absturz.
Hier das Minimalbeispiel:
#include <SPI.h>
#include <WiFiNINA.h>
//
#include <Servo.h> // Inkludieren Bibliothek fuer Servo
Servo myServo2;
int counter=0; // Counter fuer das Auslesen der Zufallskartenwerte
int z=-1; // Zaehler zum Speichern der Zufallskartenwerte im integer karte
char scp[128];
int karte[52]; // Speicher-Integer fuer die Zufallskartenwerte zur Weiterverarbeitung
//
char incomingByte; // Eingehende Bytes fuer Trigger Serial Monitor
//
char ssid[] = "CleanCastleAbbey";
char pass[] = "jpxmxcKzus2z";
int keyIndex = 0;
int status = WL_IDLE_STATUS;
//
WiFiServer server(80);
//
//
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// VOID SETUP
//
//
void setup() {
//
Serial.begin(9600); // Starten des Serial Monitors mit Baudrate 9600
Serial.println("bla");
//
while (!Serial) { //Warten, bis die serielle Schnittstelle verbunden ist
;
Serial.println("bla2");
}
//
if (WiFi.status() == WL_NO_MODULE) { // Wenn die Kommunikation mit dem WiFi-Modul fehltschlägt, dann Meldung
Serial.println("Communication with WiFi module failed!");
Serial.println("bla3");
while (true);
}
//
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) { // Wenn die aktuelle Firmware-Version veraltet ist, dann Meldung, dies zu beheben
Serial.println("Please upgrade the firmware");
}
//
while (status != WL_CONNECTED) { // Wenn Kommunikation mit dem WiFi-Modul erfolgreich etabliert, dann Meldungen zu WiFi ausgeben
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
//
server.begin(); // start listening for incoming connections (start listening for clients)
printWifiStatus();
Serial.println("bla4");
//
myServo2.attach(8); // Servo2 wird auf PIN 8 gelegt (Servo zum Kalibrieren)
myServo2.write(0); // Servo2 wird auf Null gefahren
pinMode(7, OUTPUT); // PIN 7 ist ein OUTPUT fuer Kontrolllampe (LED an/aus)
}
//
//
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// VOID LOOP
//
void loop() {
//
//
//
// 1.)
WiFiClient client = server.available(); // Abfrage, ob WiFi-Client verfuegbar ist
if (client) { // Wenn der Client verfuegbar ist, dann
String currentLine= ""; // einen leeren String namens currentLine anlegen
//
while (client.connected()) { // waehrend der Client verfuegbar ist, tue
if (client.available()) { // wenn der Client verfuegbar ist, dann
char c = client.read(); // in c wird die Info, die aus dem Client kommt, geschrieben
//
if (c == '\n') { // wenn ein Newline-Character auftritt ...
if (currentLine.length() == 0) { // ...und die Laenge des Newline-Characters Null ist
client.println("HTTP/1.1 200 OK");
client.println("Content-Type:text/html");
client.println(); // the connection will be closed after completion of the response
client.print("Value at A0 is "); // refresh the page automatically every 5 sec
client.print(analogRead(A0));
client.print("<br>");
client.println();
break;
}
else {
if (counter ==1) { // Programm zum Speichern der als String uebermittelten Zufallszahlen in einem Array karte
z=-1;
Serial.println(F("\nProgrammstart"));
Serial.println(currentLine.indexOf('['));
Serial.println(currentLine.lastIndexOf(']'));
Serial.println(currentLine);
currentLine = currentLine.substring(1 + currentLine.indexOf("["), currentLine.lastIndexOf(']'));
removestr(currentLine, "%22");
Serial.println(currentLine);
removestr(currentLine, "%20");
Serial.println(currentLine);
removestr(currentLine, ",[]");
Serial.println(currentLine);
const char * stri = currentLine.c_str();
Serial.println(stri);
strcpy(scp, stri);
Serial.println(scp);
char * pch;
pch = strtok (scp, ",");
while (pch != NULL)
{
z=z+1;
Serial.print(pch);
Serial.print('\t');
Serial.println(atoi(pch));
karte[z]=atoi(pch); // Achtung !!! karte enthält nicht nur alle Karten, sondern als letzten zahlenbehafteten Eintrag auch die Anzahl der Spieler
pch = strtok (NULL, " ,.-");
}
for(int i = 0; i < 22; i++){
Serial.println(karte[i]);
}
}
counter=counter+1;
//
//
currentLine = "";
}
} else if (c != '\r') { // wenn ein Character in der current line ist, dann
currentLine += c; // currentLine = currentLine +c
}
//
//
// 2.1)
if (currentLine.endsWith("GET /H")) { // wenn die aktuelle Line mit /H endet, dann Test-LED an
digitalWrite(7, HIGH);
Serial.println("check_an");
}
//
//
// 2.2)
if (currentLine.endsWith("GET /L")) { // wenn die aktuelle Line mit /L endet, dann Test-LED aus
digitalWrite(7, LOW);
Serial.println("check_aus");
}
//
//
// 2.4)
if (currentLine.endsWith("GET /P")) { // wenn die aktuelle Line mit /P endet, dann folgt der POKER-CODE
myServo2.write(90);
delay(1000);
myServo2.write(0);
delay(1000);
myServo2.write(90);
}
//
//
//
}
// Ende if client available
} // Ende if client connected
Serial.println("bla5");
client.stop(); // Client stop
} // Ende if client
}
//
// WiFi-Status printen
//
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your board's IP address:
Serial.print(F("IP: "));Serial.println(WiFi.localIP());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
//
//
void removestr(String& aString, const char* str2Remove) {
size_t len = aString.length();
if (len == 0) return ;
size_t len2Remove = strlen(str2Remove);
if (len2Remove == 0) return;
char str[len + 1];
memcpy(str, aString.c_str(), len + 1);
char *readFrom = str;
char *foundAt;
while ((foundAt = strstr(readFrom, str2Remove)) != NULL) {
memmove(foundAt, foundAt + len2Remove, (readFrom + len) - (foundAt + len2Remove) + 1); // move the '\0' at the same time
readFrom = foundAt;
len -= len2Remove;
}
aString = str;
}
Grüße