Show Posts
Pages: [1] 2 3 ... 7
1  International / Deutsch / Re: SD TXT Dateien einlesen on: January 01, 2013, 10:51:35 am
Wenn du keine weiteren Infos hast, dann wird dir hier auch keiner helfen können. Was stimmt denn genau nicht? Ich sehe im Serial Output erst mal keinen Fehler.

Rudi

2  International / Deutsch / Re: Parallel in Serial out on: December 31, 2012, 07:50:18 pm
Um festzustellen, ob ein bestimmtes Bit gesetzt ist (das erste Bit ist Bit 0), musst du einfach den Zahlenwerts des Bits an dieser Stelle mit der zu untersuchen Zahl mit AND verknüpfen.

Anbei einige Beispiele:

Der zu untersuchende Wert soll 147 sein (das ist in Hex-Darstellung 0x93, in Binär also 1001 0011) und ist in der Variaben "value" gespeichert

Code:
  int value = 147:

// Überprüfung ob Bit 7 gesetzt ist:
  if ((value & 0x80) == 0x80)
    {
      printf("Bit 7 ist gesetzt");
    }
   else
    {
      printf("Bit 7 ist nicht gesetzt");
    }

Überprüfung der anderen Bits:

Bit 6 -> Überprüfung mit 0x40
Bit 5 -> Überprüfung mit 0x20
Bit 4 -> Überprüfung mit 0x10
Bit 3 -> Überprüfung mit 0x08
Bit 2 -> Überprüfung mit 0x04
Bit 1 -> Überprüfung mit 0x02
Bit 0 -> Überprüfung mit 0x01

Du kannst auch Kombination von Bits überprüfen, wenn du z. B. feststellen willst, ob das Bit 0 und das Bit 4 GLEICHZEITIG gesetzt sind, dann kannst du das mit

Code:
  if ((value  & 0x11) == 0x11)
....

überprüfen.

Aber Vorsicht: Ist nur eins der beiden gesetzt, dann ist die Bedingung insgesamt nicht erfüllt, da das eigentlich nur die Kurzschreibweise von

Code:
  if (((value  & 0x10) == 0x10) && ((value & 0x01) == 0x01)
....

ist.


Ich hoffe, dass das nun einigermaßen verständlich war.

Rudi
3  International / Deutsch / Re: Bestimmte Stelle einer Variablen(int/double) auslesen. on: December 16, 2012, 11:44:08 am
Hi,

charAt geht nur für Strings. Wenn du Zeichen vergleichen willst, dann musst du für Zeichen-Literale (konstante Werte) einfache Hochzeichen verwenden. Das sind nämlich keine Strings, sondern char-Werte und die brauchen einfache Hochzeichen.

Also statt

Code:
if(char1 == 1){tu etwas;} //geht nicht
 if(char1 == ""){tu etwas;} //gibt fehler beim compilieren 

muss es heißen:

Code:
if(char1 == '1'){tu etwas;}

Was du mit dem zweiten Statement erreichen willst, ist mir nicht ganz klar. Was soll denn die zweite Bedingung genau bedeuten?

Rudi
4  International / Deutsch / Re: Literaturtipps für Programmiersprache C on: December 01, 2012, 05:31:06 pm
Hallo Martin,

hast du denn schon Erfahrung in der Programmierung? Falls ja, welche Sprachen?

Rudi
5  International / Deutsch / Re: Steuerung elektrischer Rolladen on: November 24, 2012, 06:04:57 am
Hallo Uwe und mkl0815,

danke fürs Feedback. Das mit dem FS20 geht schon mal in die richtige Richtung. Worum es mir eigentlich geht:

Ich will die Rollos (insgesamt werden es wohl 5 sein) steuern können, auf Basis von Dämmerungs- und Wärmesensoren. Ich habe dazu an eine zentrale Station gedacht, die die Rollos per Funk steuert. Die Rollos sind derzeit noch alle manuell, d. h. da ist noch kein Motor drin. Ich möchte nun einfach vermeiden, dass diese Aufgabe damit endet, dass ich auch die Rollos selbst montieren muss;-) Ich möchte daher die Rollos von jemandem einbauen lassen und dachte, dass es evtl. einfacher wäre, wenn die bereits Möglichkeiten zur Funksteuerung hätten - analog zu Funksteckdosen, ich habe da schon öfters die Empfehlung gelesen, wenn man Geräte aus- und einschalten will, dies lieber fern Funksteckdosen zu machen.

