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
invalid conversion from 'const char*' to 'char'
31.03.2016, 10:33
Beitrag #1
invalid conversion from 'const char*' to 'char'
Hallo,

ich habe schon wieder ein Problem mit den Variablen (irgendwie verstehe ich das nicht)

Code:
unsigned long value = mySwitch.getReceivedValue();
  if (value >= 90000) {
    value = value -90000;
    char test = "GET /CMD?Spannung=" + value
    Serial.print("Spannung = ");
    Serial.println (value);
  }

wie bekomme ich char test und value zusammen in eine Variable? Bei meiner Idee bekomme ich den Fehler: "invalid conversion from 'const char*' to 'char' [-fpermissive]"

Ich stehe mal wieder auf dem Schlauch :-(

Danke und Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 10:42 (Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016 10:46 von hotsystems.)
Beitrag #2
RE: invalid conversion from 'const char*' to 'char'
(31.03.2016 10:33)toto1975 schrieb:  ich habe schon wieder ein Problem mit den Variablen (irgendwie verstehe ich das nicht)

Code:
unsigned long value = mySwitch.getReceivedValue();
  if (value >= 90000) {
    value = value -90000;
    char test = "GET /CMD?Spannung=" + value
    Serial.print("Spannung = ");
    Serial.println (value);
  }

wie bekomme ich char test und value zusammen in eine Variable? Bei meiner Idee bekomme ich den Fehler: "invalid conversion from 'const char*' to 'char' [-fpermissive]"

Ich stehe mal wieder auf dem Schlauch :-(

Wir auch...

Warum zeigst du nicht den kompletten Sketch?
Und du kannst den Inhalt einer "Long" nicht einfach an eine "char" anbinden.

Du müsstest zuvor die Long in eine char wandeln und danach mit strcat verketten.
Verketten!

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 10:52 (Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016 10:54 von toto1975.)
Beitrag #3
RE: invalid conversion from 'const char*' to 'char'
Hi,

ich wollte nicht den gesamten Sketch zeigen um nicht zu verwirren. Hier der gesamte Sketch:

Code:
#include <VirtualWire.h>    // you must download and install the VirtualWire.h to your hardware/libraries folder
#include <RCSwitch.h>
#include <SPI.h>
#include <Ethernet.h>

#undef int
#undef abs
#undef double
#undef float
#undef round


byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
IPAddress ip(192,168,192,7);
EthernetClient client;
char server[] = "192.168.192.58";


RCSwitch mySwitch = RCSwitch();

void setup()
{
  
  /* add setup code here */
  Serial.begin(9600);
  // Initialise the IO and ISR
  vw_set_ptt_inverted(true);    // Required for RX Link Module
  vw_setup(2000);                   // Bits per sec
  vw_set_rx_pin(2);           // We will be receiving on pin 4 i.e the RX pin from the module connects to this pin.
  vw_rx_start();

  //RC-Switch

  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2

  //**************LAN-Verbindung********************
  // attempt a DHCP connection:
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, ip);
  }

  Serial.print("My address:");
  Serial.println(Ethernet.localIP());
}

void loop()
{

  /* add main program code here */
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) // check to see if anything has been received
  {
    int i;
    // Message with a good checksum received.

    for (i = 0; i < buflen; i++)
    {
      Serial.print((char)buf[i]);                     // the received data is stored in buffer
    }
    Serial.println("");
  }
  //rc-switch
  if (mySwitch.available()) {
  
  unsigned long value = mySwitch.getReceivedValue();
  if (value >= 90000) {
    value = value -90000;
    char test = "GET /CMD?Spannung=" + value
    Serial.print("Spannung = ");
    Serial.println (value);
  }

  if (value == 4433) {
     Serial.println("Monitor an ");
     char* test = "GET /CMD?Monitor=ON";
     openhab(test);
     }
  else if (value ==4436) {
     Serial.println("Monitor aus ");
     char* test = "GET /CMD?Monitor=OFF";
     openhab(test);
     }
  
  else {
    
    Serial.print("Received ");
    Serial.print(mySwitch.getReceivedValue());
    Serial.print(" / ");
    Serial.print(mySwitch.getReceivedBitlength());
    Serial.print("bit ");
    Serial.print("Protocol: ");
    Serial.println(mySwitch.getReceivedProtocol());
  }

  mySwitch.resetAvailable();
}
}
void openhab(char* url){
  if (client.connect(server, 8080))
    {
        // print to serial monitor
        Serial.println("connected...");
        Serial.println("ARDUINO: forming HTTP request message");

        // send data the server through GET request
        client.print(url);
        client.print("");
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();

        Serial.println("ARDUINO: HTTP message sent");        

        // give server some time to receive and store data
        // before asking for response from it
        delay(1000);
        client.stop();
    }
}

Ziel ist immer noch die Daten der Funksteckdosen (per RCSwitch ob Steckdose an/aus ist) an mein Openhab System zu übergeben und Daten anderer Sensoren z.B. Regensensor, Temperatur, etc.) ebenfalls per Funk dann allerdings mit VirtualWire erst an einen Arduino und dann per Lan an Openhab zu senden.

Dazu muss ich einen Link erzeugen in der Form:
*) GET /CMD?Monitor=ON Steckdose an
*) GET /CMD?Monitor=OFF Steckdose aus

Da die Werte hier immer gleich sind brauche ich auch keine Variable die ich hinter "=" anfügen muss. Bei der Spannung für die Akkus benötige ich allerdings die Variable wieder.

