Show Posts
Pages: [1] 2 3
1  International / Deutsch / Re: Serial Kommunikation mit Java unter Windows on: January 04, 2013, 09:41:12 am
Okay muss wohl erwähnen das ich auf Linux 64 bit umgestiegen bin. Also weisst du auch auf anhieb keine Lösung?

Bzw. kann ich jetzt einfach ein 32 bit java benutzen? Betonung auf einfach smiley-grin
2  International / Deutsch / Re: Serial Kommunikation mit Java unter Windows on: January 04, 2013, 08:33:32 am
Alles klar, danke eine schöne Erklärung smiley-wink

Hab immer Internet folgendes gefunden, http://www.cloudhopper.com/opensource/rxtx/, falls man doch mal das ganze unter Windows 64 Bit starten will, aber das nur am Rande.

Kennst du dich mit der RXTXcomm Lib aus? Das senden von Java an Arduino habe ich schon zum laufen bekommen. Jetzt versuch ich allerdings das der Arduino sagen wir mal eine "0" sendet und das Java Programm darauf reagiert. Allerdings scheitere ich momentan daran.

Um ersma einen groben Überblick zu finden arbeite ich nach diesem Code: http://www.mikrocontroller.net/articles/Serielle_Schnittstelle_unter_Java#Einfaches_Beispiel_f.C3.BCr_Daten_empfangen

Mein Fehler den mir Eclipse rauswirft ist:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f77f1e9024d, pid=22530, tid=140153136383744
#
# JRE version: 7.0_09-b30
# Java VM: OpenJDK 64-Bit Server VM (23.2-b09 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [librxtxSerial.so+0x724d]  read_byte_array+0x3d
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/lukas/Eigene Datein/Java/Serial/hs_err_pid22530.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-7/
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
3  International / Deutsch / Re: Serial Kommunikation mit Java unter Windows on: January 03, 2013, 05:35:16 pm
Kann doch aber auch nicht sein.ich benutz doch die IDE auch unter 64 bit windows 7 mit 64 bit java
4  International / Deutsch / Serial Kommunikation mit Java unter Windows on: January 03, 2013, 04:40:26 pm
Hallöchen,

kennt jemand eine Möglichkeit seriell Daten zwischen Arduino und Windows mit Java auszutauschen?

MFG cr0n0s1
5  International / Deutsch / Re: Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 19, 2012, 05:46:23 am
Ich habe mir in meiner Lib eine private _GetText Funktion erstellt.
Durch diese kann ich immer auf den Text zugreifen.

Der Flash ist der Programmspeicher (ReadOnly-wird beim Upload "gebrannt"/"geflashed" ^^), nicht das EEPROM.

Ich muss nur noch schauen, wie ich die passende char Buffergröße auswählen soll. Nicht, dass der Text im Flash doch zu groß ist und nacher wird nicht richtig dargestellt...

Aber mach ich das nicht auch? Auser das ich das ganze mit Strings verwalte. Ansonsten hab ich auch eine private getName();
6  International / Deutsch / Re: Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 19, 2012, 05:31:18 am
Cronos, du könntest jetzt auch die Texte über den Flash realisieren.
Vorlagen sind ja vorhanden  smiley-mr-green

Ja hab das hier mit bekommen aber war erst mal ziemlich überfordert oO smiley-grin. Meinst du mit Flash den EEPROM? Zudem hab ich es versucht die Strings durch Char Arrays zu erstetzen, aber dadurch das ich diese zwischen den Klassen hin und her reiche und das nicht ganz will, bin ich erst mal bei Strings geblieben.

Ich hätte aber nichts dagegen wenn mir dabei geholfen wird die Lösung mit dem Flash um zusetzen smiley-wink
7  International / Deutsch / Re: Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 19, 2012, 02:06:33 am
So ein ROOT Element halte ich auch für wichtig. Da beim Menü sich um eine Baum-Datenstruktur handelt. Und die Baumstruktur braucht immer eine Wurzel.

Also ich habe einen Einstiegspunkt mit begin(int startElement).

Allerdings handelt es sich bei der Datensturktur eher um einen gerichteten Graphen, nicht um einen Baum. In einem Baum gibt es keine Schleifen, die aber in der Menustruktur durchaus möglich sind. Z.B. damit ich beim Weiterblättern nach dem letzten Eintrag einer Ebene wieder an deren Anfang heraus komme.

