Show Posts
Pages: 1 ... 87 88 [89] 90 91 ... 95
1321  International / Deutsch / Re: Probleme mit Ansteuerung der 2.Zeile seit arduino-1.0-rc2 on: January 27, 2012, 09:11:30 am
Eben genau das meinte ich. Die Beschreibung der Pin-Zuordnung und der im gleichen Post beschriebene Aufruf des Konstruktors passten nicht zusammen.
1322  International / Deutsch / Re: Probleme mit Ansteuerung der 2.Zeile seit arduino-1.0-rc2 on: January 27, 2012, 01:23:02 am
Auf die Idee mit der falschen Verkabelung bin ich durch den folgenden Post gekommen:
Quote
Display - 16x2 LC-Display mit Hintergrundbeleuchtung von Displaytech mit Hitachi HD44780 Controller

Anschlüsse:
E - LCD-Pin6 an digiPin11
RS - LCD-Pin4 an digiPin12
DB4E - LCD-Pin11 an digiPin3
DB4E - LCD-Pin12 an digiPin4
DB4E - LCD-Pin13 an digiPin5
DB4E - LCD-Pin14 an digiPin6
Da ist es nämlich genau anders herum beschrieben, also D4 an Pin3 und nicht D7 an Pin3.
Aber dann sollte es tatsächlich gar nicht funktionieren und nicht erst ab der 2. Zeile.
1323  International / Deutsch / Re: Probleme mit Ansteuerung der 2.Zeile seit arduino-1.0-rc2 on: January 26, 2012, 12:56:45 pm
Leider sind die Bilder recht klein, daher kann man nicht sehr viel erkennen. Allerdings sieht das Display so aus, als wären die Pins recht unregelmäßig angelötet. Hast Du schon mal die Display-Anschluss Pins auf Lötbrücken geprüft?
Stimmt die Zuordnung der Datenpins? Also D4 bis D7 an Arduino-Pin 3 bis 6?
Dein Aufruf "LiquidCrystal lcd(12, 11, 6, 5, 4, 3);"

würde bedeuten, das

D4 an Pin 6
D5 an Pin 5
D6 an Pin 4
D7 an Pin 3

angeschlossen ist.

siehe http://arduino.cc/en/Reference/LiquidCrystalConstructor
Quote
Syntax
LiquidCrystal(rs, enable, d4, d5, d6, d7)

Mehr fällt mir erstmal auch nicht ein.
1324  International / Deutsch / Re: BLIPTRONICS LED Pixel 15mm Naked PCB on: January 26, 2012, 12:47:11 pm
Aus aktueller Erfahrung in Sachen Zoll folgende Hinweise:

1) Außen auf dem Paket muss die Rechnung angebracht werden, damit der Zoll die Ware prüfen kann. Zusätzlich muss auf dem Zollzettel der auf das Paket geklebt wird der Wert der Ware angegeben sein
2) Auf dem Zollzettel muss die Art der Ware angegeben sein. Wie ich selbst gerade herausfinden durfte, reicht "electronic parts" nicht aus.
3) Man sollte eine Rechnung mit Zahlungsnachweis haben. Nur der Nachweis das man z.b. per PayPal gezahlt hat, reicht leider nicht. Auf der Rechnung muß die Art der Ware klar erkennbar sein.

Je nach Art der Ware zahlt man in der Regel 19% Einfuhrsteuer, was dem Mehrwertsteuersatz entspricht. Ab einem bestimmten Wert und bei bestimmten Warengruppen muss man zusätzlich noch Zollgebühren bezahlen.
Wieviel und bei welchen Waren, das weiss nur der Zoll. Wer mal versucht hat das auf www.zoll.de herauszufinden, weiss was ich meine :-)
Achso, der Zoll selbst ist im übrigen nicht verplichtet eine Auskunft zu erteilen ... Allerdings sind die meistens recht umgänglich, wenn man Fragen hat, da sich die Damen und Herren damit ja auch das Leben leichter machen.

