Ardoino Uno Sketch für Esp8266 Kompilieren

Hallo Liebes Forum,

meine Begeisterung für die kleinen Mikrocontroller wird immer mehr und deshalb hab ich mich hier angemeldet :slight_smile:

Ich hab öfters, kleine Projekte realisiert und nun wollte ich auf den ESP umswitchen, wegen WLAN und der kleinen Kompakten Bauform.

Jetzt hab ich natürlich etwas programmiert was ich immer auf den UNO problemlos zum laufen bekommen habe.

Wenn ich dies für mein ESP kompiliere zeigt er mir mehrere Fehler an. Kann mir jemand den Unterschied beim Kompilieren erklären ? braucht der ESP ne andere Sprache als c bzw c++ ?

Nein.
Aber die Microcontroller sind an sich unterschiedlich und müssen etwas anders angesprochen werden. Meist braucht es andere Bibliotheken.

Wenn Du die Arduino-IDE nutzt, ist es auch C++.
Du musst allerdings die Unterstützung für den ESP8266 installieren.

Für weitere Infos, kommt es darauf an, welche Libs Du benutzt, d.h. wir brauchen Deinen Sketch und die genaue Fehlermeldung.

Setze beides bitte in Codetags. Wie das geht, steht hier.

Gruß Tommy

Da du die Meldungen (und den Code) nicht zeigen möchtest, kann ich dir nur raten die Meldungen aufmerksam zu lesen und die Ursachen dann zu beheben.

war erstmal eine allgemeine Frage. Gerne poste ich mein Code.
Es geht einfach darum eine Schrittmotor zu bewegen. Dieser soll dann ein Ikea Rollo bewegen. Dazu verwende ich die Stepper.h lib. Ich habe eine Klasse angefertigt, mit methoden um die position des Motors zu bestimmen.
Mein programm:

#include "mymotor.h"

// number of steps in one revolution of your motor
#define STEPS 2048
//#define STOP 7
// set the speed in rpm
#define MOTOR_RPM 12

void setup()
{
   Serial.begin(115200);

   //pinMode(STOP,INPUT_PULLUP);
 
  //attachInterrupt(0,intfunktunterbrechung,RISING);
    
Stepper stepper(STEPS,8, 9,10, 11);
Schrittmotor Motor(stepper,STEPS);

//Motor.kalibrieren(MOTOR_RPM,true);
//Motor.init(20,100,50.0);
//Motor.start(47.425,MOTOR_RPM);

                 Motor.aktdaten();
                    Serial.print("\n");

  }

void loop()
{

}

Meine headerdatei:

#ifndef _mymotor_H
#define _mymotor_H

#include <Stepper.h>
#include <string.h>
#include "Arduino.h"

extern int intunterbrechung_stop;

void intfunktunterbrechung();

 
class Schrittmotor  
{
            
   private:
              //Motor aus der Stepper.h lib einbinden
              const Stepper&  Motor; 
              int Stepps_Motor;         // Anzahl der Schritte des Motors
           
              int round_speed;          // Geschwindigkeit, wieviele umdrehung in der Minute

              //Richtungsweisend
              int richtung;         //Für die richtung in der Stepschleife
              bool invertieren;     // Richtung invertieren 
              char *direktion;

              //umdrehungsweisend
              double soll_umdrehung;
              int soll_teilumdrehung;
              int ganzeUmdrehung;
              double teilUmdrehung;

              //positionsweisend
              double min_pos;
              double max_pos;
              double ist_position;
          
              //Zählschelife Schritte
              int zaehler;        // für die Stepschleife
              bool einrichten=false;


                 void setrichtung(char *direktion);

                 void umw_to_steps(void);

                 void aktuellposition(void);

                 void sollumdreh(double sollpos);


    public:
                  

                  Schrittmotor(void);

                 Schrittmotor(Stepper Engine,int anzschritte);

                 void aktdaten(void);

                 void Motorfahren (bool init=false);

                 void Init(double minpos,double maxpos,double eingabepos=0);

                 void kalibrieren(int drehgeschw=6,bool invertieren=false);  //Einrichtung der Endpunkte(Endschalter) !!!!

                 void Start(double sollposition, int drehgeschw);

};

die methode defination:

#include "mymotor.h"


int intunterbrechung_stop=0;

  void intfunktunterbrechung()
  {

      intunterbrechung_stop=1;
  
  }



 void Schrittmotor :: setrichtung(char *direktion)
  {
     int r=0;
     this->direktion=direktion;
              
        if(strcmp(direktion,"up")==0)
          {  
            r=1;
           if(invertieren==true)
             r=-1;                 
          }
                              
             else if (strcmp(direktion,"down")==0)
              {   
                r=-1;
                 if(invertieren==true)
                  r=1;           
              }
      
          richtung=r;
                
              Serial.print("Richtung:");
              Serial.print(direktion);
              Serial.print("\n");
              
              Serial.print("Richtung_r:");
              Serial.print(richtung);
              Serial.print("\n");
 
  }




 void Schrittmotor :: umw_to_steps()
  {
    ganzeUmdrehung=(int)soll_umdrehung;
    teilUmdrehung=(double)(soll_umdrehung-ganzeUmdrehung);
                                              
    soll_teilumdrehung=(int)(teilUmdrehung*Stepps_Motor);
                                 
  }


void Schrittmotor :: aktuellposition()
                                                                                      
  {
     if(direktion=="up")
      ist_position=ist_position-((double)zaehler/Stepps_Motor);
     else if(direktion=="down")
      ist_position=ist_position+((double)zaehler/Stepps_Motor);
                                                                                                  
  }




 void Schrittmotor :: sollumdreh(double sollpos)
  {
    int durchlauf=0;
    Serial.print("\n");
    Serial.print("\n");
                                   
       do{ 
          if(sollpos>max_pos)
            {
            Serial.print("Die Sollposition geht über die Endposition hinaus!");
            soll_umdrehung=0;  
            break;
            }         
                                    
            if(sollpos<min_pos)
              {
              Serial.print("Die Sollposition geht über die Endposition hinaus!"); 
              soll_umdrehung=0; 
              break;
              }
                  
               if(sollpos>ist_position)
                  {
                   soll_umdrehung=sollpos-ist_position;
                   setrichtung("down");
                   break;
                  } 
                  
                   if(sollpos<ist_position)
                     {
                      soll_umdrehung=ist_position-sollpos;
                      setrichtung("up");
                      break;
                      } 

                       Serial.print("Schleife");
                       Serial.print("\n");
                  
         }while(durchlauf ==0);
             
  }



  Schrittmotor :: Schrittmotor(void)
    {
     Serial.print("Fehler beim Motor Initaliesierung");
    }

 Schrittmotor :: Schrittmotor(Stepper Engine,int anzschritte)
  
    {
        Motor=Engine;
        Stepps_Motor=anzschritte;
        
    }
    


 void Schrittmotor :: aktdaten()
    {

          Serial.print(ist_position);
          Serial.print("\n");
          Serial.print(min_pos);
          Serial.print("\n");
          Serial.print(max_pos);
    }


 void Schrittmotor :: Motorfahren (bool init=false)
    {
      Motor.setSpeed(round_speed);
      int ii=1;           // für die Schleifenverlass bedingung
      int schritte=0;


      umw_to_steps();

  
           do{ 
                
               zaehler=0;     // Zählerstand wieder auf Null eine umdrehung durchlaufen
                                
               if(init==false)    // Bei 0 wird bis zu Sollposition gefahren
                  {     
                    // Volle Umdrehungen und Teil umdrehungen 
                                          
                    if(ganzeUmdrehung>=1)
                    {
                    schritte=Stepps_Motor;                          
                    ganzeUmdrehung--;
                    }  
                      else if (ganzeUmdrehung==0) 
                      {
                       schritte=soll_teilumdrehung;  
                       ii=0;
                      }
                   }            //////
                    else if(init==true)
                    {
                     schritte=Stepps_Motor;
                      Serial.print("\n");
                      Serial.print("test");
                                     
                    }
                                 
                    //Motor bewegung
                       do{ 
                           Motor.step(richtung);
                                        
                           if(intunterbrechung_stop==1)          //Motor Anhalten Notfall, oder für die init einrichtung!!
                              {
                               ii=0;
                               break;  
                              }
                                          
                                ++zaehler;
                                ///Serial.print(zaehler);
                                //Serial.print("\n");
                                    
                                      
                          }while(zaehler<=schritte);
                                /////////
                
                      aktuellposition();
                      ///////////   
            }while(ii!=0);
  }

 void Schrittmotor :: Init(double minpos,double maxpos,double eingabepos=0)
  {
    min_pos=minpos;
    max_pos=maxpos;
    ist_position=eingabepos;
    Serial.print("\n");
    Serial.print("Einagebe INIT");
    Serial.print("\n");
  }


 void Schrittmotor :: kalibrieren(int drehgeschw=6,bool invertieren=false)                             //Einrichtung der Endpunkte(Endschalter) !!!!
  {

   einrichten=true;
   min_pos=0;
   max_pos=0;
   ist_position=0;

   round_speed=drehgeschw;
   this->invertieren=invertieren;                     //Motor dreht rechtsherum bei false, für programm richtung up

    Serial.print("\n");
    Serial.print("Richtungs entscheidung");
    Serial.print("\n");
    Serial.print("Motor soll in richtung Oberen Anschlag fahren");
    Serial.print("\n");
      setrichtung("up");
        
      Motorfahren(einrichten);
        
     min_pos=0;
     ist_position=0;

    delay(4000); //Noch millis ändern
          
   intunterbrechung_stop=0;

   setrichtung("down");

   Motorfahren(einrichten);
   
   intunterbrechung_stop=0;
   
   max_pos=ist_position;

        
   einrichten=false;
     
  }

void Schrittmotor :: Start(double sollposition, int drehgeschw)
  {
    round_speed=drehgeschw;
    sollumdreh(sollposition);

        Serial.print("\n");
        Serial.print(soll_umdrehung);
        Serial.print("\n");
        
   Motorfahren();

  }    

Die Fehler :


C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: In member function 'void Schrittmotor::aktuellposition()':

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:62:20: warning: comparison with string literal results in unspecified behaviour [-Waddress]

      if(direktion=="up")

                    ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:64:25: warning: comparison with string literal results in unspecified behaviour [-Waddress]

      else if(direktion=="down")

                         ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: In member function 'void Schrittmotor::sollumdreh(double)':

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:96:38: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

                    setrichtung("down");

                                      ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:103:39: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

                       setrichtung("up");

                                       ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: In constructor 'Schrittmotor::Schrittmotor()':

mymotor.cpp:116:3: error: uninitialized reference member 'Schrittmotor::Motor' [-fpermissive]

   Schrittmotor :: Schrittmotor(void)

   ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: In constructor 'Schrittmotor::Schrittmotor(Stepper, int)':

mymotor.cpp:121:2: error: uninitialized reference member 'Schrittmotor::Motor' [-fpermissive]

  Schrittmotor :: Schrittmotor(Stepper Engine,int anzschritte)

  ^

mymotor.cpp:124:14: error: passing 'const Stepper' as 'this' argument of 'Stepper& Stepper::operator=(const Stepper&)' discards qualifiers [-fpermissive]

         Motor=Engine;

              ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: At global scope:

mymotor.cpp:142:51: error: default argument given for parameter 1 of 'void Schrittmotor::Motorfahren(bool)' [-fpermissive]

  void Schrittmotor :: Motorfahren (bool init=false)

                                                   ^

In file included from C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:1:0:

mymotor.h:70:23: error: after previous specification in 'void Schrittmotor::Motorfahren(bool)' [-fpermissive]

                  void Motorfahren (bool init=false);

                       ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: In member function 'void Schrittmotor::Motorfahren(bool)':

mymotor.cpp:144:33: error: passing 'const Stepper' as 'this' argument of 'void Stepper::setSpeed(long int)' discards qualifiers [-fpermissive]

       Motor.setSpeed(round_speed);

                                 ^

