Show Posts
Pages: 1 ... 87 88 [89] 90 91 ... 94
1321  International / Deutsch / Re: Frage zu setTime(t) on: January 18, 2012, 03:22:17 pm
Dann bitte ich aber um ein Video, wenn der Arduino ein Feuerwerk zündet :-)
Das klingt nämlich richtig spannend.
1322  International / Deutsch / Re: Roboter prog. funktioniert nicht on: January 18, 2012, 11:51:39 am
Ob Du nun per Interrupt speicherst, ob ein Hinderniss erkannt wurde und das nur einmal im Loop auswertest, oder ob du an der entsprechenden Stelle prüfst, ob ein Hindernis da ist, ist egal. Durch die Interrupt Routine reagierst Du ja trotzdem nicht schneller.
Du kannst im übrigen den Roboter auch so stellen, das die Räder "in der Luft" hängen und nur drehen, ohne das eine Bewegung stattfindet. Dann kannst du den Arduino per USB Kabel an die serielle Konsole stecken und einfach mal debugausgaben der einzelnen Variablen und Zustände deines Programms ausgeben.Hindernisse kannst du an den Sensoren mit der Hand simulieren.
1323  International / Deutsch / Re: Roboter prog. funktioniert nicht on: January 18, 2012, 11:25:02 am
Ok, ich würde erstmal schrittweise vorgehen.

1. Schritt: keine Gegenstandserkennung. "Nur" ein dummes Sketch, das die Funktionen "vorwärts fahren", "rückwärts fahren", "links rum" und "rechts rum" testet. Damit kannst Du schon mal ausschliessen, das hier ein Fehler drin steckt.

2. Schritt: keine Bewegung. Nur die Sensoren per Interrupt abfragen und den Status in der Loop nach serial ausgeben. Damit kannst Du prüfen, ob die Sensoren so arbeiten wie Du es erwartest.

Danach kann dann wieder alles zusammengebaut werden.
1324  International / Deutsch / Re: Roboter prog. funktioniert nicht on: January 18, 2012, 11:00:30 am
Bitte beim nächsten Posten die "code" Tags verwenden. Das macht das Lesen einfacher.
1325  International / Deutsch / Re: Frage zu setTime(t) on: January 18, 2012, 10:59:33 am
Was mir auffällt ist, das Du eine globale Variable "time_t t" hast und im "loop()" selbst nochmal eine Variable "time_t t = now();" definierst. Ich würde vermuten, das diese dann die globale Variable überdeckt. Ein "t = now();" im Pause Abschnitt könnte evtl. schon helfen.
Mario.
1326  International / Deutsch / Re: Roboter prog. funktioniert nicht on: January 18, 2012, 12:15:05 am
Dann poste doch das angepasste Programm nochmal. Fehler in einer Software zu finden ist keine einmalige Sache, sondern ein kontinuierlicher Prozess. Schritt für Schritt werden Fehler gefunden und verbessert. Irgendwann geht es dann.
1327  International / Deutsch / Re: Frage zu setTime(t) on: January 17, 2012, 03:30:03 pm
Gerade noch gesehen. Da Du "adc_key_in" ja mehrmals verwendest, würde folgendes vermutlich noch besser funktionieren:
Code:
int button = 0;

...
setup() {
...
}

loop() {
    button = readButtons();

    if(button == btnSELECT) {
    ...
    }

    ...

    if(button == btnDOWN) {
    ...
    }

}
Somit reicht es , die Tasten einmal am Anfang der loop zu lesen.
1328  International / Deutsch / Re: Frage zu setTime(t) on: January 17, 2012, 03:23:02 pm
Nein, ausgelacht wird keiner. Wir haben alle mal angefangen (oder wieder angefangen  smiley), und so schlimm sieht der Code doch nicht aus. Die Struktur ist erkennbar und wenn man einige Dinge ein wenig umsortiert, wird es noch etwas übersichtlicher.
Ich fange einfach mal oben an.