Und wie in diesem Post beschrieben ist dies eher kein Baum sondern ein Graph und das macht es auch möglich endlos durch eine Ebene zu laufen (Also wenn man am letzten Element angekommen ist gehts oben wieder weiter). Dies war auch so von mir gewollt. Wobei mich interessieren würde, wo für ein root Element gut sein soll?
8  International / Deutsch / Re: Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 06, 2012, 04:36:15 pm
Code:
char* name1 = "Hallo";
char name2[] = "Hallo";
Beide Variablen enthalten auch schon das abschliessende '\0' Zeichen. Was Dein "char name[5]" nicht macht. Dein "Hallo" hat als C-String kein Ende.
Und ein char* name = "Hallo" ist genau so aufwändig wie ein String-Objekt zu erzeugen.
Mario.

Ahh super, das war mir vorher nie so bewusst, dann seh ich auch kein problem dadrin das ganze mit Chars zu machen smiley-wink
9  International / Deutsch / Re: Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 06, 2012, 03:43:15 pm
Der Anhang ist der am ersten Post ?

Wie gesagt, ein Menu im PROGMEM Flash-Speicher aber "konfiguriert statt programmiert", wäre gut.

1.) Ja aus dem ersten Post.
2.) Wie soll ich dieses "konfiguriert statt programmiert" verstehen?

Hmm doch die String Klasse. Die würde ich auf jeden Fall entsorgen. Da Du mit den Strings selbst nichts machst, außer sie zu speichern, sollte einfach "String" gegen "char*", oder sogar "const char*" ausgetauscht werden.

Okay, dazu Fragen. Warum sind Strings schlecht? Sind das nicht letztendlich auch nur Char arrays? Was haben Chars als Vorteil gegenüber Strings?
Und wenn ich jetzt von String auf Char wechsel ist das doch für den User "relativ" aufwendig da er einen Namen z.B. so anlegen muss:
Code:
char name[5] = {'H', 'a', 'l', 'l', 'o'};

Als nächstes würde ich auf jeden Fall von den "künstlichen" Indizes auf Zeiger umstellen, dann sparst Du Dir die Funktion getNeighbour(), da jeder Eintrag von forward, back, up und down gleich der passende Zeiger auf das nächste Item ist. Damit man einen definierten Start hat, würde ich ein "root" Element im Menu-Objekt definieren, welches immer den ersten Eintrag liefert. Zusätzlich sollte jedes MenuItem entsprechende Methoden getForward(), getBack(), getUp und getDown() haben, damit man auf die angehängten Elemente zugreifen und damit durch den Baum / Graph navigieren kann.
Das wäre der nächste Schritt gewesen, allein Schon damit ein Item nicht zwei mal existiert.

Unterm Strich: Würdet ihr diese Lib benutzen wenn ihr gerade ein Projekt  amlaufen habt, bei dem ihr deratige Menüs braucht?
10  International / Deutsch / Re: Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 06, 2012, 11:29:29 am
Hallo und danke für das Intresse,
ich habe nun den oberen Beitrag bearbeitet und die Lib als .zip angehängt also alle die Intresse haben einfach downloaden. Zudem hab ich vor, ein paar fragen zu beantworten smiley-wink

Hi,

bei deinem Beispielcode taucht bei mir ein "geistiges Fragezeichen" auf:
Was passiert bei readButton = 50 (oder 195 oder 380) ?

Grüßle Bernd

Dieser Abschnitt bezieht sich komplett auf das Benutzen eines KeyPadShields (http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_%28SKU:_DFR0009%29) Letztendlich ist dieser Code nur dafür da, um zu ermitteln welcher Button gedrückt wurde und somit durch das Menü zu navigieren.

Wieviel RAM brauchen deine MenuItem-Elemente? Verbrät ein addItem () - Aufruf noch etwas zusätzlich?

Wie viel RAM es genau verbrät kann ich die leider nicht sagen.
Ja addItem() benötigt auch noch Speicher. Allerdings hab ich vor, wie auch schon andere sagten, per Zeiger auf die Items zu zeigen.
Weiter Infos solltest du dir aber aus der Lib holen können.

Das Ganze aus einfach konfigurierbaren Bausteinen zusammenzustellen, ist ein guter Ansatz!

