INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
string in char wandeln
04.11.2019, 09:45
Beitrag #1
string in char wandeln
Hallo,

ich habe ein Projekt wo ich mit Homebridge ein WS2812B LED-Band steuern will.
Von der Homebridge kommen über http die Befehle auf mein Wemos D1.

Habe jetzt das Problem, das ich die Helligkeit nicht steuern kann, weil ich den String, der vom Request kommt, nicht in ein interner wandeln kann. Habe den Versuch über char probiert, bin aber auch daran gescheitert.

Code:
String requestString;
char *wert = NULL;
int V;

          //Set brightness:
          if (requestString.indexOf("hell") > 0) {
            V = 0;
            wert = (requestString.substring(10, 13));
            Serial.println(wert);
            V =  atoi(wert);
            V = map(V, 0, 100, 0, 200);
            strip.setBrightness(V);
            showValues();
          }

Ist mein Weg falsch oder falsch deklariert. Danke für eure Hilfe

Gruß Tom
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2019, 11:55
Beitrag #2
RE: string in char wandeln
Was zeigt Dir denn der Serielle Monitor an?
Welche WS2812B-Lib verwendest Du?
...
Gib uns besser einen volständigen Sketch, in dem auch die Deklaration der Variablen sichtbar ist und einen Link zu dem Libs.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2019, 13:23
Beitrag #3
RE: string in char wandeln
(04.11.2019 09:45)TT-Tom schrieb:  Habe jetzt das Problem, das ich die Helligkeit nicht steuern kann, weil ich den String, der vom Request kommt, nicht in ein interner wandeln kann. Habe den Versuch über char probiert, bin aber auch daran gescheitert.

Wenn Du die String-Klasse sowieo schon benutzt, mache das konseqent:

Code:
String requestString;
int V;

          //Set brightness:
          if (requestString.indexOf("hell") > 0) {
            V = 0;
            String wert = (requestString.substring(10, 13));
            Serial.println(wert);
            V =  wert.toInt();
            V = map(V, 0, 100, 0, 200);
            strip.setBrightness(V);
            showValues();
          }

Dafür gibt entsprechende Funktionen in der Klasse. Auf kleinen Arduinos ist mit dem Speicherbrauch mit der Stringklasse Vorsicht geboten, auf den ESPs z.B. ist es relativ unkritisch.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2019, 17:20
Beitrag #4
RE: string in char wandeln
Hallo,

jetzt läuft es, ist mein erstes Projekt. Hier nochmal der ganze Code. Vielleicht hab ihr noch hinweise was man besser machen könnte.

Code:
//RGB Controller für WS2812B gesteuert über Plugin
//homebridge-better-http-rgb v2.0.0
#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>

#define dataPin D6 //Pin für Datenport
#define LED_COUNT 72 // anzahl LEDs

#define max(a,b) ((a)>(b)?(a):(b))  //added to make max() work with different data types (int | float)

WiFiServer server(80); //Set server port

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, dataPin, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

String requestString;           //String to hold incoming request
String hexString = "000000"; //Define inititial color here (hex value), 080100 would be a calm warmtone i.e.

int state;

int r, g, b, x, V;

float R, G, B;

///// WiFi SETTINGS - ersetzen mit eignen Werten /////////////////
const char* ssid = "********";
const char* password = "*******";
IPAddress ip(192, 168, 178, ***);   // feste IP für den Chip
IPAddress gateway(192, 168, 178, ***); // IP vom Router
IPAddress subnet(255, 255, 255, 0); // Subnetmaske
////////////////////////////////////////////////////////////////////


// Wlan verbindung herstellen
void WiFiStart() {
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet); //wenn Router IP vergibt , dann auskomentieren
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print("_");
  }
  Serial.println();
  Serial.println("Done");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println("");

  server.begin();
}

// ausschalten und led aus
void allOff() {
  state = 0;
  strip.clear(); // LED aus
  strip.show();
}

//Wandel Hex in Dec und setzt Power auf 1
void setHextoDec() {
  state = 1;
  long number = (long) strtol( &hexString[0], NULL, 16);
  r = number >> 16;
  g = number >> 8 & 0xFF;
  b = number & 0xFF;
}


