Show Posts
Pages: 1 ... 8 9 [10] 11 12 ... 28
136  International / Deutsch / Re: Bug in Funktion "Serial.println" ???????????? on: April 06, 2013, 08:14:53 am
Gut zu wissen, dass es solch einen Bug gibt.

Quote from: Terry Pratchett
Multiple exclamation marks are a sure sign of a diseased mind

Na dankeschön.
137  International / Deutsch / Gelöst: Bug in Funktion "Serial.println" ???????????? on: April 06, 2013, 07:13:18 am
Hi,

mir ist jetzt gerade Folgendes aufgefallen:

Ich habe in einem Sketch folgenden Zeile verwendet:
Code:
      Serial.println("Eeprom Schreibvorgang!!!");

Damit konnte ich keinen Upload mehr auf den Arduino machen. Ist ewig bei uploaden hängen geblieben.
Wenn man bei Einstellungen die Ausführliche Ausgabe während Upload aktiviert hat, kam im Debug-Fenster immer was von ....huh bootloader....

Schuld daran sind definitiv die 3 Ausrufezeichen.
Sobald ich eines der 3 Ausrufezeichen entfernt habe, konnte man den Sketch wieder runterladen.

Kompilieren ging mit beiden Varianten!
Probierts mal einer aus, ob er den selben "Erfolg" hat????
Ich verwende IDE 1.01 auf Arduino Mega2560
138  International / Deutsch / Re: Problem mit "long int in byteArray wandeln" on: April 06, 2013, 06:26:12 am
Hi,

hab schnell mal einen CrashCurs zu Pointern durchgezogen. Internet sei Dank

Ich hab mir jetzt folgende Funktion gestickt:
Code:
unsigned long Eeprom_Read_LongInt (unsigned int addr)
{
      unsigned long result;
      byte *ptr = (byte *)&result;
      byte i;

      for (i=0;i<4;i++)
          *(ptr++)=EEPROM.read(addr++);
      return result;
}

Gefällt mir ganz gut.
Hab damit aber ein Low-Byte/High-Byte Problem, da die Daten über meine erste Funktion genau andersrum abgespeichert werden.

Ok. Das ist jetzt Definitionssache, wie rum man das jetzt speichert.
Irgendwie schreit ja alles danach, die Zahl so im Eeprom abzulegen, wie es auch im RAM erfolgt. Also das höchste Byte auch in der höchsten Adresse des Eeprom.
Allerdings hab ich eine Funktion, die mir einen HexDump des Eeprom (immer 8 Byte nebeneinander, viele Zeilen untereinander) ausgibt. Da liest es sich natürlich schöner, wenn die LongInt genau andersrum abgespeichert wird.

Was meint ihr dazu?
139  International / Deutsch / Re: Problem mit "long int in byteArray wandeln" on: April 06, 2013, 04:50:01 am
In diesen beiden Zeilen:
byteArray[0] = (int)((longInt >> 24) & 0xFF) ;
byteArray[1] = (int)((longInt >> 16) & 0xFF) ;
müßtest Du natürlich auf (long) typecasten statt auf einen vom Typ her zu kurz gegriffenen (int).
Bist du dir da sicher? Dieser Teil funktioniert ja. Ich sehe im Eeprom die richtigen Werte.
Was nicht klappt ist das Zurückwandeln von dem bytearray ins longinteger Format

Wenn es auf Geschwindigkeit ankommen würde (was in dem Fall natürlich nicht zutrifft, das langsamste ist sowieso das Schreiben ins Eeprom), dann würde ich direkt per Pointer auf die vier einzelnen Bytes zugreifen.
Oh ja die Pointer.....
Hab auch schon in die Richtung gedacht. Der LongInteger Wert steht ja bereits im 4 Byte-Format irgendwo im RAM
Wenn man den dann irgendwie mit longInt.byte(0) etc. lesen bzw. schreiben könnte.
Also irgendwie so:
Quote
                  unsigned long int longInt;
             for (int i = 0; i < 4; i++){
             longInt.Byte(i) = EEPROM.read(i);
         }
Aber dazu kenn ich mich leider mit Pointern auf C zu wenig aus  smiley-sad
(Das in Rot ist nur eine Denkweise)
140  International / Deutsch / Problem mit "long int in byteArray wandeln" on: April 06, 2013, 04:00:16 am
Hi,

ich möchte unsigned long int Werte so in 4 Bytes zerlegen, dass ich diese direkt ins Eeprom schreiben kann.
Im Inet habe ich dazu folgenden Code gefunden:
Code:
         unsigned long int longInt = 1234567890;
         unsigned char byteArray[4];
                     
         // convert from an unsigned long int to a 4-byte array
         byteArray[0] = (int)((longInt >> 24) & 0xFF) ;
         byteArray[1] = (int)((longInt >> 16) & 0xFF) ;
         byteArray[2] = (int)((longInt >> 8) & 0XFF);
         byteArray[3] = (int)((longInt & 0XFF));

          for (int i = 0; i < 4; i++){
          EEPROM.write(i,byteArray[i]);
          }

Das funktioniert auch. Als Ergebnis erhalte ich: "49 96 02 D2" (als hex-Werte)


Wenn ich die Werte wieder auslesen will und in ein long-Integer wandle:
Code:
         unsigned long int longInt;
         unsigned char byteArray[4];
         
         for (int i = 0; i < 4; i++){
             byteArray[i] = EEPROM.read(i);
         }
         // convert from a 4-byte array to an unsigned long int
         longInt = ( (byteArray[0] << 24)
                   + (byteArray[1] << 16)
                   + (byteArray[2] << 8)
                   + (byteArray[3] ) );

        Serial.println(longInt);

Da bekomme ich dann als Resultat den Dezimalwert 722. Dies ist in HEX: "02 D2". Also die beiden letzten Byte.

Was mach ich da falsch?
Oder habt Ihr evtl. noch eine bessere Methode für meine Aufgabenstellung?

Geuß/hk007
141  International / Deutsch / Re: text in Char Array finden on: April 05, 2013, 05:21:09 pm
???
Kann man was?

Ja, hab ich auch nicht so verstanden was ich in dem Link finden soll  smiley-confuse
142  International / Deutsch / Re: text in Char Array finden on: April 05, 2013, 05:58:49 am
Hi,

ich habs jetzt so gemacht wie von michael_x vorgeschlagen:
Code:
R<0000,1024>

Über das "R" erkenne ich die Funktion, und die beiden Werte stecken dann in den Zeichen 2-5, sowie 7-10.
Also Protokoll mit fester Länge.

Danke an alle/hk007
143  International / Deutsch / Re: text in Char Array finden on: April 04, 2013, 03:33:42 pm
Hey,

gute Idee.
Und auslesen kann ich dann mit chararray[0] usw...oder?

Quote
Künstler kämen sogar ganz ohne char arrays aus, und bilden die Zahlen gleich aus den einzeln gelesenen Buchstaben...
OK, da zähl ich mich wirklich nicht dazu  smiley-cool
144  International / Deutsch / Re: text in Char Array finden on: April 04, 2013, 01:28:09 pm
Hi,

ok. Also mal mit meinen eigenen Worten zusammengefasst, was ich da rausgelesen habe: (Verbessert mich, wenn es nicht stimmt)

Es gibt zwei verschiedene Arten von Strings.
A.)
String-Objekte, die es zu vermeiden gilt, und die ich verwendet habe, um mit "string.indexOf" eine Zeichenkette zu erkennen.
B.)
CharArrays, auch C-Strings genannt. Dafür ist der angesprochenen strstr-Befehl gedacht.
Muss ich mir mal genauer ansehen.

