Hallo, liebe Community,
ich habe folgende Fehlermeldungen in meinem Programmcode:
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino: In function 'void command()':
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino:249:15: warning: comparison with string literal results in unspecified behavior [-Waddress]
249 | if(hash == "#") { // Eingabe prüfen (Prüfzeichen)
| ~~~~~^~~~~~
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino:249:15: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino:252:18: error: conversion from 'const char*' to 'int' in a converted constant expression
252 | case "s": /* Messung Starten */
| ^~~
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino:252:18: error: could not convert '"s"' from 'const char [2]' to 'int'
252 | case "s": /* Messung Starten */
| ^~~
| |
| const char [2]
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino:258:18: error: conversion from 'const char*' to 'int' in a converted constant expression
258 | case "b": /* Messung Beenden */
| ^~~
C:\Users\Azubi\Documents\Arduino\Send_And_Receive_URS_ADC_in_loop\Send_And_Receive_URS_ADC_in_loop.ino:258:18: error: could not convert '"b"' from 'const char [2]' to 'int'
258 | case "b": /* Messung Beenden */
| ^~~
| |
| const char [2]
exit status 1
Compilation error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Leider stehe ich gerade richtig auf dem Schlauch, erst funktioniert es, dann schreibe ich weiteren Code und es funktioniert genau das nicht mehr was schon funktioniert hat.
void command(void) {
if(SerialUSB.available() > 0) {
String command = SerialUSB.readString();
uint8_t size = sizeof(command);
if(size == 4) { // Prüfen ob Eingabe Richtige länge hat
char hash = (char)command[0]; // String Eingabe aufteilen in -> Prüfzeichen, Status(soll Messung starten oder beenden), Frequenz
char status = (char)command[1];
int freq = (char)command[2] + (char)command[3];
if(hash == "#") { // Eingabe prüfen (Prüfzeichen)
if(freq >= 1 && freq <= 10) { // Eingabe prüfen (Frequenz)
switch(status) { // Eingabe prüfen (Status)
case "s": /* Messung Starten */
frequenz = (freq * 1000);
time = 1000000 / frequenz; // Zeit in µs
start = true;
break;
case "b": /* Messung Beenden */
start = false;
break;
default: /* falsches Zeichen */
SerialUSB.print("e004");
break;
}
} else {
/* Falsche frequenz */
SerialUSB.print("e003");
}
} else {
/* falsches Startzeichen */
SerialUSB.print("e002");
}
} else {
/* falsche Zeichenlänge */
SerialUSB.print("e001");
}
} else {
/* keine Daten im seriellen Buffer */
}
}
Es geht im Grunde um die serielle Eingabe die als String ankommt.
Die einzelnen Zeichen werden gesplittet und char und int gewandelt.
Danach wird geprüft ob die Eingabewerte stimmen und Variablen gesetzt.
Die Variablen
uint32_t mytime;
bool start = false;
uint16_t frequenz;
sind globale Variablen.
Schon im voraus vielen lieben Dank für eure Hilfe!