1.) Includes am besten immer oben im Code eintragen, sonst besteht die Gefahr, das man Dinge schon verwendet die dann noch nicht vorhanden sind. "#include" ist für den Compiler ein reines Text ersetzen.
2.) Du definierst Dir einen Stapel int Variablen, die dann aber nur als "Platzhalter" in den Arrays verwendet werden. Das löst man besser mit den "#define" Regeln, denn auch hier ersetzt der Compiler wieder den Text und Du verschenkst keine 10x16 Byte für die Variablen. Die Übersicht bleibt trotzdem erhalten.
Code:
#define KANAL_1    2
#define KANAL_2    3
...
#define MODUL_C   A5

int Kanal[21] ={KANAL_1, KANAL_2 .... KANAL_7};
int Modul[21] ={MODUL_A, ... MODUL_C};
Solche Konstanten schreibt man in der Regel groß, damit man sie im Code gut von Variablen unterscheiden kann. Wichtig ist, das ein "#define" keine Variablenzuweisung ist, also kein "=" und auch kein ";" am Ende verwendet wird.

3.) In folgendem Abschnitt gibt es schon einen kleinen Logikfehler:
Code:
void loop() {

readButtons();
    
  if(adc_key_in < 790)   //Select-taste gedrückt
  {
  Start++;
  }

Du verwendest die Funktion "readButtons()", ohne deren Rückgabewert zu verwenden. Stattdessen greifst Du direkt auf die Variable "adc_key_in" zu. Das ist nicht falsch, aber unübersichtlich. Dadurch hast Du vermutlich übersehen, das Du nur auf "< 790" vergleichst. Das trifft aber für alle Tasten zu, nicht nur für die "select" Taste. Schau Dir dazu die Funktion "readButtons()" mal genauer an. Besser, übersichtlicher und damit lesbarer wäre vermutlich sowas wie
Code:
loop() {

    if(readButtons() == btnSELECT) {    // select-Taste gedrückt
        Start++;
    }
Das Problem hast Du im übrigen an allen Stellen Deines Codes. Hier würde ich als erstes "aufräumen".

4.) Das nächste ist diese Stelle:
Code:
 if (Pause == 0)
  {
  Feuerwerk();}   //Subroutine-Feuerwerk
  }
  
Hier steht hinter dem "Feuerwerk();" vermutlich fälschlicherweise eine "}" die den if(Pause==0) Block schliesst. Die folgende Klammer eine Zeile tiefer schliesst dann den umschliessenden Block und damit das "if(Start >= 1 && Ende == 0)" von viel weiter oben.

Ich persönlich habe mir folgende Schreibweise angewöhnt:
Code:
if ( BEDIGNUNG ) {
    CODE
    for ( SCHLEIFENKOPF) {
        CODE
        ...
    } // schleife ende
    ...
} // if ende
Also die öffnende Klammer eines Blocks hinter den öffnenden Befehl und die schliessende Klammer in eine eigene Zeile. Bei langen Codeblöcken am besten mit einem eindeutigen Kommentar, damit man die Klammer zuordnen kann. Die meisten Editoren oder IDEs können Klammern zuordnen, so sieht man gleich ob das passt oder nicht. Deinen Bug habe ich so auch gefunden.
Einrücken ist auch ganz wichtig bei komplexem Code. In der Regel reichen 4 Zeichen, 8 können bei vielen Schachtelungsebenen schon zu viel sein. Zeilen sollten nicht länger als 80 Zeichen werden. Nichts ist schlimmer als eine Zeile die umbricht und dann den Code unsleserlich macht.

Weiter habe ich erstmal nicht geschaut, evtl. reicht das ja schon, um Dich auf die richtige Spur zu bringen.

Grüße,
Mario.
1329  International / Deutsch / Re: AnalogRead vor void Loop() einlesen on: January 17, 2012, 11:48:14 am
Ha, zu langsam.
Meine Lösung sah identisch aus ... :-)

