Show Posts
Pages: 1 [2] 3 4 ... 183
16  International / Deutsch / Re: Fragen an die Profis (Tastatur Input Verabeitung und SD Log) on: April 17, 2014, 03:51:01 am
Wenn du bei "Enter" von der unbekannten Funktion genieGetEventData(&event); eine 13 zurückkriegst, ist die "Del/Back" Taste vermutlich nicht die 0. Aber das kriegst du ja über deine drei Serial.println(keyboard2) - Ausgaben raus.
Im Fall "Del/Back" solltest du nicht nur die '\0' auf index-1 schreiben, sondern auch den Index selbst verringern.

Ausserdem solltest du vor
       Serial.print(TXTdisp);
die Endekennung gesetzt haben:
Code:
       TXTdisp[TXTdisp_index++] = keyboard2;
       TXTdisp[TXTdisp_index] = '\0';
Dass du mit jedem Zeichen auf Serial und dem Display den kompletten Text (zur Zeit noch mit undefiniertem Schrott am Ende) ausgibst, weisst du ?
Das ist bei längeren Texten nicht so schön, aber einfach.

Quote
- Zahleneingaben checkt er gar nicht
Stimmt, Zahleneingaben checkst du gar nicht. Das sind Buchstaben wie alle anderen auch in deinem Kommentar-Text.
Was anderes sehe ich nicht.

Quote
Mir sind 2 Sachen allgmein nicht so ganz klar: In welcher  Form (Hex, ASCII usw) verabreitet man das am besten weiter. Wie handelt man Sondertasten am besten ab. Ich springe von DEC, HEX, ASCII,  hin und her...  Alles etwas konfus.

Ich rate mal aus deinen Zeilen ohne Variablen-Definition und Funktionsdeklaration, dass
Code:
genieGetEventData(&event);  Daten werden an Keyboard 2 übergeben
ein Zeichen zurückliefert, was in eine char Variable passt.
Das kannst du nach Geschmack mit println ausgeben, die Variable enthält immer den gleichen Wert.
Eine '7' ist eine '7' ist eine 0x37 ist eine 55 , eine Enter-Taste liefert (vermutlich) eine '\r' und eine 0x0d und eine 13, was alles dasselbe ist. Wie du das in deinem Code behandelst, ist egal, hauptsache es ist leicht nachzuvollziehen, was der Code soll.
Manche definieren Konstanten mit Namen ( oder #define ) um den Code selbsterklärend zu machen
Code:
#define ESC   0x1B
#define ENTER  0x0D
...
switch ( key ) {
  case ESC:
      handleEscapeKey();
      break;
  case '0':
  case '1':
  case '2': 
  case '3':
  case '4':
  case '5': 
  case '6':
  case '7': 
  case '8':
  case '9':
    handleNumericKey(key-'0');  // bearbeitet eine Zifferntaste, die als 0 .. 9  ( "binär" ) übergeben wird   
    break;
  case ENTER:
    processNumeric(value);  // value enthält eine Zahl aus den bisher eingegeben Ziffern
    value = 0;   // vorbereiten für eine neue Zahlen-Eingabe
    break;
}
Code:
unsigned long value;
//////////////// handleNumericKey( byte c)  ////////////    Dummy - Beispielfunktion
// c muss 0 .. 9 sein, das Gesamt-Ergebnis als Dezimalzahl wird in value gespeichert.
// Überlauf wird nicht geprüft, Neueingabe einer neuen Zahl wird nicht hier gesteuert
void handleNumericKey(byte c)

    value = value*10+c;
}
17  International / Deutsch / Re: Arduino Helligkeit und Dunkelheit erkennen lassen on: April 16, 2014, 04:03:51 pm
Falls Serenilfy dich auch verwirrt hat:
Mit "Status" meint er, ob der Motor schon gelaufen ist seit Beginn der Helligkeit.
Status wird also verändert : a) Wenn der Motor gelaufen ist, und b) Wenn es wieder dunkel ist

Wie lang soll der Motor denn laufen, ist die erste Frage.
Da gibt es grundsätzlich verschiedene Möglichkeiten.
Entweder: Motor einschalten, Warten ( delay ) , Motor ausschalten
Oder: Motor einschalten und Einschalt-Zeit merken. Wenn (aktuelleZeit -EinschaltZeit) > WunschDauer Ausschalten

