Show Posts
Pages: 1 2 3 [4] 5 6 ... 94
46  International / Deutsch / Re: neues Projekt - Digitaluhr mit richtig großen Zahlen on: January 03, 2014, 03:40:59 am
Für solche Aufgaben verwende ich gerne die ULN2003 für die 7-Segement Teile. Für den Doppelpunkt kann man zusätzlich einen ULN2803 (8 statz 7 I/Os) nehmen. Die Dinger können pro Kanal max. 500mA und gesamt (alle Kanäle zusammen) 0.7A. Das spart einen Haufen Transistoren.
Mario.
47  International / Deutsch / Re: Arduino Nano mit Ethernet on: December 30, 2013, 02:36:57 am
Wenn es dieses Shield ist:
http://www.ebay.de/itm/Ethernet-Shield-for-Arduino-Nano-UNO-R3-work-as-ENC28J60-RJ45-Webserver-/170972854883?pt=Bauteile&hash=item27cec6ba63,
dann verwendest Du die falsche Bibliothek. Die Ethernet-Library des Arduino bezieht sich auf den WIZnet W5100 Chip. Auf Deinem Shield ist aber ein ENC28J60. Dafür gibt es aber auch eine Bibliothek.
Die aktuell wohl beste Lib dafür ist folgende:
https://github.com/ntruchsess/arduino_uip
Hier gibt es auch jede Menge Beispiele.
Mario.
48  International / Deutsch / Re: Echtzeitfähiges Arduino Projekt Frage on: December 30, 2013, 02:26:36 am
Warum müssen denn die Daten alle in einer Datei stehen? Da das RFID-Tag eindeutig ist, kann man das auch für den Dateinamen verwenden. Der Vorteil ist, man muss nicht jedesmal eine große Datei nach dem passenden Tag durchsuchen, sondern versucht einfach z.B. TAGNAME.dat zu öffnen. Gibt es die Datei, steht drin was gemacht werden soll, gibt es die Datei nicht, weiß der Arduino, das es ein unbekanntes Tag ist. Zusätzlich kann man z.B. in TAGNAME.log alle Zugriffe speichern. Das ist deutlich flexibler.
Mario.
49  International / Deutsch / Re: Arduino Binärzähler on: December 29, 2013, 11:10:37 am
Einfach ein Zähler. Der Wert wird zwar Binär in einer Variablen gespeichert, aber das hat ja erstmal einen Einfluss auf Deine Aufgabe. Die Frage ist ja eher, was Du mit dem gezählten Werten anfangen willst. Wenn Du sie "binär" ausgeben willst (z.B. über eine Reihe von LEDs), dann ist es ein "Binärzähler" :-)
Poste doch mal Deinen Sketch, dann kann man Dir sicher besser helfen.
Mario.
50  International / Deutsch / Re: Ethernet Libary, Unterschied zwischen if(client) und if(server.available) on: December 29, 2013, 08:36:02 am
So ist es.
51  International / Deutsch / Re: Ethernet Libary, Unterschied zwischen if(client) und if(server.available) on: December 29, 2013, 06:17:33 am
Hier werden zwei Dinge gemacht.

Wenn ein Client für den Server verfügbar ist, dann liefert die Methode "server.available()"  ein Objekt vom Typ "EthernetClient"  zurück. Wenn kein Client verfügbar ist, dann wird "NULL" zurückgeliefert.

Du könntest zwar "if (server.available())" verwenden, das wäre theoretisch nicht falsch, hat aber einen großen Nachteil. Du weißt zwar, das es einen Client (sprich eine Netzwerkanfrage) an Deinen Arduino gibt, kannst darauf aber nicht reagieren.

Deshalb macht man zuerst
Code:
client = server.available();
Damit hat "client" entweder ein EthernetClient Objekt als "Inhalt" oder es ist "NULL".
Nun kann man einfach mit
Code:
if (client)
prüfen, ob ein Client verfügbar ist UND man kann das Objekt gleich verwenden, um einen Antwort zu senden.
Mario.
52  International / Deutsch / Re: Dynamische Speicherallozierung on: December 26, 2013, 01:55:18 am
Ja, tut es. Danke fürs rausfinden.
Mario.
53  International / Deutsch / Re: AnalogRead gibt nicht das gewollte aus-Einsteigerfrage on: December 25, 2013, 07:49:51 am
Ja, wenn Du mit einem veränderlichen Widerstand messen willst, dann brauchst Du immer einen Spannungsteiler. Es gibt aber auch Sensoren, die bereits eine sich ändernde Spannung liefern, die kannst Du dann direkt anschließen. Zumindest solange die Spannung positiv und nicht über Vref liegt.
Mario.
54  International / Deutsch / Re: Frage zu AnalogRead() on: December 24, 2013, 10:27:16 am
Leider kann das so nicht funktionieren. Da Du nur einen Widerstand hast, fallen die 5V IMMER über dem Widerstand ab, egal welche Größe der gerade aufgrund des Lichteinfalls hat.
Was Du brauchst ist ein Spannungsteiler (siehe Wikipedia).
Also 2 Widerstände, einen festen und den lichtempfindlichen. Die Spannung misst Du dann über dem veränderlichen Widerstand.
Siehe auch hier:
http://www.arduino-tutorial.de/2010/06/analog-in/
Mario.

Hehe: 12 Sekunden zu langsam :-)
55  International / Deutsch / Re: Weihnachts Grüße............................. on: December 24, 2013, 10:23:16 am
Auch von mir die besten Wünsche zum Weihnachtsfest. Lasst Euch reich mit kleinen blinkenden Dingen beschenken :-)
Mario.
56  International / Deutsch / Re: Dynamische Speicherallozierung on: December 23, 2013, 09:20:08 am
Klingt plausibel, passt aber nicht zu folgender Ausgabe:
Code:
void setup()
{
Serial.begin(9600);
uint8_t* ptr1 = (uint8_t*) malloc(32);
uint8_t* ptr2 = (uint8_t*) malloc(32);
uint8_t* ptr3 = (uint8_t*) malloc(32);
uint8_t* ptr4 = (uint8_t*) malloc(32);
Serial.print((word)ptr1,HEX);
        Serial.print(" @ ");
Serial.println((word)&ptr1,HEX);
Serial.print((word)ptr2,HEX);
        Serial.print(" @ ");
Serial.println((word)&ptr2,HEX);
Serial.print((word)ptr3,HEX);
        Serial.print(" @ ");
Serial.println((word)&ptr3,HEX);
Serial.print((word)ptr4,HEX);
        Serial.print(" @ ");
Serial.println((word)&ptr4,HEX);
}
void loop()
{

}
Quote
1D3 @ 8EC
1F5 @ 8EE
217 @ 8F0
239 @ 8F2
Wie man sieht, liegen die Variablen ptr1 bis ptr4 ganz woanders.

Mario.
57  International / Deutsch / Re: Dynamische Speicherallozierung on: December 23, 2013, 07:12:54 am
Spannend finde ich, das die einzelnen Bereiche noch 2 Bytes auseinander liegen. Sprich zwischen den Pointern liegen 34 Bytes, nicht 32. Somit werden jedesmal 2 Byte verschwendet. Wäre interessant zu wissen, wofür die gebraucht werden.
Mario.
58  International / Deutsch / Re: UDP Befehle Senden on: December 23, 2013, 07:06:12 am
Poste mal den vollständigen Code mit dem Du sendest. UDP ist eigentlich kein "Hexenwerk". :-)
59  International / Deutsch / Re: Dynamische Speicherallozierung on: December 23, 2013, 07:05:14 am
Naja, "*ptr" liefert aber das erste Byte Deines Puffers, nicht den Pointer selbst. Der "*" vor dem Variablennamen dient zum "dereferenzieren" des Pointers.
Folgender Code liefert die Adressen der Pointer:
Code:
void setup()
{
Serial.begin(9600);
uint8_t* ptr1 = (uint8_t*) malloc(32);
uint8_t* ptr2 = (uint8_t*) malloc(32);
uint8_t* ptr3 = (uint8_t*) malloc(32);
uint8_t* ptr4 = (uint8_t*) malloc(32);
Serial.println((word)ptr1,HEX);
Serial.println((word)ptr2,HEX);
Serial.println((word)ptr3,HEX);
Serial.println((word)ptr4,HEX);
}
void loop()
{

}
Der Cast auf "word" ist notwendig, da Serial.println() mit einem Pointer auf ein Byte nix anfangen kann.

Mario.
60  International / Deutsch / Re: Online Abfrage von Benzin Preisen on: December 22, 2013, 08:16:43 am
Nein, eigentlich sollte das passen. Hab das selbst gerade mal getestet mit dem einfache WebClient Beispiel der Ethernet-Lib.
Klappt recht gut. Allerdings wird das Parsen der HTML-Daten spannend, da die Webseite 58.000 Bytes groß ist.
Mit dem Textfinder klappt das aber recht gut:
Ausgabe auf dem Serial Monitor:
Quote
connecting...
connected
Tankstelle 1
Wilms-Wickrath, Dieselstr. 14-20, 1.449 Euro
Tankstelle 2
OIL!, Karlstrasse  59, 1.479 Euro
Tankstelle 3
Shell, HARDTER STR. 133, 1.489 Euro
Tankstelle 4
Shell, MARIE-BERNAYS RING, 1.489 Euro
Tankstelle 5
Shell, DUVENSTRASSE. 339, 1.499 Euro
Tankstelle 6
TOTAL, DAHLENER STR. 520, 1.519 Euro

Hier der Code dazu:
Code:

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.clever-tanken.de";    // name address for Google (using DNS)
EthernetClient client;

TextFinder finder( client);

char preis1[10];
char preis2[5];
char tankstelle[100];
char adresse[100];

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /tankstelle_liste?spritsorte=7&r=5&ort=41189&lat=&lon= HTTP/1.1");
    client.println("Host: www.clever-tanken.de");
    client.println("Connection: close");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  int counter=1;
  if (client.connected()) {
    while(finder.find("addPoi")) {
       finder.getString("class=\"price\">","<",preis1,10);
       finder.getString("<sup>","</sup>",preis2,5);
       finder.getString("location_name\">","</div>",tankstelle,100);
       finder.getString("street_number\">","</div>",adresse,100);
       Serial.print("Tankstelle ");
       Serial.println(counter++);
       Serial.print(tankstelle);
       Serial.print(", ");
       Serial.print(adresse);
       Serial.print(", ");
       Serial.print(preis1);
       Serial.print(preis2);
       Serial.println(" Euro");
       
    }
  client.stop();
  }
  while(1) {};
}
Pages: 1 2 3 [4] 5 6 ... 94