Mein Paket ist nun zurück auf dem Weg nach Amerika, weil der Händler wirklich alles falsch gemacht hat, was nur geht. Zur Zeit läuft ein Antrag auf Käuferschutz bei Paypal und ich hoffe ich sehe meine 77 Dollar wieder.
Allerdings ist das bisher von 5 Päckchen (3x Hongkong, 1x Polen, 1xAmerika) das einzige, wo es schief gegangen ist.
1325  International / Deutsch / Re: Arduino als HTTP Client - Daten auslesen on: January 23, 2012, 03:24:55 pm
Schau Dir mal http://www.arduino.cc/playground/Code/TextFinder an. Um mir  UDP / NTP zu ersparen und da meine Wetterstation eh als Webclient arbeitet, habe ich mir eine Funktion gebaut, die den aktuellen Unix-Timestamp über einen Webrequest bekommt:
Die Ausgabe unter der URL sieht wiefolgt aus:
Quote
CURRENT TIME 1327349909
Folgender Code wertet das dann aus:
Code:
#include <Ethernet.h>
#include <TextFinder.h>
...
Client client(server, 8888);
TextFinder finder( client);
...
void getTime() {
  if (client.connect()) {
    Serial.print("connected... ");
    client.println("GET /time HTTP/1.0");
    client.println("Host: wetter.office.das-tierhausi.de");
    client.println();
  } else {
    Serial.println("connection failed");
  }
  if (client.connected()) {
    gettime = 0;
    if(finder.find("CURRENT TIME")){   
         gettime = finder.getValue(',');
         Serial.print(gettime);
         Serial.println(" seconds since 1970");         
    }
    if(gettime == 0){
      Serial.println("No time. ");
    }   
    client.stop();
    //time offset abziehen
    //damit kann immer mittels time + millis() / 1000 der aktuelle timestamp berechnet werden.
    time = gettime - millis() / 1000;
  }
}
Der "Trick" sind die beiden Zeilen "if(finder.find("CURRENT TIME")){  ", hier wird nach dem Markierungsstring gesucht, und
"gettime = finder.getValue(',');". Damit wird der nächste Wert nach dem Markierungsstring ermittelt. Das klappt bei mir hervorragend.
1326  International / Deutsch / Re: LCD Display am Schieberegister on: January 21, 2012, 01:55:44 pm
Ich bin noch mit der 0.22 unterwegs. Folgender "diff" sollte helfen (ungetestet)
Code:
diff -ur ShiftRegLCD/ShiftRegLCD.cpp ShiftRegLCD_1_0/ShiftRegLCD.cpp
--- ShiftRegLCD/ShiftRegLCD.cpp 2011-07-02 23:56:17.000000000 +0200
+++ ShiftRegLCD_1_0/ShiftRegLCD.cpp 2012-01-21 19:49:34.000000000 +0100
@@ -223,8 +223,9 @@
   send(value, LOW);
 }
 
-void ShiftRegLCD::write(uint8_t value) {
+size_t ShiftRegLCD::write(uint8_t value) {
   send(value, HIGH);
+  return 0;
 }
 
 // For sending data via the shiftregister
diff -ur ShiftRegLCD/ShiftRegLCD.h ShiftRegLCD_1_0/ShiftRegLCD.h
--- ShiftRegLCD/ShiftRegLCD.h 2009-11-05 03:20:00.000000000 +0100
+++ ShiftRegLCD_1_0/ShiftRegLCD.h 2012-01-21 19:47:49.000000000 +0100
@@ -73,7 +73,7 @@
 
   void createChar(uint8_t, uint8_t[]);
   void setCursor(uint8_t, uint8_t);
-  virtual void write(uint8_t);
+  virtual size_t write(uint8_t);
   void command(uint8_t);
 private:
   void init(uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, uint8_t font);
Tausche einfach in den beiden h und cpp Dateien die Zeilen mit dem "-" durch die Zeilen mit dem "+". (inkl. der ergänzenden Zeile "return 0;").
Damit sollte es gehen, außer es wurde noch eine Methode von "Print" in der Version 1.0 verändert.

Es wäre von den Arduinoentwicklern besser gewesen, die Methode "void write()" nicht zu ersetzten, sondern "size_t write()" in der Print Klasse zu ergänzen, dann gäbe es die Probleme nicht.
1327  International / Deutsch / Re: Anfaenger sucht sowas wie ne WAIT funktion on: January 21, 2012, 01:45:26 pm
Quote
jetzt geht gateStatus irgendwann auf LOW und dann wieder auf HIGH. Also das gleiche spiel von vorn, nur das jetzt step 2
spiele Step 2 =>  digitalWrite(greenLed,LOW);
                            delay
                            digitalwrite(greenLed,LOW);
Das verstehe ich auch noch nicht so ganz? Außer die LED auf LOW setzen, brauchst Du doch im Step 2 nix machen, oder? warum dann noch ein delay und dann nochmal die LED auf LOW setzen? Um sicher zu sein, das sie wirklich aus ist?  smiley

Richtig verstanden habe ich Dein Ziel leider immer noch nicht, isgt es richtig, das Du über das clockGateOut irgendetwas externes triggern willst? Die Geschwindigkeit soll dabei von einem Wert abhängen, die über ein Poti am analogen Eingang eingestellt wird?
Dazu die erste Frage, über welche Zeiten für den Clock-Impuls reden wir? analogRead() liefert maximal den Wert 1023, das wäre dann knapp eine Sekunde, wenn Du mit millis() arbeitest. Bis auf die Steps zum blinken der LED sehe ich im orginalem Sketch keine weiteren Funktionen. Daher würde ich erstmal schrittweise anfangen.

Code:
#define CLOCK_OUT 13
#define LED_OUT 11
#define POTI_PIN A2

int clockState = LOW;
unsigned long previousTime = 0;
int clockSpeed = 0;

void setup() {
  Serial.begin(9600);
  pinMode(CLOCK_OUT, OUTPUT);
  pinMode(LED_OUT, OUTPUT);
 
}


void loop() {
  clockSpeed = getSpeed(POTI_PIN);
  if(millis() - clockSpeed > previousTime) {
   
      // LOW <-> HIGH     
      clockState = !clockState;
     
      //Clock Out schreiben
      digitalWrite(CLOCK_OUT,clockState);
     
      //LED blinkt im Takt von Clockout
      digitalWrite(LED_OUT,clockState);
     
      //zeit merken
      previousTime = millis();
  }
}


int getSpeed(int pin) {
   //spaeter kann hier noch zusätzlicher code zum setzen der geschwindigkeit rein
   return analogRead(pin);
}

Das kann als Basis für Erweiterungen dienen. Im o.g. Beispiel blinkt die LED immer im Takt von Deinem ClockSpeed. Wenn die LED häufiger blinken soll, und das vom Clock-Wechsel getriggert werden soll, dann kann man das auch recht einfach ergänzen.
1328  International / Deutsch / Re: LCD Display am Schieberegister on: January 21, 2012, 11:45:34 am
hmm, natürlich nicht  smiley-roll
klarer fall von  smiley-cool
1329  International / Deutsch / Re: Verwendung der Library MenuBackend on: January 21, 2012, 09:53:47 am
Da wohl die meisten die Bibliothek nicht kennen, wäre ein Link hilfreich. Und ein wenig Code der schon vorhanden ist auch.
Ansonsten würde ich vorschlagen Du legst Dir eine Variable an, in der die aktuelle Zeit (millis()) gespeichert wird und schaust in jedem Durchlauf von loop() ob millis() -5000 (5 sekunden) größer ist als der gemerkte wert. (wenn ja ist die Zeit abgelaufen und Du kannst Dein Menü entsprechend anpassen)
jedesmal wenn eine taste betätigt wird, speicherst du den aktuellen wert den millis() in dieser variable ab, um die Zeit von vorn zählen zu lassen.
Ob sich das in Deinem Sketch so einfach umsetzen läßt, können wir ohne Code aber nicht sagen.
1330  International / Deutsch / Re: Anfaenger sucht sowas wie ne WAIT funktion on: January 21, 2012, 09:49:13 am
Ok, es gibt zwei Ansätze, die Du verfolgen kannst.

1) Alles Steps werden in einem Durchlauf der Funktion "loop()" abgearbeitet. Ist die Funktion durchgelaufen fängt alles wieder von vorn an.
    In diesem Fall würde ich den Clock-Code in eine Funktion packen und zwischendurch immer wieder aufrufen, da Du ja innerhalb von loop() immer wieder warten musst. GGf. per Timer-Interrupt. Allerdings halte ich das persönlich für die ungünstigere Lösung.

2) Pro Durchlauf von loop() wird nicht gewartet. Am Anfang wird einmal der Clock-Code ausgeführt und entsprechende Status-Variablen gesetzt. Zusätzlich merkst Du Dir in einer globalen Variable, welcher Step der aktuelle ist. Dazu kommen für die verschiedenen "Blink"- und Schalt-Stati die entsprechenden Zeiten die gespeichert werden müssen. In Abhängigkeit des ermittelten Status wird dann z.B.  entschieden im aktuellen Step die LED zu schalten, oder aufgrund des "Clock"-Status in den nächsten Step zu wechseln, also die Variable "step" um eins zu erhöhen. Es wird damit innerhalb von loop() immer nur der Code des aktuellen Steps ausgeführt und ggf. in den nächsten Step gewechselt. Da Du nur eine LED verwendest, musst Du Dir eigentlich nur zwei Variablen "greenLEDvalue (HIGH|LOW)" und "unsigned long greenLEDtime" für das Blinken anlegen. Letztere speichert die Zeit seit der letzen Änderung des Status. Bei jedem Step kannst Du nun vergleichen, ob millis() - "blinkzeit" >  greenLEDtime ist. Wenn ja, dann "greenLEDvalue = !greenLEDvalue;" und Wert auf das LED-Pin schreiben. Danach die aktuelle Zeit merken "greenLEDtime = millis()". Somit bekommst Du das Blinken ohne delay hin.
1331  International / Deutsch / Re: Arduino pingt auf IP on: January 21, 2012, 09:34:23 am
Was Du machen willst, ist ein ICMP Request (ping) http://de.wikipedia.org/wiki/Internet_Control_Message_Protocol
Leider bietet die Ethernet-Bibliothek dazu keine Funktion an, der WIZ5100 kann aber sehr wohl ICMP und beim ENC28J60 muss man eh alles selbst machen.
Vermutlich musst Du Dich ein wenig mit dem WIZ5100 auseinandersetzen, um einen ICMP Request abzusetzen. Auf die Schnelle hab ich bei google auch nix zum Arduino gefunden.
1332  International / Deutsch / Re: LCD Display am Schieberegister on: January 21, 2012, 09:21:32 am
Welche Version der IDE verwendest Du?
1333  International / Deutsch / Re: Anfaenger sucht sowas wie ne WAIT funktion on: January 21, 2012, 04:33:38 am
Ich denke du solltest die Struktur Deines Programms überdenken. Nach Möglichkeit keine delay() Aufrufe verwenden, sondern das durch Zeitdifferenzen lösen.
Desweitern ist mir folgendes in Deinem Code aufgefallen:
Code:
      gateState = LOW;                                          //

    digitalWrite(clockGateOut, gateState);                      //
  }
//----------------------------------------------------------------

  // Step 1
  gateStatus = digitalRead(clockGateOut);
  if(gateStatus == HIGH) {
Du verwendest das Pin "clockGateOut" aus OUTPUT. In Deinem "Clock-Code" wird die Variable "gateStatus" nach dem Clock-Code aber per "digitalRead()" von einem als OUTPUT deklarierten Pin gelesen und in Abhängigkeit davon wird etwas gemacht. Das ergibt keinen Sinn.

Weiterhin verwendest Du die Variablen gateState and gateStatus für den auf einem Pin zu setzenden Wert, machst dann aber ein
Code:
    xz = gateStatus;                                           // hier soll die while-schleife
    while(xz == 1) {                                           // dafuer sorgen, das der naechste step erst
      xz = digitalRead(gateStatus);                            // augefuehrt wird wenn
   }
Also ein "digitalRead()" vom Wert, nicht vom Pin. Das der Compiler das akzeptiert, liegt daran das auch HIGH und LOW am Ende einfach nur 0 oder 1 sind. Leider verstehe ich auch nicht, was Du mit dem Programm eigentloch genau machen willst. Evtl. lieferst Du ja mal eine kurze Ablaufbeschreibung Deines Programms in Worten.
Mario.
1334  International / Deutsch / Re: Datei von SD über Ethernet übertragen on: January 21, 2012, 03:21:22 am
Aus dem geöffneten File liest Du zeichenweise, da wird nix automatisch in einen Puffer gelesen. Allerdings teilen sich SD und Ethernet-Schnittstelle den SPI Bus, daher könnte das die Ursache Deines Problems sein.
http://arduino.cc/en/Main/ArduinoEthernetShield:
Quote
Note that because the W5100 and SD card share the SPI bus, only one can be active at a time. If you are using both peripherals in your program, this should be taken care of by the corresponding libraries.

1335  International / Deutsch / Re: Serial.read() in HEX, XOR und andere Fragen on: January 20, 2012, 03:49:55 pm
Stimmt, Du denkst zu kompliziert :-)
per Serial.read() liest Du schon eine Zahl, die Du ja nur per String(WERT,HEX) in eine Zeichenkette umwandelst. Beim Rechnen mit Zahlen ist es wurscht in welchem Zahlensystem die sind, denn Dein Arduino kennt eh nur das Binärsystem :-)
Pages: 1 ... 87 88 [89] 90 91 ... 95