Die Auswahl hängt davon ab, wie die komplizierteren Fragen gelöst werden wollen:
Was soll passieren, wenn es schon wieder dunkel wird, aber der Motor noch läuft ?
( Im delay Fall hast du gar keine Wahl, weil da der Sensor gar nicht erfasst wird während der Motor läuft. )

Vielleicht fallen dir noch mehr Sonderfälle ein, viel Spass.
18  International / Deutsch / Re: Hilfe bei IR-Codes senden… on: April 16, 2014, 03:22:32 pm
Quote
0x8048260C ist doch eine 32 Bit Zahl?
Ja, klar.
Wenn es aber eine 36 Bit Zahl sein soll, ist 0x8048260C vermutlich falsch.
Das würde auch erklären, dass
   irsend.sendRC6(0x8048260C, 36);
ein anderes Ergebnis liefert...

Oder andersrum:
irsend.sendRC6(0x8048260C, 36);
liefert
48A60C0
Decoded RC6: 48A60C0 (36 bits)
Dabei hat man beide Seiten voll unter Kontrolle, und somit die Chance rauszukriegen warum was anderes als erwartet rauskommt.
Dann kriegt man evtl auch raus, was man der sendRC6 Methode übergeben muss, damit das gleiche empfangen wird wie bei der Original-FB
19  International / Deutsch / Re: Webserver HTLM CODE on: April 16, 2014, 10:46:11 am
Ich seh keinen Unterschied in Bezug auf println / write.
Im ersten Teil hast du eine Zeile mehr:
 
Code:
  client.println("<div style=\"font-size:100%;   color:#0000FF; font-family:Verdana\">");

Wenn alles sonst gleich ist, sollte das erste beim Laufen ca. 60 byte mehr RAM brauchen.
( Und beim Compilieren  ~ 80 byte mehr Flash - Speicher )

