Abfrage..senden an LCD ?

Hallo,

bei einer Telnet Abfrage mache ich dass so:

  } else if(cmd.equals("red")) {
      setBacklight(250,0,0);

wenn ich also "Red" in Putty schreibe, wird mein LCD Hintergrund Rot.

Wie mache ich eine "Input"abfrage z.b.:

  } else if(cmd.equals("sendlcd=DER_ZU_SENDENDE_TEXT")) {
      lcd.print(DER_ZU_SENDENDE_TEXT);;

wie bringe ich ihm bei erst nach dem = "DER_ZU_SENDENDE_TEXT" zu senden?.
Hoffentlich ist es verständlich was ich meine.

Bsp.: wie es in Blitzbasic geht ums evtl. Besser auszudrücken:

DER_ZU_SENDENDE_TEXT$ = Input(":")
PRINT "SENDE:"+ DER_ZU_SENDENDE_TEXT$

Ich nehme mal an, Dein "cmd" ist ein String-Objekt (obwohl Du das besser nicht verwendest), dann geht das in etwa so:

} else if ((int pos = cmd.indexOf("sendlcd=")) >= 0) {
  lcd.print(cmd.substring(pos+8));

Vorausgesetzt, der gewünschte Text geht vom Gleichheitszeichen bis zum Stringende. Ansonsten sollte klar geworden sein, wie man sowas macht.

Danke sehr ! werde es morgen Testen,heut dampf mein Schädel...schnell was dagegen machen :grin: !
Hau rein bis denne!

Leider klappt es nicht.Bin leider noch ein Anfänger was die Arduino Sprache betrifft.
Hoffe jemand kann mir Helfen.

bekomme folgenden Fehler wenn ich Compile:

MACTEPTELNET.cpp: In function 'void parseCommand()':
MACTEPTELNET:195: error: expected primary-expression before 'int'
MACTEPTELNET:195: error: expected `)' before 'int'
MACTEPTELNET:198: error: expected `)' before 'else'

Benutze folgenden Code den ich im I-Net gefunden habe:

#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal.h>
#include <Wire.h>

//RGB LCD PIN BELEGUNG:
#define REDLITE 9
#define GREENLITE 8
//#define BLUELITE 10

#define MAX_CMD_LENGTH   25

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int brightness = 250;


byte mac[] = { 
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
IPAddress ip(192,168,0, 177);
IPAddress gateway(192,168,0, 1);
IPAddress subnet(255, 255, 0, 0);

// telnet defaults to port 23
EthernetServer server(23);
EthernetClient client;
boolean connected = false;

String cmd;
int incomingByte;



void setup()
{
  
  lcd.begin(16, 2);

setBacklight(250,0,0);
  lcd.clear();
  lcd.print("Setup Server...");
  delay (1000);
  lcd.clear();
  
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  
  //pinMode(2, OUTPUT);
  //pinMode(7, INPUT_PULLUP);
  
   Serial.begin(9600);
  // this check is only needed on the Leonardo:



  // start the Ethernet connection:
  Serial.println("Trying to get an IP address using DHCP");
  
    lcd.clear();
  lcd.print("Setup DHCP..");
  delay (1000);
  lcd.clear();
  
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
  lcd.clear();
  lcd.print("Setup DHCP..Faild!");
   setBacklight(250,0,0);
  delay (1000);
  lcd.clear();

    // initialize the ethernet device not using DHCP:
    Ethernet.begin(mac, ip, gateway, subnet);
  }
  
      //lcd.clear();
  lcd.print("Setup DHCP..OK");
  setBacklight(0,250,0);
  delay (1000);
  lcd.clear();
  
 
  //delay (1000);
  //lcd.clear();
  // print your local IP address:
  Serial.print("My IP address: ");
 
  ip = Ethernet.localIP();
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(ip[thisByte], DEC);
    Serial.print(".");
    lcd.clear();
 
   lcd.print("Ip Adress :");
      lcd.setCursor(0,1); //<----- ZEILE 2 Waechel
  lcd.print(ip);
  delay (1000);

  lcd.setCursor(0,0); //<----- ZEILE 1 Waechel
  }
  Serial.println();
     
     //delay (2500);
     
     lcd.clear();
    lcd.print(" Server Online");
 
  // start listening for clients
 setBacklight(0,250,0);
}



