Go Down

Topic: Hallo zusammen (Read 1 time) previous topic - next topic

KUCKY

Ich bin Anfängen, mit "kleinen Grundkenntnissen". Ich möchte eine eigen Bibliothek anlegen, und habe mir zu deisem Zwecke das Tutorial auf der Arduino Seite angeschaut. Ist auch mit meinen Englischkenntnissen zuverstehen. Aber wie erzeuge ich schlußendlich dann eine *.h Datei, bzw. eine *.c Datei. Ich kann doch nicht einfach den Code vom Beispiel Morse als Morse.h bzw. Morse.cpp speichern. [smiley=undecided.gif] Ist bestimmt für euch ´ne Kleinigkeit. Danke im Voraus. ;)
Gruß Willi

KUCKY

Ich glaub´ ich habe es selbst heraus gefunden. Ich habe die Dateien in VC++ geschrieben, und einfach gespeichert als *.h und *.cpp. Ist das der richtige Weg? :)
VGW

willich

Kannst die Datei mit jedem Texteditor erzeugen. Kenne zwar VC++ nicht, aber es dürfte gehen. Notepad von Windows ginge auch.

KUCKY

Hallo Pumbaa,
vielen Dank für die Info. Ich versuche das gerade umzusetzten. Bekomme aber immer wieder Meldungen wie :
"error: 'MotorDir' was not declared in this scope" oder
"error: 'enableMotorRight' was not declared in this scope" etc. Wie gesagt ich bin Anfänger und benötige etwas Starthilfe. Vielleicht hast Du ja Zeit, dies mal durch zu lesen. Das Projekt soll 2 DC-Motoren steuern. Werde auch weiterhin selbst versuchen.
Grüße aus Leverkusen
Willi

P.S. ich hoffe ich habe das mit dem Code richtig eingefügt.


Code: [Select]
#include <DC_Motor.h>
 
 // constants won't change. They're used here to
 const int switchPin = 2;          // switch input
 
 const int motor3Pin = 3;          // H-bridge leg 3 (pin 2, 1A)
 const int motor4Pin = 4;          // H-bridge leg 4 (pin 7, 2A)
 const int motor5Pin = 5;          // H-bridge leg 5 (pin 10, 3A)
 const int motor6Pin = 6;          // H-bridge leg 6 (pin 15, 4A)
 const int enableMotorLeft = 9;    // H-bridge steuert linken Motor
 const int enableMotorRight = 10;  // H-bridge steuert rechten Motor

 
 const int ledPinYellow = 13;      // LED Status
 const int ledPinLeft = 12;        // Rote LED links herum
 const int ledPinRight = 11;       // Grüne LED rechts herum
 
   // Values, who can change in the Code
   void setup() {
   // set SwitchPin as Input
   pinMode(switchPin, INPUT);
   
   // Serial Output
   Serial.begin(9600);
 
   // set all the other pins you're using as outputs:
   
   pinMode(ledPinYellow, OUTPUT);
   pinMode(ledPinLeft, OUTPUT);
   pinMode(ledPinRight, OUTPUT);
   
   // set enablePin high so that motor can turn on:
   digitalWrite(enableMotorLeft, HIGH);
   digitalWrite(enableMotorRight, HIGH);

   // blink the LED 5 times. This should happen only once.
   // if you see the LED blink three times, it means that the module
   // reset itself,. probably because the motor caused a brownout
   // or a short.
   blink(ledPinYellow, 5, 500);
 }
//------------------------- Hauptprogramm -------------------------------------------------------------
 void loop() {
              if (digitalRead(switchPin) == LOW) {
               MotorDir(LOW, HIGH, LOW, HIGH, 180, 180);     // Motors drives forward
               }
              else {
                  MotorDir(LOW, LOW, LOW, LOW, 0, 0);        // Motors stopps
                  delay (1000);
                  MotorDir(HIGH, LOW, HIGH, LOW, 100, 100);  // Motors drives rewind
                  delay (1000);
                  MotorDir(LOW, LOW, LOW, LOW, 0, 0);        // Motors stopps again
                  delay (1000);
                  MotorDir(HIGH, LOW, LOW, HIGH, 50, 50);    // Motors turns right
                  delay (1000);
                  MotorDir(LOW, LOW, LOW, LOW, 0, 0);        // Motors stopps again
                  delay (1000);
                  }
 }          
//------------------------- eine LED vor dem Start blinken lassen -------------------------------------
 void blink(int whatPin, int howManyTimes, int milliSecs) {
   int i = 0;
   for ( i = 0; i < howManyTimes; i++) {
     digitalWrite(whatPin, HIGH);
     delay(milliSecs/2);
     digitalWrite(whatPin, LOW);
     delay(milliSecs/2);
   }
  }
//------------------------- Programm Ende -------------------------------------------------------------


Code: [Select]
#ifndef DC_Motor_h
#define DC_Motor_h

#include "WProgram.h"

class DC_Motor
{
 public:
   DC_Motor(int motor3Pin,int motor4Pin,int motor5Pin,int motor6Pin,int enableMotorLeft,int enableMotorRight);
   void MotorDir(int Pin3,int Pin4,int Pin5,int Pin6,int SpeedRight,int SpeedLeft);
   
 private:
   int _pin;
};

#endif

Code: [Select]
#include "WProgram.h"
#include "DC_Motor.h"

 const int motor3Pin = 3;          // H-bridge leg 3 (pin 2, 1A)
 const int motor4Pin = 4;          // H-bridge leg 4 (pin 7, 2A)
 const int motor5Pin = 5;          // H-bridge leg 5 (pin 10, 3A)
 const int motor6Pin = 6;          // H-bridge leg 6 (pin 15, 4A)
 const int enableMotorLeft = 9;    // H-bridge steuert linken Motor
 const int enableMotorRight = 10;  // H-bridge steuert rechten Motor

DC_Motor::DC_Motor(int motor3Pin,int motor4Pin,int motor5Pin,int motor6Pin,int enableMotorLeft,int enableMotorRight)
{
     pinMode(motor3Pin, OUTPUT);
   pinMode(motor4Pin, OUTPUT);
   pinMode(motor5Pin, OUTPUT);
   pinMode(motor6Pin, OUTPUT);
   pinMode(enableMotorLeft, OUTPUT);
   pinMode(enableMotorRight, OUTPUT);
     
     // pinMode(pin, OUTPUT);  alter Code aus dem Sample "Morse"
     //_pin = pin;                                    "            
}

void DC_Motor::MotorDir(int Pin3, int Pin4, int Pin5, int Pin6, int SpeedLeft, int SpeedRight) {
                       digitalWrite(motor3Pin, Pin3);              // Direction of the right Motor
               digitalWrite(motor4Pin, Pin4);  
               digitalWrite(motor5Pin, Pin5);              // Direction of the left Motor
               digitalWrite(motor6Pin, Pin6);  
               analogWrite(enableMotorLeft, SpeedLeft);      // Speed of the right Motor
               analogWrite(enableMotorRight, SpeedRight);  // Speed of the left Motor  
 }

willich

#4
Mar 23, 2010, 01:49 pm Last Edit: Mar 23, 2010, 01:52 pm by willich Reason: 1
Ich dachte, du willst morsen. :)

Naja, ich durchdringe deinen (??) Code nicht richtig. Bin selbst unerfahren mit dem Klassen-Methoden-Instanzen-Kram aus objektorientiertem Code. Bin leider mit Basic und Turbopascal großgeworden. Und hab mir daher die innere Sperre dagegen einverleibt. Und kämpfe noch dagegen an.

Aber: Hast du die library auch im Libraryordner? Oder ist's eine, welche in deinem Sketchordner steckt? Das macht auch'n Unterschied in der Syntax des includes, glaube ich.


Davon ab erzeugst du keine Instanz deines Motors. Du musst in deinen .pde-code in der setuproutine noch soetwas wie
Code: [Select]
DC_Motor xyz(m3pin,m4pin,....)
als Konstruktor
und aus jedem MotorDir(..) ein
Code: [Select]
xyz.MotorDir(...)
machen.
Glaube ich. Aber lass dir am besten nicht vom Basic-Kind helfen ;)
xyz steht da für den Namen deines Motors.


Falls das alles nicht hinhaut (und auch deine Versuche), dann pack dass doch einfach in dein Hauptprogramm, als eine Funktion, nicht als Methode.

KUCKY

Hallo Pumbaa,
ist ja toll das Du Dir das mal angetan hast. Vielen Dank dafür. :)
1.- Habe die Bibliothek ordnungsgemäß im Arduino-Ordner   untergebracht.
2.- Die Unterroutine läuft im Hauptprogramm einwandtfrei. Ich wollte mich aber mit Bibliotheken vertraut machen.
Ich werde Deinen Hinweisen folgen. ;)
Grüße aus Leverkusen

Go Up