mymotor.cpp:181:47: error: passing 'const Stepper' as 'this' argument of 'void Stepper::step(int)' discards qualifiers [-fpermissive]

                            Motor.step(richtung);

                                               ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: At global scope:

mymotor.cpp:205:75: error: default argument given for parameter 3 of 'void Schrittmotor::Init(double, double, double)' [-fpermissive]

  void Schrittmotor :: Init(double minpos,double maxpos,double eingabepos=0)

                                                                           ^

In file included from C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:1:0:

mymotor.h:72:23: error: after previous specification in 'void Schrittmotor::Init(double, double, double)' [-fpermissive]

                  void Init(double minpos,double maxpos,double eingabepos=0);

                       ^

mymotor.cpp:218:74: error: default argument given for parameter 1 of 'void Schrittmotor::kalibrieren(int, bool)' [-fpermissive]

  void Schrittmotor :: kalibrieren(int drehgeschw=6,bool invertieren=false)                             //Einrichtung der Endpunkte(Endschalter) !!!!

                                                                          ^

In file included from C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:1:0:

mymotor.h:74:23: error: after previous specification in 'void Schrittmotor::kalibrieren(int, bool)' [-fpermissive]

                  void kalibrieren(int drehgeschw=6,bool invertieren=false);  //Einrichtung der Endpunkte(Endschalter) !!!!

                       ^

mymotor.cpp:218:74: error: default argument given for parameter 2 of 'void Schrittmotor::kalibrieren(int, bool)' [-fpermissive]

  void Schrittmotor :: kalibrieren(int drehgeschw=6,bool invertieren=false)                             //Einrichtung der Endpunkte(Endschalter) !!!!

                                                                          ^

In file included from C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:1:0:

mymotor.h:74:23: error: after previous specification in 'void Schrittmotor::kalibrieren(int, bool)' [-fpermissive]

                  void kalibrieren(int drehgeschw=6,bool invertieren=false);  //Einrichtung der Endpunkte(Endschalter) !!!!

                       ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp: In member function 'void Schrittmotor::kalibrieren(int, bool)':

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:234:23: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

       setrichtung("up");

                       ^

C:\Users\Tobias\AppData\Local\Temp\arduino_build_37258\sketch\mymotor.cpp:245:22: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    setrichtung("down");

                      ^

Bibliothek Stepper in Version 1.1.3 im Ordner: C:\Program Files (x86)\Arduino\libraries\Stepper  wird verwendet
exit status 1
uninitialized reference member 'Schrittmotor::Motor' [-fpermissive]


Du kannst char-Arrays nicht mit == vergleichen. Schaue mal nach strcmp und lerne ein paar Grundlagen von C++.

Gruß Tommy

Ein paar Zeilen drüber ist es richtig.

Ok, dann soll er es durchgängig richtig machen :wink:

Gruß Tommy

Warum verbrätst Du für direktion eine Stringvariable?
Das passt in ein byte.

Jauu da habt Ihr natürlich Recht ... Aber wieso ist das beim Uno so dann korrekt ? Das wundert mich :flushed: also das er das dann so Kompiliert ?

Ist das wichtig? Warum?

Hast du die Warnungen auch für den UNO aktiviert?

EIgentlich paßt das in ein Bit. da es Bit nicht einzeln gibt dann ein Byte, Ok man könnte die anderen 7 Bit für andere Sachen verwenden.

Gibs die in der Zwischenzeit nichr ferngesteuert als Hausautomatisation?

zB Unsere IKEA Home smart Rollos auf einen Blick - IKEA Deutschland

Grüße Uwe

Nicht ganz.
r hat nachher drei Zustände.
up wäre 1, down -1, und 0 macht nix.


struct TStruct
{
  enum class Test:byte{a,b,c} test:2;
  bool flag:1;
  int  egal:5;
};

TStruct t {TStruct::Test::a,false,-4};

void setup() 
{
  Serial.begin(9600);
  Serial.println(sizeof(t));
}

void loop() 
{

}

Ich korrigiere: Das paßt in 2 Bit.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.