void loop()
{
    
 
  
  client = server.available();

  if (client == true) {
    if (!connected) {
      client.flush();
      connected = true;
      server.println("Welcome !");
      lcd.clear();
      lcd.print(" User Connected ");
// display each character to the LCD
 
    }

    if (client.available() > 0) {
      readTelnetCommand(client.read());

  
    }

  }



  delay(10);
  
      while (Serial.available() > 0) {
      // display each character to the LCD
      
    }
  
  
}



void readTelnetCommand(char c) {

  if(cmd.length() == MAX_CMD_LENGTH) {
    cmd = "";
  }

  cmd += c;

  if(c == '\n') {
    if(cmd.length() > 2) {
      // remove \r and \n from the string
      cmd = cmd.substring(0,cmd.length() - 2);
      parseCommand();
    
    }
  }
}


void parseCommand() {

  if(cmd.equals("quit")) {
          lcd.clear();
      setBacklight(250,0,0);
      lcd.print("User Disconnect.");
      delay (100); 
    
      client.stop();
      connected = false;
  } else if(cmd.equals("help")) {
      server.println("--- Telnet Server Help ---");
      server.println("red     : switch LCD to Red   Color");
      server.println("green   : switch LCD to Green Color");
      server.println("quit    : close the Connection");
      
      
  } else if(cmd.equals("green")) {
      setBacklight(0,250,0);
  } else if(cmd.equals("red")) {
      setBacklight(250,0,0);
  
 
 } else if ((int pos = cmd.indexOf("sendlcd=")) >= 0) {
  lcd.print(cmd.substring(pos+8));                           /////----HIER HABE ICH DAS EINGETRAGEN
   
} else if(cmd.equals("reboot")) {
      
      server.println("Sending Reboot Signal....");
      Serial.println("CALL:Reboot");
      server.println("Reboot Signal Sended !");
      
      lcd.clear();
      setBacklight(250,0,0);
      lcd.print("Reboot...");
      delay (100);   
      //lcd.clear();
      
      
  
      
  } else {
      server.println("Invalid command, type help");
  }
  cmd = "";
}




void setBacklight(uint8_t r, uint8_t g, uint8_t b) {
// normalize the red LED - its brighter than the rest!
r = map(r, 0, 255, 0, 100);
g = map(g, 0, 255, 0, 150);
r = map(r, 0, 255, 0, brightness);
g = map(g, 0, 255, 0, brightness);
b = map(b, 0, 255, 0, brightness);
// common anode so invert!
r = map(r, 0, 255, 255, 0);
g = map(g, 0, 255, 255, 0);
b = map(b, 0, 255, 255, 0);
//Serial.print("R = "); Serial.println(r, DEC);
//Serial.print("G = "); Serial.println(g, DEC);
//Serial.print("B = "); Serial.println(b, DEC);
analogWrite(REDLITE, r);
analogWrite(GREENLITE, g);
//analogWrite(BLUELITE, b);

}

Bin wie gesagt noch ein Anfänger,also bitte nicht zu streng sein :blush: Hoffe jemand kann mir Helfen mit dem Senden von Nachrichten an mein LCD.
Kann man eigentlich auch ein Passwort Schutz einbauen, damit nicht jede X beibiege Person auf den Server Connecten kann ?

Vielen Dank für eure Zeit fürs Lesen.Freue mich auf Antworten.
Lg Michael.

Das war nicht zum Buchstaben-für-Buchstaben-Kopieren gedacht. Du hattest Deinen Code nicht gepostet, sondern nur einen kleinen Ausschnitt, dann musst Du schon die korrekten Anpassungen machen.

In Deinen Code müsste das so aussehen:

void parseCommand() {
  int pos;
  if(cmd.equals("quit")) {
    lcd.clear();
    setBacklight(250,0,0);
    lcd.print("User Disconnect.");
    delay (100); 

    client.stop();
    connected = false;
  } 
  else if(cmd.equals("help")) {
    server.println("--- Telnet Server Help ---");
    server.println("red     : switch LCD to Red   Color");
    server.println("green   : switch LCD to Green Color");
    server.println("quit    : close the Connection");
  } 
  else if(cmd.equals("green")) {
    setBacklight(0,250,0);
  } 
  else if(cmd.equals("red")) {
    setBacklight(250,0,0);
  } 
  else if ((pos = cmd.indexOf("sendlcd=")) >= 0) {
    lcd.print(cmd.substring(pos+8));
  } 
  else if(cmd.equals("reboot")) {
    server.println("Sending Reboot Signal....");
    Serial.println("CALL:Reboot");
    server.println("Reboot Signal Sended !");

    lcd.clear();
    setBacklight(250,0,0);
    lcd.print("Reboot...");
    delay (100);   
    //lcd.clear();
  } 
  else {
    server.println("Invalid command, type help");
  }
  cmd = "";
}

Übrigens: ist Dir die Formatierung aufgefallen? Unter "Tools" gibt es den Eintrag "Automatisch formatieren", der hilft Dir dabei.

Hi !
Danke sehr. Geht Perfekt.Weist du auch eine Möglichkeit für ein Passwort Schutz ?!

Füge einfach ein Kommando hinzu, das das Passwort entgegennimmt. Bei erfolgreich überprüftem Passwort setzt Du eine Freigabe-Flag für diese Verbindung, das beim Schliessen der Verbindung wieder gelöscht wird. Bei jeder "geschützten" Operation musst Du dann einfach dieses Flag testen.

Passwort-Abfragen machen aber bei Telnet-Anwendungen nur begrenzt Sinn, ich würde auf der Firewall für entsprechende Sicherheit sorgen, denn wenn jemand in Deinem lokalen Netz ist, kriegt er auch die Passworte mit.

Hallo,
währe ein Code Bsp. Möglich ?! (Sorry so lerne ich am effizientesten)....Danke

Einbauen musst Du's aber selbst:

byte authenticated = 0;

void loop() {
  authenticated = 0;
  // rest of your loop code
}

void parseCommand() {
  int pos;
  if(cmd.equals("quit")) {
    lcd.clear();
    setBacklight(250,0,0);
    lcd.print("User Disconnect.");
    delay (100); 

    client.stop();
    connected = false;
  } 
  else if(cmd.equals("help")) {
    server.println("--- Telnet Server Help ---");
    server.println("red     : switch LCD to Red   Color");
    server.println("green   : switch LCD to Green Color");
    server.println("quit    : close the Connection");
  }
  else if ((pos = cmd.indexOf("password=")) > 0) {
    if (cmd.substring(pos+9).equals("SeCrEt")) {
      authenticated = 1;
    }
  }
  else if (! authenticated) {
    server.println("permission denied, not authenticated");
  }
  else if(cmd.equals("green")) {
    setBacklight(0,250,0);
  } 
  else if(cmd.equals("red")) {
    setBacklight(250,0,0);
  } 
  else if ((pos = cmd.indexOf("sendlcd=")) >= 0) {
    lcd.print(cmd.substring(pos+8));
  } 
  else if(cmd.equals("reboot")) {
    server.println("Sending Reboot Signal....");
    Serial.println("CALL:Reboot");
    server.println("Reboot Signal Sended !");

    lcd.clear();
    setBacklight(250,0,0);
    lcd.print("Reboot...");
    delay (100);   
    //lcd.clear();
  } 
  else {
    server.println("Invalid command, type help");
  }
  cmd = "";
}

Damit kannst Du "help" und "quit" ohne login ausführen, für alles andere musst Du Dich erst einloggen.

Amigo du bist der Beste !
Vielen Dank!