Was ist denn die einfachste Variante bzgl. der Rollosteuerung mit Arduino, wenn ich mal voraussetze, dass die Rollos schon fertig mit elektr. Antrieb montiert sind? Soll dann die Steuerung durch einen Arduino direkt im Rollokasten vorgenommen werden? Und wie kriegt der die Funkssignale von einer zentralen Stelle? Was eignet sich dazu am besten?
Oder gibt's da einen besseren Ansatz? Muss ich einen Arduino in den Rollokasten einbauen? Würde nicht auch z. B. ein XBee-Modul reichen, das dann die Steuerung vornimmt?

Fragen über Fragen...

Vielleicht könnt ihr mir ja auch Webseiten empfehlen, wo ich mich erst mal in das Thema einlesen kann.

Danke fürs Mitlesen,

Rudi

Edit:
Noch was vergessen. Kann ich dann jeden Rolladenmotor per Arduino bzw. Funk ansteuern oder muss der gewisse Voraussetzungen erfüllen?

6  International / Deutsch / Steuerung elektrischer Rolladen on: November 22, 2012, 05:40:21 pm
Hallo,

ich möchte einige manuelle Rolläden gegen elektrische Rolläden austauschen (lassen), die ich dann per Arduino steuern können will. Was muss ich denn dabei beachten? Welche Möglichkeiten gibt es dafür?

Mir fallen spontan ein:

o Arduino in Rolladenkasten mit einbauen und dann per Funk ansteuern
o Rolladensteuerung mit Funksteuerung kaufen, die ich dann auch vom Arduino per Funk ansteuern kann
o ...

Da ich die Rolladen einbauen lassen will, ist die erste Variante wahrscheinlich eher problematischer und die zweite mir daher deutlich sympathischer. Was muss ich denn dabei beachten, damit ich den Rollo auf alle Fälle  mit einem Arduino steuern kann.

- Wie muss die Fernbedienung beschaffen sein?
- Was brauche ich auf Arduino-Seite an Hard- und Software?
- Um die Fernbedienung ansprechen zu können: was brauche ich dazu an Dokumentation?

Vielen Dank für eure Tipps,

Rudi
7  International / Deutsch / Re: Domain-Adresse in eine IP-Adresse umwandeln on: November 02, 2012, 06:11:08 pm
Welche Arduino-Version benutzt du denn? Bei mir (Version 1.0) läßt sich das ohne Probleme übersetzen.

Rudi
8  International / Deutsch / Re: Sensordaten mit Xbee senden und empfangen erzeugt Fehler on: November 01, 2012, 01:11:29 pm
Hallo dingeldongel,

wie pylon schon schrieb, solltest du code-Tags verwenden, dann wird der Code übersichtlicher präsentiert.

Jetzt zu deinem Code:

Nach der Abfrage, ob ein Zeichen an der seriellen Schnittstelle anliegt, liest du die beiden folgenden Werte aus - das sieht soweit erst mal ok aus. Allerdings zeigst du dann das Ergebnis an, egal ob du wirklich was von der seriellen Schnittstelle gelesen hast oder nicht. Daher solltest du die Ausgabe udn Servosteuerung noch in den Zweig mit der Bedingung aufnehmen.
Also in etwa so:

Code:
#include <Servo.h>
 
Servo xservo;
Servo zservo;
const int NUMBER_OF_FIELDS = 2; // Wie viele kommaseparierte Felder erwarten wir?
int fieldIndex = 0; // Das aktuell empfangene Feld
int values[NUMBER_OF_FIELDS]; // Array mit den Werte aller Felder
int angle_x , angle_z;
void setup()
{
Serial.begin(9600); // Serieller Port sendet und empfa¨ngt mit 9600 Baud
  xservo.attach(9);
  zservo.attach(10);
}
void loop()
{
if( Serial.available()) {
  char ch = Serial.read ();
  if (ch == 'B')
  {
  for(fieldIndex = 0; fieldIndex < 2; fieldIndex ++)
  {
    values[fieldIndex] = Serial.parseInt(); // Numerischen Wert einlesen
  }
  angle_x = values[0];
  angle_z = values [1] ;
}
Serial.print("angle_x");
Serial.print(angle_x);
Serial.print("       angle_z");
Serial.println(angle_z);
delay(5);
xservo.write(angle_x / 2);
delay(5);
zservo.write(angle_z / 2);
delay(50);
}
}

Schau doch mal, ob das funktioniert - den Code habe ich nicht getestet, daher könnten noch Syntaxfehler drin sein.