Aber zur Ergänzung / Info:
Variablen ausserhalb der Funktionen zu definieren sorgt dafür, das diese in allen Teilen Deines Programms sichtbar sind und verwendet werden können. Allerdings wird kein Code ausserhalb der Funktionen setup() und loop() ausgeführt (außer es werden zusätzlich Funktionen explizit aufgerufen oder per Interrupt getriggert).
Mario.
1330  International / Deutsch / Re: Frage zu setTime(t) on: January 17, 2012, 11:42:25 am
Bitte poste doch einfach mal Deinen Sketch, damit wir Dir helfen können. Du beschreibst ja nur, was Du machen willst und wir sehen nicht was Du tatsächlich gemacht hast :-)
Bitte auch die "code"-Tags verwenden, damit ist der Quellcode deutlich besser zu lesen.

Mario.
1331  International / Deutsch / Re: TX (PIN1) als normalen Digitalen Eingang nutzen? on: January 17, 2012, 07:49:54 am
Quote
... wenn ich die serielle Schnittstelle nicht nutze  ...
Es dürfte aber auch kein "Serial.begin()" im setup() stehen, denn damit initialisierst Du ja schon die Schnittstelle, was sicher zu Seiteneffekten führen kann.
Ist nur so eine Idee.
Mario.
1332  International / Deutsch / Re: Roboter prog. funktioniert nicht on: January 17, 2012, 01:53:37 am
Eine Sache die mir aufgefallen ist, wäre das setzen der Geschwindigkeit.
z.B.
Code:
   int zurueck_fahren(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, HIGH);
      digitalWrite (MotorControlR, HIGH);
      digitalWrite (MotorSpeedL, geschwindigkeit);
      digitalWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      return 0;
  }
digitalWrite() schreibt entweder HIGH oder LOW auf einen Ausgang. Ist das so gewollt, das die Motoren immer 100% drehen oder gar nicht? Sollte das per PWM gemacht werden, hast Du leider die falsche Funktion genutzt. "analogWrite()" ist da dein Freund. Die Pins die verwendet werden sind zumindest schonmal PWM Ausgänge.
1333  International / Deutsch / Re: Speicherproblem (?) bei Ethernet Modul ENC28J60 on: January 16, 2012, 03:30:33 pm
Das Anpassen der Lib könnte eine recht umfangreiche Aufgabe werden. Soweit ich sehen konnte, gibt es noch keinen Code der mehr als ein TCP-Paket als Antwort schickt.
Auch wenn es blöd klingt, aber evtl. kannst Du Dich ja doch zum folgendem Produkt durchringen:
http://www.komputer.de/zen/index.php?main_page=product_info&cPath=22&products_id=140
Der Wiz5100 Chip bringt nämlich den kompletten TCP/IP Stack schon mit.
Grüße,
Mario.
1334  International / Deutsch / Re: fotowiederstand anfänger frage on: January 14, 2012, 11:32:22 am
Was hast Du denn bisher gemacht? Also wie hast Du den Widerstand angeschlossen und wie sieht Dein Programm aus?
Von der Theorie her, schaltest Du den Fotowiderstand und einen Zweiten Widerstand in Reihe:

+5v ---------/\/\/\/\/\-------+---------/\/\/\/\/\------- GND
               Foto-R         |         Widerstand 2
                              |
                       Arduino Analogeingang         

und  misst zwischen den beiden Widerständen die Spannung an einem der analog-Eingänge.
Da der Fotowiderstand seinen Wert ändert, je nach Beleuchtung, ändert sich auch die gemessene Spannung.
Nun brauchst Du Dir nur noch den passenden Schwellwert überlegen. Wie groß Widerstand 2 werden muss, hängt vom Wert Deines Fotowiderstandes ab.

Grüße,
Mario.
1335  International / Deutsch / Re: Speicherproblem (?) bei Ethernet Modul ENC28J60 on: January 14, 2012, 12:53:20 am
 Was Du leider machen musst ist die Datenübertragung selbst steuern. Das ist leider bei TCP recht komplex. (http://de.wikipedia.org/wiki/Transmission_Control_Protocol)
Poste mal bitte einen Link zu der Bibliothek die Du benutzt, evtl. gibst das schon was passendes.
Mario.
Pages: 1 ... 87 88 [89] 90 91 ... 94