// setzt alle LEDs des Streifen auf eine Farbe
void setColor(uint32_t color) {
  for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
  }
  strip.show();                          //  Update strip to match
}


//für den Seriellen Monitor zur Fehleranalyse
void showValues() {
  Serial.print("Status on/off: ");
  Serial.println(state);
  Serial.print("RGB color: ");
  Serial.print(r);
  Serial.print(".");
  Serial.print(g);
  Serial.print(".");
  Serial.println(b);
  Serial.print("Hex color: ");
  Serial.println(hexString);
  Serial.print("Brightness: ");
  Serial.println(V);
  Serial.println("");
}


void setup() {
  Serial.begin(9600);
  delay(1);
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(200); // Set BRIGHTNESS to about 1/5 (max = 255)

  setHextoDec(); //Set initial color after booting. Value defined above
  WiFi.mode(WIFI_STA);
  WiFiStart();
//  showValues(); //Uncomment for serial output
  Serial.println("Fertig");

}

void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  while (client.connected() && !client.available()) {
    delay(1);
  }
  //Respond on certain Homebridge HTTP requests
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (requestString.length() < 100) {
          requestString += c;
        }
        if (c == '\n') {
//          Serial.print("Request: "); //Uncomment for serial output
//          Serial.println(requestString); //Uncomment for serial output
          //Send reponse:
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //On:
          if (requestString.indexOf("on") > 0) {
            setHextoDec();
            setColor(strip.Color(r, g, b));
//            showValues();
          }
          //Off:
          if (requestString.indexOf("off") > 0) {
            allOff();
//            showValues();
          }
          //Set color:
          if (requestString.indexOf("set") > 0) {
            hexString = "";
            hexString = (requestString.substring(9, 15));
            setHextoDec();
            setColor(strip.Color(r, g, b));
//            showValues();
          }
          //Set brightness:
          if (requestString.indexOf("hell") > 0) {
            V = 0;
            String wert = (requestString.substring(10, 13));
            Serial.println(wert);
            V =  wert.toInt();
            V = map(V, 0, 100, 0, 200);
            strip.setBrightness(V);
//            showValues();
          }
          //Status on/off:
          if (requestString.indexOf("status") > 0) {
            client.println(state);
          }
          //Status color (hex):
          if (requestString.indexOf("color") > 0) {
            client.println(hexString);
          }
          //Status brightness (%):
          if (requestString.indexOf("bright") > 0) {
            V = strip.getBrightness();
//            Serial.println(V);
            client.println(V);
          }
          delay(1);
          while (client.read() >= 0);  //added: clear remaining buffer to prevent ECONNRESET
          client.stop();
          requestString.remove(0);
        }
      }
    }
  }
}

Danke Tom
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  2D String Array DirkTH 5 386 08.10.2019 09:07
Letzter Beitrag: Tommy56
  String als autoscroll auf LCD ausgeben AnFi 17 1.258 29.08.2019 08:13
Letzter Beitrag: MartinZ
  string.toFloat() Rockman 1 487 25.04.2019 23:02
Letzter Beitrag: Tommy56
  Textlänge (char) Array Blende8 3 591 08.04.2019 18:08
Letzter Beitrag: Tommy56
  int in String verwandeln lockenkopf 1 620 10.03.2019 13:34
Letzter Beitrag: Tommy56
  Char in Int variable wandeln Rockman 5 843 06.03.2019 23:22
Letzter Beitrag: Tommy56
Question (Denk)Problem mit char array[] ? ManfredH 3 675 05.02.2019 12:01
Letzter Beitrag: ManfredH
  [Anfänger] Char Array Problem fp.blues2013 1 572 07.01.2019 13:06
Letzter Beitrag: Tommy56
  char in Variablen aufteilen fv1895 7 729 06.01.2019 11:59
Letzter Beitrag: Tommy56
  Variablen zu einem CHAR verbinden und einbinden Frank_aus_WOB 3 965 02.01.2019 09:07
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste