PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : definieren von macros



oderlachs
03.03.2013, 12:50
Hallo liebe Freunde !
ich weiss nicht ob es hier genau hingehört, aber Arduino und C++ gehören ja gewissermassen zusammen. Also es geht mir um die Definition von Macros, was ich gerade in einer Arduino Roboteranwendung programmieren möchte und Probleme habe, wenn ich ein Macro aufrufe, Meldung : error: lvalue required as left operand of

Danke schon mal..
Gerhard

oberallgeier
03.03.2013, 13:55
... wenn ich ein Macro aufrufe, Meldung : error: lvalue required as left operand of ...Wie lautet denn das zugehörige Macro?

oderlachs
03.03.2013, 14:44
Hallo Oberall.. !
das hat sich erledigt, habe wohl 'nen schlechten Tag heut, aber ich werde dazu noch was schreiben. Habe jetzt nicht Macros, sondern Funktionen genommen.
So habe ich erst mal den Softwaretest fertig zu bekommen, weil ich das für wem anders schreibe, der noch Anfänger ist, aber bin ich denn mehr ????? ;)

Folgendes wollte ich ändern in Macros (vorwärts/rückwärtz der beiden Motoren), das sollte in der Definie Anweisung als Macro geschehen

/* Linker Motor fahre vorwärtz */
void FOR_M1() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
/* Rechter Motor fahre vorwärtz */
void FOR_M2() {
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
/* Linker Motor fahre rückwärtz */
void REV_M1()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
}
/* Rechter Motor fahre rückwärtz */
void REV_M2() {
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
Ich wollte daraus später eine H-Datei schreiben, um sie universial bei meinen Roboterprogrammen zu verwenden...

Nun habe ich erst mal folgenden funktionierenden Code geschrieben:

/* ================================================== ======================== */
/* */
/* robot_test_1_2.c */
/* (c) 2013 Gerhard Hinze */
/* */
/* */
/* */
/* Anschlüsse Anschlüsse */
/* Motortreiber: Bezeichnung Arduino: */
/* VMS Motorspannung + (Nur f.Motor) nc. !!!!! */
/* GND Motorspannung - (gemeins. GND) GND */
/* +5V +5V +5V */
/* MotorA-1 Motor-1 "-" nc. //not connected */
/* MotorA-2 Motor-1 "+" nc. //nicht verbund.*/
/* MotorB-1 Motor-2 "-" nc. */
/* MotorB-2 Motor-2 "+" nc. */
/* -------------------------------------------------------------------------- */
/* +++ Die Motoren müssen event. umgepolt werden, Herstellerabhängig +++ */
/* -------------------------------------------------------------------------- */
/* ENA Enable Motor 1 (PWM) */
/* IN1 DIR-1 Motor 1 */
/* IN2 Dir-2 Motor 1 */
/* -------------------------------------------------------------------------- */
/* IN3 DIR-1 Motor 2 */
/* IN4 Dir-2 Motor 2 */
/* ENB Enable Motor 2 (PWM) */
/* ------------------------------------------------------------------------- */
/* Definitionen Motoransteuerung */
/* ------------------------------------------------------------------------- */
#include <NewPing.h> // diese Datei muss im Library-Verzeichnis liegen
#define ENA 5 // Speed Motor 1 = Arduino D5 (PWM)
#define ENB 6 // Speed Motor 2 = Arduino D6 (PWM)
#define IN1 2 // Richtung Motor1 A1 = Arduino D2
#define IN2 4 // Richtung Motor1 A2 = Arduino D4
#define IN3 7 // Richtung Motor2 B1 = Arduino D7
#define IN4 8 // Richtung Motor2 B2 = Arduino D8
#define TRIGGER_PIN 12 // Arduino pin 12 an Trigger Pin am US-Sensor.
#define ECHO_PIN 11 // Arduino pin 13 an Echo Pin am US-Sensor.
#define MAX_DISTANCE 200 // Maximum Abstand zum Objekt (400-500cm).
#define MIN_DISTANCE 10 // Minimum Abstand zum Objekt
/* ------------------------------------------------------------------------- */
/* Benutzerangaben : Nummerierung für die AnalogPins */
/* ------------------------------------------------------------------------- */
/* A0 = 14, A1 = 15, A2 = 16, A3 = 17, A4 = 18, A5 = 19 */
/* ------------------------------------------------------------------------- */
/* Geschrieben für ein Arduino-UNO mit L298 H-Brücke als Motortreiber */
/* Objektsuche frontal mit Ultraschall-Sensor HC-04 */
/* */
/* */
/* ------------------------------------------------------------------------- */
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup()
{
pinMode(ENA, OUTPUT); //Setze Pins als Ausgang
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

/* Fahre erstmals vorwärtz mit Speed =100 / = 39% Fullspeed */
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);

analogWrite(ENA, 100); //setze Motorspeed
analogWrite(ENB, 100); //setze Motorspeed
Serial.begin(9600);
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++
/* Linker Motor fahre vorwärtz */
void FOR_M1() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
}
/* Rechter Motor fahre vorwärtz */
void FOR_M2() {
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
/* Linker Motor fahre rückwärtz */
void REV_M1()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
}
/* Rechter Motor fahre rückwärtz */
void REV_M2() {
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void HALT()
{
analogWrite(ENA, 0); // STOP M1
analogWrite(ENB, 0); // STOP M2
}

void loop()
{
delay(50); // Warte 50ms
unsigned int uS = sonar.ping();
Serial.println(uS); // sende Entfernung an SerialTerminal zw. Kontrolle
int cm = uS / US_ROUNDTRIP_CM;
if (cm < MIN_DISTANCE) // Abstand kleiner als das Minimum(10cm)
// dann halten vorerst...später ausweichen
{
HALT();
}
else // oder weiterfahren wie zuvor
{
analogWrite(ENA, 250); //setze Motorspeed
analogWrite(ENB, 250); //setze Motorspeed
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
}

Gruss + Danke Gerhard