-         

Ergebnis 1 bis 1 von 1

Thema: Arduino selbstgeschriebene Funkbibliothek funktioniert nicht

  1. #1

    Beitrag Arduino selbstgeschriebene Funkbibliothek funktioniert nicht

    Anzeige

    Hallo Roboternetz,

    Ich will mit einem Funksender einen Roboter steuern. Dazu sende ich Daten von einem Joystick an den Roboter. Eigentlich funktioniert auch alles ganz gut. Wenn ich im Roboter diesen Code eingeben dann funktioniert es (Diesen Code will ich dann in eine Bibliothek aussetzten, ganz unten kommt dann das problem):


    #include <VirtualWire.h>

    int rxPin = 6;


    void setup()
    {

    Serial.begin(9600);


    vw_setup(800);
    vw_set_rx_pin(rxPin);
    vw_rx_start();

    }

    void loop()
    {
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    char SensorDataTemp[VW_MAX_MESSAGE_LEN+1]; // Daten-Variable, die die empfangenen Daten hält
    String SensorData; // Daten-Variable, zum Übergeben der Daten an die WebRequest-Funktion

    if(vw_get_message(buf, &buflen))
    {

    memset(SensorDataTemp, 0, VW_MAX_MESSAGE_LEN+1); // Das ganze Array mit Nullen füllen

    for (int i = 0; i < buflen; i++)
    {
    SensorDataTemp[i] = (char)buf[i];
    }

    SensorDataTemp[VW_MAX_MESSAGE_LEN+1] = '\0'; // Char-Variable terminieren
    SensorData = SensorDataTemp; // Char to String-Konvertierung zur Übergabe an die connect()-Funktion

    String rechts = getValue(SensorData, ';', 0);
    String links = getValue(SensorData, ';', 1);

    int geschw_rechts = rechts.toInt();
    int geschw_links = links.toInt();


    Serial.print(geschw_rechts);
    Serial.print("\t");
    Serial.println(geschw_links);

    }
    }



    String getValue(String data, char separator, int index){
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;

    for (int i = 0; i <= maxIndex && found <= index; i++) {
    if (data.charAt(i) == separator || i == maxIndex) {
    found++;
    strIndex[0] = strIndex[1] + 1;
    strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
    }





    Nun würde ich gerne den Completten Code in eine Library aussetzen, dass ich es im Arduino code nicht mehr so kompliziert habe.
    Es kommen jetzt Nacheinander die header-datei, dann die cpp- datei und dann die .ino-Datei (Ganz am Schluss kommt das Problem)


    HEADER_DATEI:


    #include <Arduino.h>
    #include <VirtualWire.h>

    class BIB_Funk{


    private:

    int datenPin = 6;
    int geschwindigkeit_rechts = 0;
    int geschwindigkeit_links = 0;


    public:


    BIB_Funk();
    void datenAktualisieren();
    int get_geschwindigkeit_motor_rechts();
    int get_geschwindigkeit_motor_links();

    String getValue(String data, char separator, int index);
    };


    CPP_DATEI


    #include "BIB_Funk.h"



    BIB_Funk :: BIB_Funk(){

    vw_setup(800);
    vw_set_rx_pin(datenPin);
    vw_rx_start();

    }


    int BIB_Funk :: get_geschwindigkeit_motor_rechts(){
    return geschwindigkeit_rechts;
    }
    int BIB_Funk :: get_geschwindigkeit_motor_links(){
    return geschwindigkeit_links;
    }


    void BIB_Funk :: datenAktualisieren(){


    while (true){

    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    char SensorDataTemp[VW_MAX_MESSAGE_LEN+1]; // Daten-Variable, die die empfangenen Daten hält
    String SensorData; // Daten-Variable, zum Übergeben der Daten an die WebRequest-Funktion



    if(vw_get_message(buf, &buflen)){

    Serial.println("ja ich bin hier");
    memset(SensorDataTemp, 0, VW_MAX_MESSAGE_LEN+1); // Das ganze Array mit Nullen füllen

    for (int i = 0; i < buflen; i++)
    {
    SensorDataTemp[i] = (char)buf[i];
    }

    SensorDataTemp[VW_MAX_MESSAGE_LEN+1] = '\0'; // Char-Variable terminieren
    SensorData = SensorDataTemp; // Char to String-Konvertierung zur Übergabe an die connect()-Funktion

    String rechts = getValue(SensorData, ';', 0); //damit splittet man den String in die 2 Werte auf (Methode ist unten)
    String links = getValue(SensorData, ';', 1);

    int geschw_rechts = rechts.toInt();
    int geschw_links = links.toInt();


    geschwindigkeit_rechts = geschw_rechts;
    geschwindigkeit_links = geschw_links;

    return;
    }

    }



    }

    String BIB_Funk :: getValue(String data, char separator, int index){

    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;

    for (int i = 0; i <= maxIndex && found <= index; i++) {
    if (data.charAt(i) == separator || i == maxIndex) {
    found++;
    strIndex[0] = strIndex[1] + 1;
    strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";

    }


    ARDUINO DATEI

    void setup() {

    Serial.begin(9600);

    }

    void loop() {

    funk.datenAktualisieren();
    int geschwindigkeit_rechts = funk.get_geschwindigkeit_motor_rechts();
    int geschwindigkeit_links = funk.get_geschwindigkeit_motor_links();

    Serial.print(geschwindigkeit_rechts);
    Serial.print("\t");
    Serial.println(geschwindigkeit_links);

    }



    DAS PROBLEM:
    In der "datenAktualisieren" Methode, bleibt der code immer stecken. Das heißt er kommt nicht mehr aus der while true schleife Heraus. Wobei er auch nicht die die if abfrage if(vw_get_message(buf, &buflen)) hineinkommt. Ich kapier nicht was der unterschied ist, warum es im Arduino Programm funktioniert aber wenn ich es in eine Externe Bibliothek mache dann nicht!

    Vielen Dank schon mal für eure Hilfe

    RoboterSindCool
    Geändert von RoboterSindCool (31.12.2016 um 08:49 Uhr)

Ähnliche Themen

  1. NIBObee lässt sich nicht in Betrieb nehmen, weil Upload nicht funktioniert
    Von Robo Newbie im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 3
    Letzter Beitrag: 31.08.2015, 13:00
  2. Wie funktioniert Arduino Ultraschalll library?
    Von RoboterSindCool im Forum Arduino -Plattform
    Antworten: 7
    Letzter Beitrag: 11.04.2015, 19:15
  3. Antworten: 0
    Letzter Beitrag: 26.02.2014, 08:09
  4. RP6 und Arduino: I2C funktioniert nicht
    Von BattleBot im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 16.02.2014, 16:35
  5. Antworten: 6
    Letzter Beitrag: 29.08.2011, 18:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •