Show Posts
Pages: 1 ... 85 86 [87] 88 89 ... 95
1291  International / Deutsch / Re: ATmega328 mit Arduino Bootloader kaufen? on: February 14, 2012, 12:21:07 pm
Witzig, das hab ich auch mal gearbeitet. Im Focus-Teleport hab ich mal das Admin-Zepter geschwungen :-)
1292  International / Deutsch / Re: Servo Scheibenwischerbetrieb, Zeit aendern on: February 14, 2012, 12:17:51 pm
Ok, sorry. Das hatte ich tatsächlich übersehen. Versuch mal in der CheckTransmitter (oder dem Aufruf im if-Block in sweepfunction()) per Seria.-println() diverse Werte zu debuggen auszugeben. Damit siehst Du zum einen ob die Funktion an der richtigen Stelle aufgerufen wird und welche Werte danach gesetzt sind.
1293  International / Deutsch / Re: Servo Scheibenwischerbetrieb, Zeit aendern on: February 14, 2012, 11:23:22 am
Du ahst nur das CheckTransmitter in die sweep-Funktion befördert. Allerdings ohne einen wirklichen Effekt, denn ob Du nun bei jedem Aufruf von loop() einmal checktransmitter aufrufs oder jedesmal innerhalb von sweepfunction(), aber immer noch nur einmal während des Durchlaufs von loop() macht keinen Unterschied.
Du musst wenn schon innerhalb der for-Schleife im sweepfunction() die CheckTransmitter() aufrufen.
1294  International / Deutsch / Re: Newbie braucht Hilfe bei Serial Monitor on: February 14, 2012, 04:32:00 am
Soweit ich das sehe, verwendest Du die Klasse "String" für die Variable inputString. Daher ist das mit dem Vergleich erstmal nicht so falsch.
Ich würde jetzt erstmal schrittweise vorgehen und das Programm auf das wesentliche reduzieren. D.h. nur von der seriellen Schnittstelle lesen und dann die Daten ausgeben und vergleichen. Ich würde außerdem prüfen, ob evtl. neben dem "P0" oder "P3" noch ein anderes Zeichen mit an dem seriell übermittelten String dran hängt. Schickt Windows nicht immer ein "\r\n"? Nicht das Du das "\r" auch noch mit am String hängen hast, da ja nur auf "\n" für das Ende getestet wird. Am einfachsten ist es wohl, sich mal die Länge von inputString ausgeben zu lassen.
inputString.length() liefert die Länge.
Achso, ein inputString.startWith("P3") statt des inputString == "P3" könnte im Fall von zusätzlichen Zeichen auch helfen.
1295  International / Deutsch / Re: Newbie braucht Hilfe bei Serial Monitor on: February 14, 2012, 03:12:13 am
Strings können beim Vergleichen lustige Seiteneffekte verursachen. Um der Sache auf den Grund gehen zu können, wäre es gut, wenn Du den kompletten Sketch posten könntest. Idealerweise in den "#" Tags, damit der Code auch als Code angezeigt wird.
Wichtig wäre nämlich zu wissen, von welchem Typ Deine Variable inputString ist.
1296  International / Deutsch / Re: Zählung von Impulsen on: February 14, 2012, 12:59:47 am
Nicht schlecht. Könntest Du noch die Schaltung für den NE555 posten, falls das mal jemand nachbauen möchte?
Ändert sich die Frequenz eigentlich linear zum Füllstand? Wenn ja, könnte man ja recht einfach eine Kalibrierung bauen, indem man einmal bei "0" und einmal bei "Voll" die Frequenz z.B. im EEPROM speichert. Somit können dann recht einfach die Sensoren getauscht werden.
1297  International / Deutsch / Re: Udp.h - wo bekomme ich die her? on: February 14, 2012, 12:46:27 am
Das NTP-Beispiel wird mit der neuen IDE so nicht mehr funktionieren. Die Datei "Udp.h" gibt es zwar noch, allerdings wurden Teile davon in die Klasse EthernetClient integriert.
Hier ist ein Beispiel, das auch mit der Version 1.0 der IDE funktioniert:
Code:
/*
 * Time_NTP sketch
 * Example showing time sync to NTP time source
 *
 * This sketch uses the Time library
 * and the Arduino 1.0 Ethernet library
 */

#include <Time.h>
#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUDP.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 44 }; // set this to a valid IP address (or use DHCP)

unsigned int localPort = 8888;      // local port to listen for UDP packets

IPAddress timeServer(192, 43, 244, 18); // time.nist.gov NTP server

const int NTP_PACKET_SIZE= 48; // NTP time stamp is in first 48 bytes of message
byte packetBuffer[ NTP_PACKET_SIZE]; // buffer to hold incoming/outgoing packets

time_t prevDisplay = 0;    // when the digital clock was displayed

// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);
  Serial.println("waiting for sync");
  setSyncProvider(getNtpTime);
  while(timeStatus()== timeNotSet)
     ; // wait until the time is set by the sync provider
}

void loop()
{
  if( now() != prevDisplay)   //update the display only if the time has changed
  {
    prevDisplay = now();
    digitalClockDisplay();
  }
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(dayStr(weekday()));
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(monthShortStr(month()));
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding
  // colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

/*-------- NTP code ----------*/

unsigned long getNtpTime()
{
  sendNTPpacket(timeServer); // send an NTP packet to a time server
  delay(1000);
  if ( Udp.parsePacket() ) {
     Udp.read(packetBuffer,NTP_PACKET_SIZE);  // read packet into buffer


     //the timestamp starts at byte 40, convert four bytes into a long integer
     unsigned long hi = word(packetBuffer[40], packetBuffer[41]);
     unsigned long low = word(packetBuffer[42], packetBuffer[43]);
     // this is NTP time (seconds since Jan 1 1900
     unsigned long secsSince1900 = hi << 16 | low; 
     // Unix time starts on Jan 1 1970
     const unsigned long seventyYears = 2208988800UL;     
     unsigned long epoch = secsSince1900 - seventyYears;  // subtract 70 years
     return epoch;
  }
  return 0; // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress address)
{
  memset(packetBuffer, 0, NTP_PACKET_SIZE);  // set all bytes in the buffer to 0

  // Initialize values needed to form NTP request
  packetBuffer[0] = B11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum
  packetBuffer[2] = 6;     // Max Interval between messages in seconds
  packetBuffer[3] = 0xEC;  // Clock Precision
  // bytes 4 - 11 are for Root Delay and Dispersion and were set to 0 by memset
  packetBuffer[12]  = 49;  // four-byte reference ID identifying
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // send the packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Udp.endPacket();
}
Das Beispiel verwendet zusätzlich die Time-Bibliothek, die man unter http://www.arduino.cc/playground/Code/Time findet. Beim Auspacken der Lib aber aufpassen im ZIP-File selbst ist nochmal ein Verzeichnis "Time". Dieses muss in das libraires-Verzeichnis kopiert werden, damit die IDE die Lib findet. Prüfen kann man das recht einfach. Nach einem Neustart der IDE sollten unter File->Examples die Beispiele der Time-Lib zu finden sein. Witzigerweise läßt sich das NTPTime Beispiel aus der Lib nicht direkt compilieren, da es noch eine andere Lib zu benötigen scheint.
1298  International / Deutsch / Re: DCF77 über Digitalpin? on: February 13, 2012, 03:25:56 am
Danke für die Aufklärung. Das wusste ich nicht (mehr), falls es mir jemals untergekommen ist/war.
Und wieder was gelernt....
1299  International / Deutsch / Re: Breakoutboard für 3Wire LCD? on: February 13, 2012, 01:01:29 am
Orphans und Thermals sind an. Die Fläche ist auch als GND gekennzeichnet. Leider hab ich das Problem, das ich ab einem Isolate-Wert größer 12 keine Verbindungen der Masse-Flächen mehr zwischen den Lötpunkten hindurch bekomme und somit einige Flächen nicht mehr mit Masse verbunden sind. Dann müßte ich doch mit Drahtbrücken arbeiten, was ich ja vermeiden wollte.
Einen Vorwiderstand für die Displaybeleuchtung kann ich noch einsetzen.
Dann noch eine blöde Frage, wo muss der Glättungskondensator denn dran und wie groß sollte der dimensioniert sein?
Hier mal das Layout ohne Silkscreen und mit einem Isolate-Wert von 12:
1300  International / Deutsch / Re: Z_OSC server startet nicht ! on: February 12, 2012, 11:06:36 pm
Mit welcher Version der IDE compilierst Du Dein Programm? Leider gibt es noch viele Bibliotheken die mit der Version 1.0 Probleme machen. Falls das der Fall ist, einfach mal Version 022 verwenden.
1301  International / Deutsch / Re: Breakoutboard für 3Wire LCD? on: February 12, 2012, 05:16:08 am
Ich habe mal meine ersten Schritte mit Eagle gemacht und ein Layout zusammengestümpert. Die Platine ist knapp 48mm x 35mm groß.
Eagle hat beim Export nix mehr zu meckern, aber evtl. kann ja mal jemand einen Blick drauf werfen.
1302  International / Deutsch / Re: DCF77 über Digitalpin? on: February 11, 2012, 03:03:38 pm
Jedes Element im struct DCF77Buffer ist 64 bit groß, damit ist eine Instanz des struct fast 1KB groß. Ist das nicht ein wenig übertrieben für die 59 Bit die das Signal eigentlich hat?
1303  International / Deutsch / Re: Online-Abfrage von Bahn-Verbindung on: February 11, 2012, 02:34:47 pm
@df6ih: Wozu brauchst Du "Tastatureingaben"? Es ist doch wurscht woher die Daten der Parameter kommen. Da die Werte bekannt sind, werden die beim HTTP-Request in Richtung Webserver der Bahn übertragen. Egal ob per GET oder per POST, die Daten stecken immer in einem Request. Bei GET in der URL, genauer eigentlich URI und beim POST im Body des Request. Die Daten werden doch nicht einzeln übertragen, jedesmal, wenn Du im Formular etwas einträgst oder anklickst. Das geht zwar auch (per AJAX), wird aber im Bahnformular nicht verwendet und war auch nie Gegenstand der Diskussion.
Es gibt auch prinzipiell keinen Unterschied zwischen Deinem Browser und er Arduino-Software. Am Ende schickt ein Programm über eine TCP Verbindung auf Port 80 an die IP 81.200.198.90 einen größeren String, der dann von der Gegenstelle interpretiert wird. Die daraus resultierende Antwort schickt dann der Bahnserver wieder über die gleiche Verbindung zurück.
Spannend bleibt die Frage nach den POST Parametern allemal. Leider ist mein Arduino-Ethernet ziemlich tief in meiner Wetterstation vergraben, daher kann ich das zur Zeit nicht testen. Ich behalte das aber mal im Hinterkopf, denn so offene Fragen zu Sachen die eingentlich funktionieren müßten, mag ich auch nicht.
1304  International / Deutsch / Re: Online-Abfrage von Bahn-Verbindung on: February 11, 2012, 03:13:50 am
Also, wie GET und POST funktioniert, weiß ich schon seit einiger Zeit. Vielen Dank für die Belehrung.
Quote
Die geposteten Variablen werden innerhalb der Übertragung des Servers tranportiert, da kann man erst mal nicht eingreifen. Was du im Link zeigst sind GET Variablen, die kann man sehr wohl beeinflussen, dummerweise handelt es sich im vorliegenden Fall aber um beides.
Was meinst Du hier mit "eingreifen"? Wie bereits zweimal im Thread erwähnt, werden die POST Daten mit dem HTTP-Request vom Arduino mitgeschickt. Die entsprechende Zeile hatte ich im übrigen nocheinmal explizit gepostet. Meine Lösung verwendet tatsächlich nur GET Parameter, was ja offensichtlich auch zu funktionieren scheint. Dabei ging es mir vor allem darum, das diese Lösung Speicher- und Programmtechnisch deutlich einfacher und effektiver ist. Das sollte aber nicht bedeuten, das POST nicht funktionieren kann, was Du offensichtlich zu glauben scheinst.
Quote
Hinzu kommen alle möglichen Sicherheitsabfragen der Server neuerer Bauart ( sprich Betriebssysteme und deren Kompilate) die nach Spam Methoden suchen, eben genau die, die es im erfolgreichen Nutzungsfalle brauchen würde.
Auch hier verstehe ich leider wieder nicht ganz, was Du damit sagen willst. Was hat bitte der Server (gemeint ist die Maschine, das Blech, nicht das Webserver-Programm) und das Betriebssystem mit dem Web-Request zu tun. Von welchen Sicherheitsabfragen redest Du konkret?
Arduio und der Webserver (gemeint ist das Programm und nicht der Computer) der Bahn reden ja schon miteinander. Diese Strecke der Kommunikation können wir also bei der Analyse erstmal vernachlässigen. Nun würde es ehr darum gehen, zu schauen ob die vom Arduino erzeugten HTTP-Requests RFC-konform sind und daher vom Webserver (Programm nicht Computer) korrekt verarbeitet werden können. Hier ist der Vorschlag von Udo das ganze zum Testen über einen Proxy laufen zu lassen schon mal nicht schlecht.
Da hier ein gewisser Aufwand entsteht, sollten wir dauf das Fedback von "nachtaktiv68" warten, ob die reine GET-Methode klappt, oder ob wir weiter mit der POST Methode testen sollen.
1305  International / Deutsch / Re: Welche Programmiersprache ist dem Arduino am ähnlichsten ? on: February 10, 2012, 03:17:17 pm
Quote
Diese Aussage ist falsch. Der Arduino wird in C++ programmiert und nicht in C.
Auch wenn die beiden Sprachen sich oberflaechlich aehnlich sind, so sind es doch zwei voellig unterschiedliche Sprachen.
Also C und C++ sind keine unterschiedlichen Sprachen. C++ ist eine Erweiterung von C um objektorientierte Programmierung, wobei C als vollständige Teilmenge in C++ enthalten ist.
Somit wird der Arduino sehr wohl in C programmiert. Sämtliche Funktionen die Du verwendest und die nicht an einer Klasse respektive Objekt hängen sind C.
Der größte Teil der in der IDE verwendeten Funktionen sind sogar C-Funktionen.
Pages: 1 ... 85 86 [87] 88 89 ... 95