20  International / Deutsch / Re: Wie ein LCD ansteuern ; LMC 1602 I2C ; Tutorial ; Sketch on: April 16, 2014, 10:28:43 am
Du definierst da ein Objekt namens lcd vom Typ LiquidCrystal_I2C.
Dieser Typ ist in der Library ( #include <LiquidCrystal_I2C.h> ) definiert.
Zum Erzeugen eines solchen Objekts gibst du ihm an, wie es per I2C adressiert wird ( 0x27 ) und wie die Verbindungen zwischen dem I2C-Device und dem eigentlichen Display sind.

Ob es andere Möglichkeiten gibt ( für fertige I2C-Display - Kombinationen ), müsstest du in LiquidCrystal_I2C.h nachlesen ...

Das lcd - Objekt kann bestimmte Sachen machen, die als Funktionen z.B.  so aufgerufen werden:  lcd.clear( ) ;
( welche Funktionen (auch Methoden genannt) das sind, und was für Parameter die brauchen, siehst du auch in   LiquidCrystal_I2C.h , nach der Zeile public:  )

21  International / Deutsch / Re: Arduino Helligkeit und Dunkelheit erkennen lassen on: April 16, 2014, 10:12:02 am
Wenn die Aufgabe heisst : "Wenn es dunkel ist, ... " nimm nen LDR und Widerstand als Spannungsteiler
Wenn die Aufgabe heisst:  "Nachts ... " nimm eine Uhr ( RTC , z.B. DS1307 ), die du aber auch stellen können musst.

Zum einfachen Testen ist LDR besser, da muss man nicht Stundenlang warten, sondern kann den Sensor abdecken,
im "echten Leben" wäre eine Uhr besser, die ist nicht so leicht durch einen abgedeckten Sensor zu stören.   

Quote
LDRs sind zwar sehr langsam, aber bei dieser Anwendung reicht das vollkommen.
LDR sind viel zu schnell: je nach dem wie geduldig du beim Testen bist, sollte es einige Minuten hell bzw. dunkel sein, damit du daraus Tag/Nacht ableitest.
22  International / Deutsch / Re: Wie ein LCD ansteuern ; LMC 1602 I2C ; Tutorial ; Sketch on: April 16, 2014, 10:01:33 am
Quote
int previous_millis
Es sind nicht 40 sekunden sondern 32,7 !
23  International / Deutsch / Re: Arduino IDE - wie kann ich Zeilen anzeigen lassen? on: April 16, 2014, 07:35:18 am
Quote
er meint eine ZeilenNummerierung im Editor. Am Anfang die Zeilennummer, dann Leerstelle, dann Komandozeile.

100 if (Farbe == bunt)
110 {
120 tft.setTextColor(ILI9341_BLACK, ILI9341_YELLOW);
130 }
140 else
Das kann kein Ernst sein.
Das macht nur Sinn mit einem Befehl wie
goto  110
24  International / Deutsch / Re: Ausgänge über .txt File von SD Card steuern on: April 16, 2014, 03:41:56 am
Quote
Anbei ist mein bisher sehr einfach gehaltener und leider Kommentarloser Code den ich nutze.

Versuch mal  jede geschweifte Klammer in einer eigenen Zeile und in der IDE das Auto-Format ( STRG-T )
Das hilft fast so viel wie Kommentare smiley-wink

Eventuell verstehst du dann, warum du den Text
  "Initializing SD card..."
vermutlich nicht siehst. ( Oder beim Übertragen hierher ist was verloren gegangen ? )

Code:
     Serial.write(Text.read());
Dazwischen fehlt was ( nämlich Pylons Vorschlag ), wenn du mehr willst als nur den gelesenen Text anzeigen.

25  International / Deutsch / Re: Transistor Basis Vorwiederstand berechnen on: April 15, 2014, 11:04:10 am
Quote
Als Basisstrom 1.3 mA, da sich die Stromverstärkungen ja multiplizieren in Darlingtonschaltung  (133mA/(10*10))
Hab ich mir schon so gedacht smiley-wink
hFE ist aber eher interessant im Verstärker-Betrieb, und stellt nur die aller-unterste Grenze für Schalterbetrieb dar.
( Deswegen nimmst du auch nur 10 statt der eigentlichen worst case 30 bis typisch 100 ).
Geschaltet wird aber möglichst zwischen Sättigungsbereich, wo durch Erhöhen von IB keine Verstärkung des IC mehr stattfinden kann, weil der Transistor schon ( so gut wie ) offen ist, und komplett gesperrt bei IB=0.
Der IB bei dem sich wohl der gewünschte IC einstellt und wo der Verstärkungsfaktor eine Rolle spielt, ist also eher egal und gilt auch eher bei kleineren Strömen.

Quote
Transitoren will ich übrigens desswegen mal nutzen, um da mal Erfahrungen mit zu machen
Viel Spass.
Eine LED die 150 mA aushält, sollte auch bei 100 mA schon recht hell sein, und eigentlich schon einen Kühlkörper brauchen.
26  International / Deutsch / Re: Transistor Basis Vorwiederstand berechnen on: April 15, 2014, 07:12:36 am
Ob es gut ist, einen Transistor als Vorwiderstand zu verwenden, will ich nicht verteidigen.

Ich sehe die Frage so:
Was kann man mit vorhandenen 2N3904 überhaupt anfangen, wenn man damit noch nicht mal 100 mA schalten kann ?
Stimmt, im Fairchild - Datenblatt ist auf jeden Fall bei Ic = 100 mA Schluss.
Wie hoch Vce bei IB = 10 mA , Ic = 100 mA ist, würde ich nachmessen:
  - Selbst wenn es 0.3V sind, sollte das
       1. noch gehen,
       2. nicht wesentlich besser werden wenn du IB größer machst.
            ( Eine Darlington - Schaltung sollte nichts bringen, stimmt )
Ausserdem kann VBE durchaus max 0.9 V werden, der Basis-Widerstand sollte also nicht mehr als 470 Ohm sein.
 
Quote
(abgerundet von den aus der Rechnung kommenden 2,8kOhm -> 4.3V/0.0013A) die LED hat aber blos halb hell geglüht und sie hat auch nur dann voll geglüht, sobald ich mit dem Finger den wiederstand berührt habe
Verstehe ich nicht:
   - warum nur 1.3 mA, wo siehst du 4.3 V ?
   - Selbst ein feuchter Finger sollte weit mehr als 2,2k haben, dürfte also keinen großen Einfluss haben.
      Ist aber ein Zeichen, dass du eher im Verstärkungsbereich als im Schaltbereich warst.

Aber wie gesagt: die Grenze sind erstmal die Ic = 100 mA und dagegen hilft eine Darlington-Schaltung nicht, selbst ein hFE von 30 reicht dir dicke.
Kannst natürlich ausprobieren und nachmessen, was jenseits der Datenblatt - Kurven zwichen Ic = 100 mA und dem abs. Max von 200 mA passiert. VCEsatsteigt mit höherem Ic an, und bei 50°C ist die max. Verlustleistung 0.5W beim TO92 Gehäuse...

Für alle Fälle: 2N Transistoren haben eine andere Pinbelegung als BC, nicht dass du da was verwechselt hast.
 
27  International / Deutsch / Re: Frequenz messen on: April 15, 2014, 06:21:32 am
Quote
Bew_sserungscode
Ein ä ist ein problematischer Buchstabe in einem Variablennamen, vor allem, wenn er in der Fehlermeldung als _ angezeigt wird  ...
28  International / Deutsch / Re: Transistor Basis Vorwiederstand berechnen on: April 14, 2014, 05:35:33 am
Ich gehe mal davon aus, du hast eh ein paar 2N3904 rumfliegen. Wofür sollen die denn überhaupt gut sein, wenn nicht für 100 mA LED ? 

Einfach den Basiswiderstand so bemessen, dass es für den Arduino passt ( 20 mA an 5V-0.7V = 220 Ohm )
Selbst wenn der 2N3904 nicht komplett durchschalten sollte, übernimmt er eben einen Teil der Aufgabe des LED-Vorwiderstands smiley-wink  Die Vce des Transistors habt ihr übrigens vergessen, oder ( Aber 15 Ohm passt schon trotzdem )
29  International / Deutsch / Re: Was mache ich fasch?? on: April 14, 2014, 05:22:35 am
Quote
uje-uje... Arduino ist jetzt in meinem ansehen schwer gesunken!
Selbst mit digitalWrite könntest du eine Led - PWM - Ausgabe schreiben, die nicht flackert, und gleichzeitig mit digitalRead Taster-Betätigungen auswerten smiley-wink
So ein Controller hat üblicherweise so gut wie nichts zu tun, und sollte nur schnell genug reagieren.
Die 16 MHz des Arduino sind überreichlich für die meisten Anwendungen.

Für andere Anforderungen kannst du avr-gcc direkt verwenden, das hast du ja selbst gemerkt.
Und bei ganz anderen Anforderungen sitzt du mit einem atmega328p eh auf dem falschen Pferd.

Viel schlimmer an der IDE finde ich das Pseudo-Syntax-Highlighting nach keywords.txt 
Warum wird eine lokale Variable in einer anderen Farbe dargestellt, je nachdem ob ich sie state, status oder Status nenne ?

30  International / Deutsch / Re: Maximalen Differenzwert zeitabhängig ausgeben on: April 14, 2014, 04:52:01 am
Meinst du sowas?
Code:
void loop()
{
 unsigned int maxX=0;
 unsigned int minX=1023;
 for (int  i = 0; i < 50; i++)
 {
    unsigned int aktX = analogRead(pinX);
    if (aktX > maxX) maxX = aktX;
    if (aktX < minX) minX = aktX;
    delay(200);   // 50 * 200 ms = 10 sec
 }
 Serial.print(minX); Serial.print(" ... "); Serial.print(maxX); Serial.println (" X ");
}

Hier dauert ein loop Durchlauf 10 Sekunden, und ermittelt alle 10 Sekunden das jeweilige Max- und Minimum.
Erweitern für y und z genauso ...

Differenz zwischen Max und Min sollte auch nicht das Problem sein, das hab ich evtl. nicht verstanden.

Geht natürlich auch ohne delay, aber das soll jetzt und hier mal egal sein.
Pages: 1 [2] 3 4 ... 183