Fehlersuche: Solarpanel mit Nachführung


guten tag allerseits,

ich arbeite in meiner freizeit nun schon seit einiger zeit gerne einem programmgesteuerten solarpanel. dieses wird mit 2 gleichstrom-motoren gesteuert und der sonne nachgeführt.
es sind 3 modi gedacht: automatik (er fährt alle 10s nach), testmodus (alle 1s) und handbetrieb über 4 taster soll auf/ab/links/rechts fahrbahr sein. der sonnenstand wird mit 4 ldr-widerstände abgefragt.

verwendeter compiler: atmel studio 7.0
vor kurzem sind beim compilieren einige fehler aufgetreten. trotz ausführlicher fehlersuche, komme ich zu keinem ergebnis.
es würde mich sehr freuen, wenn ihr mir helfen könnten!

folgende fehler sind aufgetreten:

zeile 44: 'output' undeclared (first use in function)
zeile 48: 'input' undeclared (first use in function)
zeile 57: 'low' undeclared (first use in function)
zeile 74: 'low' undeclared (first use in function)
zeile 74: 'high' undeclared (first use in function)

es steht bei jeder fehlerhaften zeile die zugehörige zeile dabei.

hier der programmcode:

code: [select]
#include <avr/io.h>

// die pausezeit "off_delay" bestimmt wie lange die motoren nach dem high impuls warten müssen
#define start_delay 1000 // eine startverzögerung von 100ms festlegen
#define on_delay 20 // die zeit die der motor läuft
#define auto_off_delay 40
#define test_off_delay 10
#define hand_off_delay 20
#define auto_wait_delay 10000 // wartezeit bis zur neuausrichtung im automatikbetrieb
#define test_wait_delay 100 // wartezeit bis zur neuausrichtung im testbetrieb

// variablendeklaration
int analogpin0 = 0;
int analogpin1 = 1;
int analogpin2 = 2;
int analogpin3 = 3;
double u_lo = 0; // variable für analog pin 0 deklarieren spannung links oben
double u_ro = 0; // variable für analog pin 1 deklarieren spannung rechts oben
double u_ru = 0; // variable für analog pin 2 deklarieren spannung rechts unten
double u_lu = 0; // variable für analog pin 3 deklarieren spannung links unten
int  pin2 = 2;
int  pin3 = 3;
int  pin6 = 6;
int  pin7 = 7;
int pin25 = 25;
int pin27 = 27;
int pin29 = 29;
int pin45 = 45;
int pin47 = 47;
int pin49 = 49;
int pin51 = 51;