Ich hoffe das war jetzt verständlich ausgedrückt von mir. ;-)

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 10:56
Beitrag #4
RE: invalid conversion from 'const char*' to 'char'
Ja, prima, danke.
So sieht man besser, wie die Variablen deklariert sind.

Hierzu:
Zitat:Dazu muss ich einen Link erzeugen in der Form:
*) GET /CMD?Monitor=ON Steckdose an
*) GET /CMD?Monitor=OFF Steckdose aus
Siehe meine Bemerkung im letzten Post.
Die variablen müssen zuvor gewandelt werden und dann mit "strcat" verkettet.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 11:00 (Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016 11:03 von Pit.)
Beitrag #5
RE: invalid conversion from 'const char*' to 'char'
(31.03.2016 10:42)hotsystems schrieb:  
(31.03.2016 10:33)toto1975 schrieb:  ich habe schon wieder ein Problem mit den Variablen (irgendwie verstehe ich das nicht)

Code:
unsigned long value = mySwitch.getReceivedValue();
  if (value >= 90000) {
    value = value -90000;
    char test = "GET /CMD?Spannung=" + value
    Serial.print("Spannung = ");
    Serial.println (value);
  }

wie bekomme ich char test und value zusammen in eine Variable? Bei meiner Idee bekomme ich den Fehler: "invalid conversion from 'const char*' to 'char' [-fpermissive]"

Ich stehe mal wieder auf dem Schlauch :-(

Wir auch...

Warum zeigst du nicht den kompletten Sketch?
Und du kannst den Inhalt einer "Long" nicht einfach an eine "char" anbinden.

Du müsstest zuvor die Long in eine char wandeln und danach mit strcat verketten.
Verketten!

" char test = "GET /CMD?Spannung=" + value"

also das ist natürlich cheese :-)
erstens müsste es char* test = "GET /CMD?Spannung="
sein,
zweitens fehlt das semikolon
und drittens ist "+ value" zwar bis auf den cast (void*)value syntaktisch korrekt aber sicher nicht so gewollt. es erhöht nämlich den zeiger irgendwo in die pampa und das ist sicher nicht beabsichtigt.
char test [100];
strcpy (test, "GET /CMD?Spannung=");
strcat (test, ltoa (value));
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 12:23
Beitrag #6
RE: invalid conversion from 'const char*' to 'char'
Hallo,

danke schon mal für die schnelle Hilfe

char test [100];
strcpy (test, "GET /CMD?Spannung=");
strcat (test, ltoa (value));

Da bekomme ich leider die Fehlermeldung "too few arguments to function 'char* ltoa(long int, char*, int)'"

Ich habe mal zu itoa Google gefragt und da auf folgendes gestoßen:

"char *itoa(int __val, char *__s, int __radix);
wobei __val der Integer-Wert ist, *__s ein Zeiger auf das erste Element
des Strings, in dem das Ergebnis gespeichert werden soll und __radix die
Basis des Zahlensystems, das bei der Ausgabe verwendet werden soll (also
z.B. 10 für dezimal und 16 für hexadezimal).

Also habe ich es mal umgeschrieben zu strcat (test, ltoa (value, test, 10));

Da bekomme leider nur ein € in der Ausgabe :-(
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 12:35
Beitrag #7
RE: invalid conversion from 'const char*' to 'char'
alternativen:
char test1[50];
strcat (test, ltoa (value, test1, 10));
oder
ltoa (value, test+strlen(test), 10));
oder
sprintf (test, "GET /CMD?Spannung=%ld", value);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 12:45
Beitrag #8
RE: invalid conversion from 'const char*' to 'char'
Ich habe es jetzt so gelöst:

Code:
unsigned long value = 3887;
char zahl[10];
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
char test [100];
strcpy (test, "GET /CMD?Spannung=");
// Serial.println (test);
sprintf(zahl, "%d", value);
strcat (test, zahl);

//strcat (test, ltoa (value, test, 10));
Serial.println (test);
delay(2500);

Ich werde mir aber deine Ideen mal anschauen da es kürzer ist und übersichtlicher

Danke und Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ein als "const" deklariertes Array übergeben Retian 5 124 08.11.2016 18:39
Letzter Beitrag: Tommy56
  conversion 4 bit binary in dezimal florian 8 493 03.05.2016 14:19
Letzter Beitrag: florian
  char zu int scritch 1 436 04.04.2016 16:19
Letzter Beitrag: rkuehle
  char* inhalt in eine Datei auf SD-Karte schreiben MartinK 0 339 30.03.2016 16:42
Letzter Beitrag: MartinK
  Problem mit char array Retian 12 993 03.01.2016 22:34
Letzter Beitrag: hotsystems
  #define vs. const Mathias 3 627 23.11.2015 12:52
Letzter Beitrag: Bitklopfer
  änderbarer char? IIHoffyII 3 726 19.04.2015 18:45
Letzter Beitrag: Pit
  Variablen Typ double, char, long aus ext. EEPROM lesen SternGucker 8 1.528 02.04.2015 08:10
Letzter Beitrag: SternGucker
  Char* Compilerfehlermeldung? DL1AKP 2 581 09.02.2015 12:26
Letzter Beitrag: DL1AKP
  sprintf invalid operands of types sepp01 34 5.607 26.12.2014 08:38
Letzter Beitrag: aoLaopsa

Gehe zu:


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