Show Posts
|
|
Pages: 1 2 [3] 4 5 ... 64
|
|
31
|
International / Deutsch / Re: Standby und Ethernetprobleme
|
on: June 15, 2013, 04:51:14 am
|
Hast du eine Idee wie man die Sache mit dem neu starten umgehen kann?
Falls es Dir nicht aufgefallen ist: Mein loop-Code IST OHNE NEUSTART! Ein Input-Pin muss immer als INPUT oder INPUT_PULLUP deklariert sein. Bei Deinem Code benötigt der Klingeltaster in der Schaltung einen externen PullDown-Widerstand. Wenn Du den Klingeltaster direkt und ohne PullDown-Widerstand anschließen möchtest, kannst Du wahlweise auch den internen PullUp-Widerstand aktivieren und auf LOW (betätigter Taster) statt HIGH testen. Code dazu: void setup() { Ethernet.begin(mac); client.connect(server, 80); pinMode(1, INPUT_PULLUP); // Klingeltaster angeschlossen an GND und Pin-1 }
void loop() { if(digitalRead(1) == LOW) { client.connect(server, 80); client.print("GET "); client.println(getURL); client.println(); delay(1000); client.stop(); } } Aber es funktioniert, hatte ihn vorher auch als INPUT deklariert, da hat es nicht funktioniert? Verbunden ist dieser kabeltechnisch übrigens einfach mit dem 5V Wenn Du auf einen OUTPUT deklarierten Pin im LOW-Zustand eine Spannung von 5V draufschaltest, dann ist das der klassische KURZSCHLUSS! Da ist es nur eine Frage der Zeit, bis dieses Beinchen des Arduino-Controllers DURCHGEBRANNT sein wird, wenn Du es mit Kurzschluss betreibst. Weil Du genialerweise Pin-1 nimmst, was gleichzeitig auch der TX-Sendepin für die serielle Schnittstelle ist, würde ein Durchbrennen dieses Pins dazu führen, dass Du nicht nur ein durchgebranntes Beinchen am Controller verlierst (also einen digitalen I/O), sondern dass Du über den Bootloader überhaupt keine neuen Sketche mehr auf den Controller hochladen kannst. Du darfst NIE auf einen OUTPUT geschalteten Pin einen gegensätzlichen Spannungspegel anlegen: OUTPUT LOW verbunden mit +5V ==> KURZSCHLUSS OUTPUT HIGH verbunden mit GND ==> KURZSCHLUSS Nur hochohmig eingestellte Pins (INPUT oder INPUT_PULLUP) darfst Du mit verschiedenen Spannungspegeln verbinden. Wenn Du ein Signal messen möchtest, kommt nur INPUT oder INPUT_PULLUP für den Pin in Frage. Einen Ausgang (OUTPUT) verwendest Du, um irgendwas mit einem abgehenden Signal anzusteuern, z.B. wenn eine LED leuchten oder ein Relais schalten soll. Oder wenn Du wie bei Dir einen Kurzschluss fabrizieren und den Arduino killen möchtest.
|
|
|
|
|
32
|
International / Deutsch / Re: Standby und Ethernetprobleme
|
on: June 15, 2013, 03:58:31 am
|
1. Nachdem die Klingel einmal gedrückt wurde, passiert nichts mehr wenn sie danach ein zweites Mal drücken lässt.
Mit was für einem Server verbindest Du Dich mit der Zeile: client.connect(server, 80); Sieht aus wie ein HTTP-Server? Kein HTTP-Server hält eine Verbindungen "ewig". Üblicherweise wird eine aufgebaute Verbindung für genau eine Anfrage offen gehalten und dann geschlossen. Dein Code ist daher vollkommen ungeeignet. Du kannst die Verbindung nicht nur im Setup aufbauen und dann auf ewig damit arbeiten wollen. Richtig ist: Verbindung bei Bedarf aufbauen, Anfrage senden, bearbeiten und Verbindung auch auf der Clientseite schließen. Das mit dem Neustarten des Arduino in der loop-Funktion ist natürlich nur eines: a-ben-teu-er-lich! void loop() { if(digitalRead(1) == HIGH) { client.connect(server, 80); client.print("GET "); client.println(getURL); client.println(); delay(1000); client.stop(); } }
|
|
|
|
|
33
|
International / Deutsch / Re: Temperaturanzeige mit + Zeichen
|
on: June 14, 2013, 05:06:33 pm
|
Das ist es! Danke.
Wäre nicht darauf gekommen das es daran liegt.
Kleiner Exkurs zum Schreiben von übersichtlichem Code. Wenn Du praktisch immer dieselben Codeabschnitte wieder und wieder ausführen mußt mit nur ganz geringen Änderungen, dann bietet es sich an, dafür geeignete Funktionen zu schreiben. Getestete Funktionen, die dann immer wieder aufgerufen werden können, ohne dass was vergessen wird, wenn Codeabschnitte mehrfach kopiert und eingefügt werden. Wie wäre es z.B. mit so einer aufgeräumten loop-Funktion: void loop(void) { sensors.requestTemperatures(); printOnLCD(lcd, "Tiefkuehltruhe 1",sensors.getTempCByIndex(0)); printOnLCD(lcd2," Kuehlschrank 1",sensors.getTempCByIndex(1)); printOnLCD(lcd3,"Innentemperatur",sensors.getTempCByIndex(2)); printOnLCD(lcd4,"Aussentemperatur",sensors.getTempCByIndex(3)); }
Statt dass da haufenweise unübersichtlich (und womöglich fehlerhaft) zusammenkopierter Code drinsteht, steht da viel weniger, aber dafür aufgeräumter Code drin, nämlich hauptsächlich vier fast gleiche Funktionsaufrufe: - gib auf "lcd" den Text "Tiefkuehltruhe 1" mit Temperaturindex 0 aus - gib auf "lcd2" den Text " Kuehlschrank 1" mit Temperaturindex 1 aus - gib auf "lcd3" den Text "Innentemperatur" mit Temperaturindex 2 aus - gib auf "lcd4" den Text "Aussentemperatur" mit Temperaturindex 3 aus Dann sieht die loop doch schon mal aufgeräumter aus als bei Dir, oder? Und nun brauchst Du natürlich die Funktion "printOnLCD()", die einige Parameter übergeben bekommt, nämlich - auf welchem lcd ausgegeben werden soll - welcher Text ausgegeben werden soll - welche Temperatur ausgegeben werden soll void printOnLCD(LiquidCrystal_I2C einlcd, char* text, float temp) // Funktion gibt auf einem LCD einen Text und eine Temperatur aus { char stringbuffer[10]; einlcd.setCursor(0, 0); einlcd.print( text ); einlcd.setCursor(10, 1); einlcd.print((char)223); einlcd.print("C "); dtostrf( temp, 8, 2, stringbuffer ); int i=0; while (!isdigit(stringbuffer[i])) i++; if (i>0 && stringbuffer[i-1]!='-') stringbuffer[i-1]='+'; einlcd.setCursor(1, 1); einlcd.print(stringbuffer); }
Stichwort: "Wiederverwertbarkeit von Code" Du schreibst also nur einmal Code, wie Text und Temperatur auf einem LCD ausgegeben werden soll. Dieser Code wird gründlich getestet. Aber Du kannst diesen kompletten Code dieser einen Funktion dann mit einem Einzeiler und einigen übergebenen Parametern beliebig oft ausführen lassen, ohne dass beim Kopieren von Codeabschnitten Fehler passieren können. Ist nur ein Vorschlag, mehr Struktur und Übersicht zu bekommen.
|
|
|
|
|
34
|
International / Deutsch / Re: RTC mit Sommerzeit
|
on: June 14, 2013, 02:46:48 pm
|
Das mit der Sommerzeit ist recht aufwändig zu berechnen, aber es gibt eine Lib "DS1307new.h", die das unterstützt.
Ich mache die Feststellung der Sommerzeit mit gerade mal sechs Zeilen Code im Codeblock, davon eine längere if-Abfrage. boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours) // European Daylight Savings Time calculation by "jurs" for German Arduino Forum // input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ) // return value: returns true during Daylight Saving Time, false otherwise { if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7))) return true; else return false; }
Zu übergeben an die Funktion ist eine "Zonenzeit", also die Zeit auf der man die Echtzeituhr am besten dauernd laufen läßt: - Jahr - Monat - Tag - Stunde - Zeitzone (UTC=0, MEZ=1) und Rückgabewert ist true oder false, je nachdem ob man für Sommerzeit eine Stunde draufschlagen muss oder nicht. Im Fall der Time-Library, die mit Unix-Time "Sekunden seit 01.01.1970" arbeitet, würde man also bei Sommerzeit 3600 Sekunden auf die Zonenzeit UTC+1 draufschlagen.
|
|
|
|
|
35
|
International / Deutsch / Re: Begrüßung und Frage zur Arduino Software
|
on: June 14, 2013, 10:48:36 am
|
processing.app.SerialException: Serial port 'COM3' already in use. Try quiting any programs that may be using it.
Der Uploader meldet, dass die COM3-Schnittstelle bereits benutzt wird und daher nicht verwendet werden kann. Bist Du sicher, dass Dein Arduino an COM3 hängt? Ggf. mal im Gerätemanager nachschauen: Wenn der Arduino am USB angeschlossen wird, erscheint ein neuer COM-Port im Windows-Gerätemanager. Wenn der Arduino vom USB entfernt wird, verschwindet ein COM-Port im Gerätemanager. Das ist dann der COM-Port, an dem der Arduino dranhängt. Ist das wirklich COM3? Wenn nicht, dann den richtigen COM-Port unter "Tools - Serieller Port" einstellen!
|
|
|
|
|
37
|
International / Deutsch / Re: Temperaturanzeige mit + Zeichen
|
on: June 14, 2013, 09:28:59 am
|
Merkwürdig ist, dass noch nicht mal jurs schreibt, was 'stringbuffer' ist.
Es reicht doch, wenn es in der Referenz zur Funktion steht: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42Außer, dass 'stringbuffer' in der Referenz 's' heißt, ist alles gleich: value passed in val into an ASCII representationthat will be stored under s. The caller is responsible for providing sufficient storage in s.'stringbuffer' muss also immer lang genug sein, um den String mit voller Länge plus das abschließende Nullzeichen aufzunehmen. D.h. bei: dtostrf( temperatur, 9, 2, stringbuffer ); muss 'stringbuffer' deklariert sein als char Array mit 10 Zeichen: char stringbuffer[10]; 9 Zeichen Stringlänge plus abschließendes Nullzeichen = 10 Zeichen Gesamtlänge. Ich muß ja nicht in jedem Posting einen Roman schreiben. 
|
|
|
|
|
39
|
International / Deutsch / Re: Hilfe ich brauche Hilfe kleines Projekt aber bin anscheinend doch zu schwach -.-
|
on: June 14, 2013, 08:24:25 am
|
wenn jetzt zb. die Lampe A leuchtet kann nur der Taster a einen Treffer auslösen, das heißt wird ein anderer Taster gedrückt wird er weder gezählt noch schaltet es auf eine andere Lampe um
Wenn das ein Reaktionsspiel zum Training von Auge-Hand-Koordination eines einzigen Spielers werden soll, dann läßt sich Dein Spiel von jedem Bewegungsspastiker leicht betrügen: Er braucht nur beim Aufleuchten einer beliebigen Lampe alle vier Taster auf einmal zu drücken. Die falschen Taster werden nicht beachtet, der richtige gedrückte Taster löscht die Lampe. Bingo, ein Treffer! Wenn nur der richtige Taster die Lampe löschen soll, dann muß die "Treffer" Bedingung anders formuliert sein: Wenn aus der Bedingung "kein Taster ist betätigt" heraus "nur der richtige Taster" gedrückt wird, wird ein Treffer gezählt. Aber diese Feinheit ist glaube ich momentan nicht Dein Hauptproblem. Woran hapert es? Brauchst Du ein geeignetes Programm-Grundgerüst, das Du ausbauen kannst?
|
|
|
|
|
40
|
International / Deutsch / Re: Arduino Mega als Schaltcomputer missbrauchen
|
on: June 14, 2013, 06:17:14 am
|
DS1307 muss man selber einstellen und läuft die Uhr, du schreibst es gibt sie in unterschiedlicher Genauigkeit und Preislage, woher weiß ich denn das wenn ich mir so ein Teil bestelle dies auch genau geht, oder hast du eventuell eine Tipp für einen genau gehenden Baustein?
Ich schrieb, dass die DS1307 die billigste und ungenaueste Uhr mit Gangabweichungen von mehreren Minuten pro Monat ist und dass es genauere Uhrenbausteine gibt. Suche mal bei eBay Artikelnummer 251208194968 Da wird ein Uhrenmodul mit DS3231 angeboten. Fertig aufgelötet auf eine kleine Anschlußplatine mit Pufferbatterie komplett anschlußfertig für Arduino. Datenblatt: http://datasheets.maximintegrated.com/en/ds/DS3231.pdfAngegebene Genauigkeit: Accuracy ±2ppm from 0°C to +40°CFalls Du also den Betriebstemperaturbereich von 0 bis 40 Grad sicherstellen kannst, sollte dieses temperaturkompensierte Uhrenmodul pro Jahr (wenn ich richtig gerechnet habe) nur maximal 64 Sekunden in einem Jahr falsch gehen. Wenn Du keine automatische Sommerzeit-/Winterzeitumstellung programmierst, sondern die Uhr zweimal im Jahr bei der Zeitumstellung umstellst, geht sie niemals mehr als eine halbe Minute falsch. Und wenn Du Dich nicht durch die einzelnen Register und Bits der Uhr mit dem Datenblatt durchkämpfen willst, dann benötigst Du nur noch eine passende Arduino-Library dafür. Einmal gegoogelt, gibt es: https://github.com/rodan/ds3231Also steht einer Einbindung dieses Präzisions-Uhrenmoduls auf dem Arduino auch mit geringen Programmierkenntnissen nichts gravierendes im Wege. Aber Du kannst natürlich auch Dein Conrad DCF77-Modul an einem Arduino laufen lassen. Bei gutem Empfangssignal hast Du dann immer die genaue Zeit ohne nachzustellen, sogar mit Sommer-/Winterzeitumstellung. Nur eben nach einem Stromausfall hast Du dann erstmal einige Minuten keine Zeit, wenn der Strom wiederkommt, bis das Zeitsignal sich wieder mit dem DCF77 Zeitsignal synchronisiert hat.
|
|
|
|
|
41
|
International / Deutsch / Re: GPS UTC zerlegen
|
on: June 14, 2013, 05:20:25 am
|
Allerdings fehlt mir bei dieser die crackdatetime-Funktion welche mir aus dem UTC-Code zB. 235219.281 die Uhrzeit zurecht stutzt.
Dann bastelst Du Dir die Funktion selbst. void crackUTC(float floatUTC, int &hour, int &min, int &sec, int &msec) { long number; number=floatUTC; // ganzzahliger Wert msec=(floatUTC-number)*1000; // Millisekunden sec=number%100; number=number/100; min=number%100; hour=number/100; }
void setup() { // put your setup code here, to run once: Serial.begin(9600); int h,m,s,ms; crackUTC(235219.281,h,m,s,ms); Serial.print("Stunde : ");Serial.println(h); Serial.print("Minute : ");Serial.println(m); Serial.print("Sekunde: ");Serial.println(s); Serial.print("Millis : ");Serial.println(ms); }
void loop() { // put your main code here, to run repeatedly: }
Da Gleitkommazahlen keine 9 signifikanten Stellen haben ist die Millisekundengenauigkeit solcher Umwandlungen, die auf Gleitkommazahlen basieren, allerdings nicht mehr auf die Millisekunde genau sichergestellt.
|
|
|
|
|
42
|
International / Deutsch / Re: Arduino Sprachausgabe
|
on: June 14, 2013, 04:32:41 am
|
Weiß jemand, ob es etwas vergleichbares deutschsprachig gibt.
Das Ding hat zwei Betriebsarten: - TEXT vorlesen, entsprechend den Regeln für die Sprache - PHONEME vorlesen Die Betriebsart "PHONEME vorlesen" ist Standard bei Sprach-Synthesizern und für die Sprache Deutsch ist es besonders einfach, einen Text in die zu sprechenden Phoneme zu zerlegen, weil Deutsch eine der wenigen Sprachen auf der Welt ist, die im wesentlichen genau so gesprochen wird, wie sie geschrieben wird. Siehe Anleitung: Parser Selection Emic 2 provides a choice of text parsing engines: Epson or DECtalk. Both will process incoming text strings and generate synthesized speech, but there are differences in control and customization of the resulting output. Each parser's specific functionality is incompatible with the other. Choosing which parser to use ultimately depends on what sort of speech output you desire for a particular text string.
Damit die Stimme nicht extrem roboterhaft klingt, müssen übrigens auch in der Text-lesen-Betriebsart (die nur für Englisch und Spanisch verfügbar ist) noch diverse Steuercodes eingefügt werden, um Betonungen und andere Variationen zu setzen. Schau Dir die originalen Codes der Sprachbeispiele im Original an: http://www.parallax.com/Portals/0/Downloads/docs/prod/sens/30016-Emic2TextToSpeech-v1.1.pdfIch sehe da keine großen Probleme, das Ding Deutsch sprechen zu lassen. Du mußt Dich allerdings vom Gedanken frei machen, dass Du dem Teil einfach einen Text vorgibst und er liest vor, mit Stimmhebungen und Stimmsenkungen, Betonungen und Verschluckungen, Rhythmus und Pausen. Das mußt Du alles über Steuerbefehle selbst vorgeben. Und davon wird auch in den Demos ausgiebig Gebrauch gemacht, besonders bei den gesungenen Liedern. (P.S.: wieso schaff ich das nicht Videos einzubinden ?)
Du versuchst, Videos von http://www.youtu.be einzubinden und Du kannst nur Videos von http://www.youtube.com/ einbinden.
|
|
|
|
|
43
|
International / Deutsch / Re: Arduino Mega als Schaltcomputer missbrauchen
|
on: June 14, 2013, 03:40:27 am
|
Das einsparen der Tipparbeit wäre natürlich ein großer Vorteil, aber die Ansteuerung über einen Zufallsgenerator ist nicht sinnvoll so denke ich, da ja dann die Rollladen unkontrolliert fahren und ich habe doch schon ein gewisses System in meinen Zeiten auch wenn die unterschiedlich sind. Zum Beispiel fährt das Büro Chef immer als erstes, Werkstatt als zweites usw. Beim Zufall sind ja nicht nur die Zeiten zufällig sondern auch die Auswahl der Rollladen, oder sehe ich das falsch?
Das hängt ja davon ab, was als Zufall programmiert wird. Wenn jetzt zum Beispiel der Zufall das "Büro Chef" als erste Verfahrzeit festlegt, und dann die anderen mit festen (oder ebenfalls zufälligen) Abständen folgen sollen, läßt sich auch das natürlich programmieren.
|
|
|
|
|
44
|
International / Deutsch / Re: Allgemeine Fragen Bluetooth "JY-MCU"
|
on: June 13, 2013, 03:53:58 pm
|
Die Bluesmirth Module sind ja schon teuer...
Wenn Du ein eBay-Modul mit bis zu 10m angegebener Reichweite (also effektiv 2,50 m Reichweite) mit einem bis zu 100m Reichweite (also effektiv 25m Reichweite) angegebenen Modul vergleichst, erscheint das Modul mit der höheren Sendeleistung und 10-fachen Reichweite natürlich immer teuer. Allerdings ist eine hohe Sendeleistung und Reichweite nur rausgeschmissenes Geld, wenn Du tatsächlich nur zwei fast nebeneinander stehende Geräte drahtlos koppeln möchtest. Und wenn Du die hohe Sendeleistung brauchst, wäre das Geld für das billige Modul rausgeschmissenes Geld, weil es für grosse Reichweite überhaupt nicht funktioniert.
|
|
|
|
|
45
|
International / Deutsch / Re: Schaltregler
|
on: June 13, 2013, 03:40:56 pm
|
Ich hatte damals die platte günstig ersteigert, ohne sich zu informieren. Werd ich wohl weiter suchen müssen, wie man es hingekommen kann.
Es ist ja nicht so, dass es da nichts gäbe. Ich habe mal gegoogelt und bin fündig geworden. Suche mal nach eBay Artikelnummer 130572415779 Da steht in der Beschreibung ausdrücklich dabei HINWEIS: Vor dem Kauf bitte sicher, dass Ihre PV-Anlage wird mindestens 40VDC generieren (für 12V-System), um für den Controller zu "aktivieren".und: Ermöglicht Hochspannungs-Panels (24/48V) für Niedervolt-Batterien (12/24/36/48V)Allerdings wird sich mit der Anschaffung so eines Ladereglers dann der günstige Preis für das Panel schon stark relativieren.
|
|
|
|
|