void setup(void)
{

pinmode(pin2, output);  // arduino pin 2 als output zeile 44
pinmode(pin3, output); // arduino pin 3 als output
pinmode(pin6, output); // arduino pin 6 als output
pinmode(pin7, output); // arduino pin 7 als output
pinmode(pin25, input); // dipschalter stufe 1   zeile 48
pinmode(pin27, input); // dipschalter stufe 2
pinmode(pin29, input); // dipschalter stufe 3
pinmode(pin45, input); // tastereingang aufwärts pin 45 
pinmode(pin47, input); // tastereingang aufwärts pin 47
pinmode(pin49, input); // tastereingang linkslauf pin 49
pinmode(pin51, input); // tastereingang rechtslauf pin 51

// startzustand aller digitalen ausgänge auf low definieren
digitalwrite(pin2, low);                            // zeile 57
digitalwrite(pin3, low);
digitalwrite(pin6, low);
digitalwrite(pin7, low);
}
int main(void)
{
    /* replace application code */
    while (1) // dauerschleife
    {
delay(start_delay); // 1 sekunden warten beim schleifenstart
u_lo = analogread(analogpin0); // auslesen von analog-eingang pin 0
u_ro = analogread(analogpin1); // auslesen von analog-eingang pin 1
u_ru = analogread(analogpin2); // auslesen von analog-eingang pin 2
u_lu = analogread(analogpin3); // auslesen von analog-eingang pin 3

// automatikbetrieb
if(digitalread(pin25)== low && digitalread(pin27)== high && digitalread(pin29)== high) zeile 74
{
// wenn der dip-schalter 1  gesetzt ist und die anderen 2 stellungen nicht gesetzt sind, dann
while(u_lo>u_ro&&u_lu>u_ru) // solange u_lo>u_ro und u_lu>u_ru
{
digitalwrite(pin2, low); // da  pin 2 low
digitalwrite(pin3, high);    // und pin 3 high => motor 1 läuft im rechtslauf
delay(on_delay);
digitalwrite(pin3, low);
delay(auto_off_delay);
}
while(u_lo<u_ro&&u_lu<u_ru) // solange u_lo<u_ro und u_lu<u_ru
{ digitalwrite(pin3, low); // da  pin 3 low
digitalwrite(pin2, high);    // und pin 2 high => motor 1 läuft im linkslauf
delay(on_delay);
digitalwrite(pin2, low);
delay(auto_off_delay);
}
while(u_lo>u_lu&&u_ro>u_ru) // solange u_lo>u_lu und u_ro>u_ru
{
digitalwrite(pin7, low); // da pin 7  low
digitalwrite(pin6, high);    // und pin 6 high => motor2 wird eingefahren
delay(on_delay);
digitalwrite(pin6, low);
delay(auto_off_delay);
}
while(u_lo<u_lu&&u_ro<u_ru) // solange u_lo<u_lu und u_ro<u_ru
{ digitalwrite(pin6, low);         // da  pin 6 low
digitalwrite(pin7, high);    // und pin 7 high => motor2 wird ausgefahren
delay(on_delay);
digitalwrite(pin7, low);
delay(auto_off_delay);
}
delay(auto_wait_delay);
}

// testbetrieb
if(digitalread(pin27)==low && digitalread(pin25)==high && digitalread(pin29)==high)
//wenn dip 2 low ist, und dip 1 und dip 3 high, dann
{
while(u_lo>u_ro&&u_lu>u_ru) // solange u_lo>u_ro und u_lu>u_ru
{
digitalwrite(pin2, low); // da  pin 2 low
digitalwrite(pin3, high);    // und pin 3 high => motor 1 läuft im rechtslauf
delay(on_delay);
digitalwrite(pin3, low);
delay(test_off_delay);
}
while(u_lo<u_ro&&u_lu<u_ru) // solange u_lo<u_ro und u_lu<u_ru
{ digitalwrite(pin3, low); // da  pin 3 low
digitalwrite(pin2, high);    // und pin 2 high => motor 1 läuft im linkslauf
delay(on_delay);
digitalwrite(pin2, low);
delay(test_off_delay);
}
while(u_lo>u_lu&&u_ro>u_ru) // solange u_lo>u_lu und u_ro>u_ru
{
digitalwrite(pin7, low); // da pin 7  low
digitalwrite(pin6, high);    // und pin 6 high => motor2 wird eingefahren
delay(on_delay);
digitalwrite(pin6, low);
delay(test_off_delay);
}
while(u_lo<u_lu&&u_ro<u_ru) // solange u_lo<u_lu und u_ro<u_ru
{
digitalwrite(pin6, low); // da  pin 6 low
digitalwrite(pin7, high);    // und pin 7 high => motor2 wird ausgefahren
delay(on_delay);
digitalwrite(pin7, low);
delay(test_off_delay);
}
delay(test_wait_delay);
}

// handbetrieb
if(digitalread(pin29)== low && digitalread(pin25)==high && digitalread(pin27)==high) // wenn der dip-schalter 3  gesetzt ist und die anderen 2 stellungen nicht gesetzt sind, dann
{
while(digitalread(pin45)== high) // solange der taster für rechtslauf gedrückt ist...
{
digitalwrite(pin2, low); // da  pin 2 low
digitalwrite(pin3, high);    // und pin 3 high => motor 1 läuft im rechtslauf
delay(on_delay);
digitalwrite(pin3, low);
delay(hand_off_delay);
}
while(digitalread(pin47)== high) // solange der taster für linkslauf gedrückt ist...
{
digitalwrite(pin3, low); // da  pin 3 low
digitalwrite(pin2, high);    // und pin 2 high => motor 1 läuft im linkslauf
delay(on_delay);
digitalwrite(pin2, low);
delay(hand_off_delay);
}
while(digitalread(pin49)== high) // solange abwärts-taster gedrückt wird...
{
digitalwrite(pin6, low); // da  pin 6 low
digitalwrite(pin7, high);    // und pin 7 high => motor 2 wird ausgefahren
delay(on_delay);
digitalwrite(pin7, low);
delay(hand_off_delay);
}
while(digitalread(pin51)== high) // solange aufwärts-taster gedrückt wird...
{
digitalwrite(pin7, low); // da  pin 7 low
digitalwrite(pin6, high);    // und pin 6 high => motor2 wird ausgefahren
delay(on_delay);
digitalwrite(pin6, low);
delay(hand_off_delay);
}
}

}
}

folgende fehler sind aufgetreten:
...
es wäre gut, wenn du die zeilen, die die fehler verursachen, im quellcode kennzeichnen würdest. ich weiß nicht, ob ich bis 44 zählen kann :-)

grundsätzlich ist es beim debugging das beste, die fehler von oben nach unten abzuarbeiten. in der folge auftretende fehler verschwinden dann oft ebenfalls. behebe den ersten fehler und compiliere dann neu.

gruß

gregor


Arduino Forum > International > Deutsch (Moderator: uwefed) > Fehlersuche: Solarpanel mit Nachführung


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???