Danke, das war meine Motivation eine solche Lib zubasteln. Es freut mich das ich das anscheinend geschafft habe.


Am Ende möchte ich nochmals sagen das ich mich sehr über Verbesserungsvorschläge freue. Ich hoffe das mein Code nicht ganz so grausam ist und keine hoch heiligen unaufgeschriebenen Programmierregeln bricht.
Also dann viel Spass mit der Lib smiley-wink
11  International / Deutsch / Projektvorstellung: Library für das Erstellen von Menus für LCD Displays on: December 05, 2012, 04:17:24 pm
Guten Tag Arduino-Gemeinde,

ich arbeite seit einigen Wochen an einer Library für das einfache und dynamische Erstellen von Menüs, optermiert für ein LCD Keypadshield (LCD Display mit Button für das navigieren durch ein Menü). Die Library die ich vorstellen werde, ermöglicht es schnell und ohne viele Handgriffe ein komplexes Menü zu erstellen. Im folgenden würde ich nun einfach damit beginnen ein Menü mit einigen Unterpunkten auf zubauen.

Schritt 1.: Planung

Als erstes überlegen wir uns was wir für unsere Menü brauchen. Ich habe als Beispiel folgendes Menü aufgebaut:

Settings -> Sound
               Display
               Control
               LED      -> Test LED

Jeder dieser Namen stellt ein MenüItem da. Jedes MenüItem bekommt nun eine nummer zu gewiesen. Dadurch wird es möglich die Items zu verwalten und unter einander bekannt zu machen, sprich wenn man später einen Button drückt ist klar welches Item als nächstes auf dem Display erscheinen soll. Wichtig dabei ist das jedes Item eine einmalige Nummer bekommt.

001 Settings -> 002 Sound
                     102 Display
                     202 Control
                     302 LED       ->  033 Test LED

Der Punkt 033: Test Led wird später wenn der Selectbutton gedrückt wurde eine LED zum leuchten bringen.
Nach dem wir nun das Menü geplant haben und jedem Menüpunkt eine Nummer zugewiesen haben können wir Anfangen unser Menü zu programmieren.


Schritt 2.: Anlegen des Menüs und der Items

Als nächtes werden die benötigten Objekte angelegt. Wir beginngen mit dem Menu

Code:
// Create a Menu object (The frame you feed with MenuItems)
Menu myMenu;

das Menu objekt verwaltet alle MenuItems und weiß wo hin es geht, wenn ein Button (z.B. Rechts oder Links) gedrückt wurde.

Danach folgen die MenuItems welche die einzelnen Menüpunkte darstellen.

Code:
// Create the MenuItems
//                Name     Number For  Back  up  down
MenuItem item001("Settings", 001, 002, 001, 001, 001);
MenuItem item002("Sound", 002, 002, 001, 302, 102);
MenuItem item102("Display", 102, 102, 001, 002, 202);
MenuItem item202("Controll", 202, 202, 001, 102, 302);
MenuItem item302("LEDs", 302, 033, 001, 202, 002);
MenuItem item033("Test LED", 033, 033, 302, 033, 033);

Wie schon in dem Kommentarbeschrieben wird jetzt jedem Item bekannt gemacht, welcher sein Nachbar ist und von hin es geht wenn der jeweilige Button gedrückt wird. Da wir vorher eine ordentliche Planung durchgeführt haben ist es nun einfach die Items anzulegen.

Schritt 3.: Verbinden der Items und dem Display mit dem Menü


Da diese Libary auf ein Menü für LCD Displays ausgelegt ist brauchen wir natürlich auch ein solches Display. Dieses legen wir an und machen es dem Menü bekannt, damit es Ausgaben auf dem Display tätigen kann.

Code:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
lcd.begin(16, 2);
  
// Add the display to the menu
myMenu.addLCD(&lcd);
 

Danach können wir die zuvor erzeugen MenuItems dem Menü bekannt machen.

Code:
// Add the items to the menu
myMenu.addItem(item001);
myMenu.addItem(item002);
myMenu.addItem(item102);
myMenu.addItem(item202);
myMenu.addItem(item302);
myMenu.addItem(item033);