Rudi
9  International / Deutsch / Re: Attiny85 Geschwindigkeitsproblem? on: October 03, 2012, 01:53:25 pm
Marcus meint, du sollst eine Funktion schreiben, der du als Parameter die Dauer übergeben kannst, der Parameter soll vom Typ short sein.

Bzgl. dem case: das kann nur Literale vergleichen, wenn du Bereiche vergleichen willst, dann musst du das mit if lösen


Beispiel:
Code:
if (dauer > 190 && dauer < 195)
{
  ...
}
10  International / Deutsch / Re: dynamisches Array on: October 01, 2012, 01:44:51 pm
Quote
Code:
//an allen stellen auf 0 setzen (optional)
  for (int i=0;i<zufall;i++) {
    zufallsarray[0] = 1;
Ist das so richtig? Wenn ja, muss ich nochmal zurück zu den basic tutorials...

ich hätte jetzt
Code:
zufallsarray[i] = 0;
erwartet...



Das Füllen mit 0 kann man sich übrigens sparen, wenn man statt malloc die Funktion calloc verwendet, die macht das gleich mit.

Rudi
11  International / Deutsch / Re: Automatik Schaltung für Fahrrad on: May 27, 2012, 03:54:12 pm
Da kaufst du besser gleich ein neues Fahrrad - bei Fahrräder sind die Komponenten ungefähr genauso kompatibel wie bei Computern.

Rudi
12  International / Deutsch / Re: Automatik Schaltung für Fahrrad on: May 27, 2012, 07:26:29 am
Warum willst du überhaupt eine Automatik-Schaltung fürs Fahrrad? Von Shimano gibt es für Rennrad eine elektrische Schaltung (DI 2), die hat sehr viel Lob bekommen - aber auch die hat erst mal keine Automatik. Ich denke, dass da der Radfahrer die Kontrolle drüber behalten sollte.

Wenn du zum Anfang "nur" eine elektrische Schaltung realisierst, dann hast du schon mal sehr viel geschafft - dann kannst du immer noch überlegen, ob du noch den weiteren Schritt zur Automatik weiter gehen willst. Und bei der elektrischen Schaltung kanst du ja auch nur zwei Buttons anbieten (z. B. leichter/schwerer oder langsamer/schneller) und dann jeweils in die richtige Richtung schalten. So ist es auch für den ungeübten Radfahrer einfach zu bedienen.

Rudi
13  International / Deutsch / Re: HEX conversion mit sprintf on: May 16, 2012, 02:23:36 pm
Hallo,

gegen Michaels Lösung spricht gar nichts, immerhin spart sie doch ziemlich viel Speicher ein. Allerdings hatte Jürgen ja den Verdacht, dass sein Problem durch zu wenig Speicher käme - dem war aber nicht so, sondern der Fehler lag in seinem Code, daher war es mir wichtig, diesen Irrtum aufzuklären.

Rudi
14  International / Deutsch / Re: HEX conversion mit sprintf on: May 15, 2012, 04:45:09 pm
Du könntest die Funktion z. B. folgendermaßen realisieren:

Code:
void checksum(char* csbuf, char *CSout){

  // Vorige Checksumme löschen
  int cs=0;
  // Ohne '$'
  for (int n=1; n < strlen(csbuf)+1; n++) {
    // berechnen der Checksumme
    cs ^= csbuf[n];
  }  
  // Formatieren in zweistellig, führende Null in HEX
  sprintf(CSout, "*%02X\0" , cs);
}

Aufrufen kannst du das dann folgendermaßen

Code:
char outBuf[100], CSout[4];

strcpy( outbuf, "NMEA-Datensatz ohne CS");
checksum(outbuf, CSout);
strcat( outbuf, CSout);
strcat( outbuf, "\r\n");
Serial.print(outbuf);
15  International / Deutsch / Re: HEX conversion mit sprintf on: May 14, 2012, 03:27:20 pm
Hallo Jürgen,

das ist kein Problem von sprintf, sondern ein Fehler in deinem Programm. Du gibt die Adresse einer lokalen Variablen auf dem Stack zurück, die längst überschrieben worden sein könnte.

Es gibt zwei einfache Lösungsmöglichkeiten:

a) den String für den Hexwert als Parameter an die Funktion übergeben
b) den String nicht statisch (also char CSout[4]), sondern dynamisch per malloc() zu reservieren - dann musst du ihn aber in der aufrufenden Funktion auch wieder freigeben.

Warum hast du eigentlich CSout in der Länge von 4 definiert? Brauchst du wirklich 3 Zeichen für die Hex-Zahl?


Ciao,

Rudi
Pages: [1] 2 3 ... 7