Quote
Denk dir doch ein einfacheres Protokoll aus. ( 1 Buchstaben-Befehle können direkt in switch cases verarbeitet werden )
Ja, du hast recht. Damit wär es relativ einfach.
Aber ich habe folgendes vor:
Ich möchte über Ethernet das Eeprom dynamisch auslesen. Also die Anfangs- und auch die Endadresse des auszulesenden Bereiches mit übergeben.
Dafür dachte ich, dass ich einen Befehl und dann, durch Leerzeichen (vllt. auch durch Komma o.ä.) getrennt, zwei Zahlen mitgebe.
Also etwa so: "ReadEeprom 0 1024"
145  International / Deutsch / text in Char Array finden on: April 03, 2013, 04:27:03 pm
Hi,

jetzt bräuchte ich wieder mal die Hilfe von euch C-Experten.

Ich sende über UDP verschiedene "Botschaften" an den Arduino.
Die Botschaften möchte ich nach einer bestimmten Zeichenfolge durchsuchen, und dann abhängig vom Inhalt unterschiedliche Aktionen ausführen.

Ich als C-Laie kenne jetzt nur die Möglichkeit das CharArray in einen String zu wandeln und den dann zu durchsuchen:
Code:

String str1;
  int packetSize = Udp.parsePacket();
  if(packetSize)
  {
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    str1 = String(packetBuffer);
    
       if(str1.indexOf("Befehl") > -1) {
       .
       .
       }
 

Kann man das auch ohne die Wandlung in einen String machen?

Mein Endziel allerdings wäre es folgendes zu senden: "Befehl x y" wobei x und y Zahlen sein sollen.
Im Arduino sollten dann die beiden Zahlen im Integerformat als Parameter zum Befehl übergeben werden.
146  International / Deutsch / Re: Programmieren über USB-Extender on: April 03, 2013, 01:44:15 pm
Yep, momentan zum Testen schon.

Ich weiss worauf du hinaus willst.....
147  International / Deutsch / Re: Programmieren über USB-Extender on: April 03, 2013, 01:07:20 pm
Quote
War mir nicht klar. Hätte ich das verstehen können?
OK, ok.... hätt ich besser beschreiben können. smiley-cool

Quote
Hast Du ein gekreuztes Kabel erwischt wo es ein nicht gekreuztes braucht oder umgekehrt?
Miß mal die beiden Netzkabel durch ob sie gleich verbunden sind.
Sind beides normale Patchkabel. Und auch beide i.O. Habs vorher mit dem Netzwerk-Kabeltester durchgemessen.

Hab auch noch so ein flaches 20m Ethernetkabel gefunden. Damit fährt der Arduino nicht mal mehr hoch.
Bei dem 20m Cat6-Patchkabel gingen wenigstens noch die LEDs an, aber an einen Download war nicht zu denken.

Sieht doch so aus, als ob es an der Länge liegt.
148  International / Deutsch / Re: Programmieren über USB-Extender on: April 03, 2013, 12:41:32 pm
Quote
USB kann verlängert werden indem es zb auf Netztwerk bzW Netzwerkkabeln übertragen wird, Dazu brauchst Du aber 2 Umsetzer.

Davon rede ich ja  ;-)
149  International / Deutsch / Programmieren über USB-Extender on: April 03, 2013, 11:45:05 am
Hi,

hat schon jemand Erfahrungen mit dem Programmieren von Arduinos über USB-Extender?

Ich hab mir mal einen zugelegt. Mit einem kurzen Kabel (1m) funktioniert es ja noch prima.
Dann hätte ich ein "gutes" Kabel mit 20m probiert. Aber da funktioniert es nicht mehr.
Zwischenlängen hab ich momentan nicht da.
150  International / Deutsch / Re: debug für serial.print(ln) on: April 01, 2013, 08:48:28 am
oh oh....Blasphemie  smiley-zipper

Aber ich glaube Uwe hat kein Problem damit. smiley

Heißt also, ich könnte das so machen wie gezeigt??
Pages: 1 ... 8 9 [10] 11 12 ... 28