Ab diesem Punkt ist das Menü erstellt und funktionsfähig. Danach muss natürlich noch festgelegt werden, was passiert wenn die jeweiligen Button gedrückt werden. Dies sollte man aber aus dem folgendem kompletten Beispiel entnehmen.
Zudem werde ich bei Intresse die Libary freigeben. Ich hoffe das meine Erläuterung verständlich genung war und bei einigen Intresse geweckt hat. Außerdem bitte ich um viele Verbesserungsvorschläge bezüglich dieser Vorstellung und natürlich der Libary. Kritik nehme ich eben so gerne an, aber ich bitte um schonende Worte, da dies das erste mal ist das ich solch ein Projekt vorstelle.

In diesem Sinne bin ich auf die Kommentare gespannt und nun das komplette Beispiel

Code:
#include <LiquidCrystal.h>
#include <Menu.h>
#include <MenuItem.h>

// Create a Display object
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// Create a Menu object (The frame you feed with MenuItems)
Menu myMenu;

// Create the MenuItems
//                Name     Number For  Back  up  down
MenuItem item001("Settings", 001, 002, 001, 001, 001);
MenuItem item002("Sound", 002, 002, 001, 302, 102);
MenuItem item102("Display", 102, 102, 001, 002, 202);
MenuItem item202("Controll", 202, 202, 001, 102, 302);
MenuItem item302("LEDs", 302, 033, 001, 202, 002);
MenuItem item033("Test LED", 033, 033, 302, 033, 033);

int readButton; // Variable to store the last pressed Button
int select;  

void ledTest(){
  digitalWrite(13, HIGH);
  delay(3000);
  digitalWrite(13, LOW);
}

void setup(){
  lcd.begin(16, 2);
  
  // Add the display to the menu
  myMenu.addLCD(&lcd);
  
  // Add the items to the menu
  myMenu.addItem(item001);
  myMenu.addItem(item002);
  myMenu.addItem(item102);
  myMenu.addItem(item202);
  myMenu.addItem(item302);
  myMenu.addItem(item033);
  
  myMenu.begin(001); // Start at the Menu with at the MenuItem you want
  
  pinMode(13, OUTPUT); // Set pinMode for Test LED
}

void loop(){
  readButton = analogRead(0); // read the value from a pushed button
  
  // Check if a button was press
  if(readButton < 50){
    myMenu.goForward();
  }
  if(readButton > 50 && readButton < 195){
    myMenu.goUp();
  }
  if(readButton > 195 && readButton < 380){
    myMenu.goDown();
  }
  if(readButton > 380 && readButton < 555){
    myMenu.goBack();
  }
  
  // Check if selectbutton was press
  if(readButton > 555 && readButton < 790){
    select = myMenu.select(); //use select() to check if the item you are at has a runable function
    
    switch(select){
      case 033: //if found a funtion for a item run it
        ledTest();
        break;
        
      default:
        break;
    }
  }
  readButton = 1000;

}
12  International / Deutsch / String an Methode übergeben. on: November 28, 2012, 02:01:44 pm
Hallo Leute,

hab momentan folgendes Problem: Ich möchte gerne einen String an eine Methode einer Klasse übergeben. Am Ende solls dann eigentlich so aussehen.

.INO:

#include <Klasse.h>
void setup(){
   Klasse myKlasse;

   myKlasse.sendString("Hallo");
}

.h:

class Klasse{
public:


13  International / Deutsch / Re: DC -> DC 5V zu 170V on: November 28, 2012, 07:48:45 am
Alles klar danke sehr smiley-wink
14  International / Deutsch / Re: SD über USB auslesen on: November 23, 2012, 05:59:31 am
Auch ich sehe nur diesen Weg. Man kann aber die Daten die bei der seriellen Schnittstelle hereinkommen über DOS-Befehle in ein File schreiben lassen und so nicht ein Programm schreiben zu müssen.

Grüße Uwe

Natürlich auch möglich smiley-wink
15  International / Deutsch / Re: SD über USB auslesen on: November 23, 2012, 04:57:18 am
Spontan würde mir da einfallen die SD karte über SPI auszulsen (über ein Shield oder wie auch immer) dann über den Arduino mit Serial auf den Serielenport an den rechner, welche die Daten mit einem (wahrscheinlich selbst geschrieben Programm) annimmt und verarbeitet.

Noch mal die Zusammenfassung:

              SPI                Seriel
SD Shield ------> Arduino -------> Rechner

Gruß cr0n0s1
Pages: [1] 2 3