Show Posts
Pages: 1 2 [3] 4 5 ... 39
31  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: February 05, 2014, 10:43:38 am
So wie du es geschrieben hast wird das Objekt auch angelegt:
Code:
LiquidCrystal_I2C lcd(_LCDMenuLib_LCD_addr, _LCDMenuLib_LCD_e, _LCDMenuLib_LCD_rw, _LCDMenuLib_LCD_rs, _LCDMenuLib_LCD_dat4, _LCDMenuLib_LCD_dat5, _LCDMenuLib_LCD_dat6, _LCDMenuLib_LCD_dat7, _LCDMenuLib_LCD_backlight, _LCDMenuLib_LCD_backlight_pol);

Aber nirgens unter 12 - 15 werden die  dat0 - dat3 verwendet. Wieso er das nun als Fehlermeldung ausgibt weiß ich nicht. Kannst du mal bei dir in der LCDMenuLib_class.h unter in Zeile 86 - 107 nachschauen ob irgendwo  das definiert ist ?

Ich hab gerade schon die alten Versionen der Lib durchgeschaut, aber dort habe ich die definitionen auch nicht deklariert. Sind vielleicht zwei Einträge in der ___config.h aktiv ?

32  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: February 04, 2014, 11:09:01 am
Was ist denn der 4bit Modus mit I2C ?  Einfacher ist es wenn du mir sagst welche Konfiguration du in der LCDMenuLib___config.h eingestellt hast. Ich habs gerade bei mir mit dem Typen 10 - 15 getestet und habe keine Fehlermeldungen beim kompelieren. Definierte Variablen:
Code:
/* i2c address */
#define _LCDMenuLib_LCD_addr             0x20

#define _LCDMenuLib_LCD_e 0
#define _LCDMenuLib_LCD_rw 1
#define _LCDMenuLib_LCD_rs 2
#define _LCDMenuLib_LCD_dat4              3
#define _LCDMenuLib_LCD_dat5              4
#define _LCDMenuLib_LCD_dat6              5
#define _LCDMenuLib_LCD_dat7              6
#define _LCDMenuLib_LCD_backlight         7
#define _LCDMenuLib_LCD_backlight_pol     POSITIVE // NEGATIVE
33  International / Deutsch / Re: Einbindung meines Programms in ROS on: February 03, 2014, 07:51:13 pm
Hi, in der Zeile 11 wird nur ein Objekt vom Type String angelegt, eigentlich das gleiche wie in Zeile 9 und 12. Zeile 26 ruft eine Funktion auf, die etwas mit dem Objekt macht.

Vielleicht solltest du dir die Grundlagen nochmal anschauen, diese lassen sich auch in deutsch finden:
Such am besten nach ROS in Verbindung mit Hochschule bzw Unis, irgendwie müssen die Studenten das ja auch lernen ;-)

http://users.informatik.haw-hamburg.de/projects/robotvision/Einsatz%20des%20ROS-Frameworks%20zur%20Umgebungskartierung%20und%20Navigation%20des%20SCITOS%20G5-Service-Roboters%20-%20Felix%20Kolbe%20PJ2%20Projektbericht.pdf
http://www.betriebssysteme.org/Aktivitaeten/Treffen/2012-Koblenz/Programm/docs/slides_kathe.pdf
http://www.is.uni-due.de/fileadmin/lehre/11w_projekt/Folien.pdf
http://enricojoerns.de/docs/ros_ausarbeitung_final_twosided.pdf


34  International / Deutsch / Re: Eine generelle Frage zum Thema Arduino und Matlab/Simulink on: February 03, 2014, 07:31:55 pm
Hi,
du kannst den Regler ruhig mit Matlab/Simulink erstellen und den generierten C Code später im Arduino einsetzen, dir sollte nur bewusst sein, dass ein Arduino (die meisten) nur 2 Kb Ram besitzen und somit komplizierte Berechnungen mit vielen Float Werten die Hardware schnell an die Grenzen bringen.
Den generierten Quellcode musst du von Hand kopieren und eventuell minimal anpassen. 
35  International / Deutsch / Re: Fehler beim Kompilieren on: February 03, 2014, 02:59:46 pm
Wo kommt den die Firmware her, meistens muss man diese ja selbst nicht übersetzen. Mit welchem Programm versuchst du das zu übersetzen.

Ist dieses Thema allgemein oder nutzt der Drucker einen Arduino ?
36  International / Deutsch / Re: Einbindung meines Programms in ROS on: February 03, 2014, 12:48:36 pm
Hi,
ROS ist schon sehr speziell, vielleicht erhälst du qualitativ bessere Antworten wenn du in einem ROS Forum nachfragst, da die meisten hier sich nur mit Mikrocontrollern auskennen, deine Frage sich aber Hauptsächlich auf ROS Funktionen bezieht.
37  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: February 03, 2014, 03:34:54 am
Hi,
ich selbst habe noch nicht mit Schieberegistern gearbeitet, wie du nun genau die einzelnen Funktionen aufrufst weiß ich nicht genau. Allgemeine Fragen dazu kann man besser in einem eigenem Thema stellen.

Allgemein LiquidCrystal_SR,  LCDMenuLib:
In der LCDMenuLib nutze ich eine externe Lib die eingebunden werden kann. Diese kann die Schieberegister für das LCD passend setzen.
Die Dokumentation zu der Lib findest du hier:  https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
(alte LiquidCrystal an einen Ort außerhalb des Lib Verzeichnis kopieren und die Neue einfügen, anschließend die Arduino Software [alle Instanzen] schließen und neu öffnen)

In meiner Lib müsstest du nun in das Lib Verzeichnis wechseln und die LCDMenuLib___config.h öffnen. Hier kommentierst du die erste Zeile aus (Nummer 0) und die letzte Zeile ein (Nummer 20). Dies aktiviert den Schieberegister Modus.

Anschließend öffnest du z.B. das normale Beispeil aus meiner Lib.

Hier musst bei den Dateien die eingebunden werden die Zeile mit  #include <LiquidCrystal.h>  durch    <LiquidCrystal_SR.h> ersetzen.
Danach müssen noch die Konstanten für das Schieberegister definiert werden
Code:
#define _LCDMenuLib_LCD_srdata     0     //data pin    
#define _LCDMenuLib_LCD_srclk        1     //clock pin
#define _LCDMenuLib_LCD_enable     TWO_WIRE

Die Verdrahtung eines Schieberegisters mit dem LCD kann man hier finden:
https://code.google.com/p/arduinoshiftreglcd/

Eine ausführliche Anleitung zur Ansteuerung der Schieberegister findet man auch in den *.h Dateien der neuen LiquidCrystal Lib: Dort stehen viele Information wie z.B.:
für SR Register:
Quote
// Connection description:
//
// SR output:
// Bit  #0   - N/C - not connected, used to hold a zero
// Bit  #1   - N/C
// Bit  #2   - connects to RS (Register Select) on the LCD
// Bits #3-6 - connects to LCD data inputs D4 - D7.
// Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
//
// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
// If not using Enable, the Data pin will be used for the enable signal.
// 2 wire mode can be indicated by:
// - ommitting the enable pin in constructor
// - defining the same pin for Enable as for Data in constructor
// - by using the token TWO_WIRE for the enable pin.

SR2W:
Quote
// 2 Pins required from the Arduino:
// - Data/Enable
// - Clock
// The Data pin is also used to control the enable signal
// LCD RW-pin hardwired to LOW (only writing to LCD).
// Busy Flag (BF, data bit D7) is not read.
//
//  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
//
// Shift register bits
// Bit  #0   - (cannot be used on 74HC595)
// Bit  #1   - optional backlight control
// Bit  #2   - connects to RS (Register Select) on the LCD
// Bit  #3   - connects to LCD data inputs D4
// Bit  #4   - connects to LCD data inputs D5
// Bit  #5   - connects to LCD data inputs D6
// Bit  #6   - connects to LCD data inputs D7
// Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")

SR3W:
Quote
//   +--------------------------------------------+
//   |                 MCU                        |
//   |   IO1           IO2           IO3          |
//   +----+-------------+-------------+-----------+
//        |             |             |
//        |             |             |
//   +----+-------------+-------------+-----------+
//   |    Strobe        Data          Clock       |
//   |          8-bit shift/latch register        | 74HC595N
//   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
//   +----+----+----+----+----+----+----+----+----+
//        |    |    |    |    |    |    |    
//        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
//   +----+----+----+----+----+----+----+----+----+
//   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
//   |                 LCD Module                 |

Die SR2W und SR3W Versionen der neuen LiquidCrystal sind bisher noch nicht in der Lib eingebunden. Dies könnte ich aber heute Abend umsetzen.


Zur Ansteuerung der LCDMenuLib
Du könntest dir die folgende Funktion so umschreiben, dass das digitalRead durch deine Abfrage des Schieberegisters ersetzt wird. Danach wäre die Ansteuerung schon fertig.
Code:
void LCDMenuLib_control_digital_over_sr()
{
    if(LCDML.Timer(g_LCDMenuLib_press_time, _LCDMenuLib_cfg_press_time))
    {
if(digitalRead(_BUTTON_digital_enter))
   {
LCDML.Button_enter();
}
else if(digitalRead(_BUTTON_digital_up))
{
LCDML.Button_up_down_left_right(_LCDMenuLib_button_up);
}
else if(digitalRead(_BUTTON_digital_down))
{
LCDML.Button_up_down_left_right(_LCDMenuLib_button_down);
}
else if(digitalRead(_BUTTON_digital_left))
{
LCDML.Button_up_down_left_right(_LCDMenuLib_button_left);
}
else if(digitalRead(_BUTTON_digital_right))
{
LCDML.Button_up_down_left_right(_LCDMenuLib_button_right);}      
}
// Button Quit hat Priorität wenn mehrere Gleichzeitig gedrückt werden
if(digitalRead(_BUTTON_digital_quit))
{
LCDML.Button_quit();
}  
}
}

Ich hoffe das Hilft dir erstmal weiter und danke für den Tipp mit dem KeyFile, dass werde ich wenn ich etwas mehr Zeit habe mal anpassen.

Update 03.02.2014
- Beispiele überarbeitet bezüglich definierter Konstanten
- SR Beispiel eingefügt
- SR2W und SR3W werden nun unterstützt
- SR2W und SR3W Beispiele eingefügt
- Konstanten im Keyfile angepasst
38  International / Deutsch / Re: RGB-LED Strip Ansteuerung on: February 01, 2014, 03:11:41 am
Ich hab vor 3 Tagen, diese hier noch bestellt:

http://www.ebay.de/itm/5m-52-LED-m-Digitale-LPD8806-RGB-LED-Light-Stripe-5V-Addressable-Full-Color-/171206672060?ssPageName=ADME:L:OC:DE:3160

Anschlussart, 2 Pin (Clock und Data).  Jede LED ist einzeln in jeder Farbe ansteuerbar (127 Stufen).

Nachteil: für den Preis gibt es nur 5 Meter Stücke.
39  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 29, 2014, 03:09:07 am
 smiley-roll-blue
40  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 29, 2014, 02:27:45 am
Dann liefern wir dem Fehler einfach den Datentyp den er erwartet:

t_backlightPol ist so definiert:
Code:
typedef enum { POSITIVE, NEGATIVE } t_backlighPol;

Änder mal das define wie folgt um:
Code:
//....
#define _LCDMenuLib_LCD_backlight_pol     POSITIVE  // oder NEGATIVE  so wie dein LCD das benötigt
// ....

Dann wäre es Datentyp technisch korrekt.
Ich weiß nicht wieso er bei mir die "0" annimmt.

Ich hab die Änderung auch in der Beschreibung des ersten Beitrages geändert.
41  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 28, 2014, 08:40:01 am
Also die Type 10 - 15 definieren nicht die fehlenden Konstanten. Diese werden dann benötigt, aber nicht festgelegt. Daher müssen sie im Programm festgelegt werden.

Ich hab es gerade nochmals bei mir getestet, ich kann Version 10 - 15 kompilieren ohne Fehlermeldung wenn ich im Arduino Sketch die Konstanten einfüge.

Sieh dir das Bild im Anhang an!
42  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 28, 2014, 05:02:40 am
Hi,
falsch läuft da gar nichts :-)  

Schau dir nochmal Punkt 4 im ersten Beitrag an, vor allem der letzte Satz bevor der Quellcode eingeblendet wird. Dort steht wie man die fehlenden Konstanten definiert.

Unter dem Quellcode steht dann auch was passiert, wenn man diese nicht einbindet  smiley-lol
43  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 27, 2014, 08:10:59 am
Hi, die Funktion sorgt nur dafür das LCDML.checkButtons() funktioniert.
Es wird quasi das benötigte Bit in der Variable LCDML.button gesetzt.
44  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 25, 2014, 03:44:44 am
Hi,

die Funktion LCDML.checkButtons ist nur für 6 Buttons ausgelegt, daher werden deine eigenen nicht unterstützt. Die Zeile kann daher so direkt nicht funktionieren. Man könnte die Funktion aber Manuel setzen z.B:

Code:
//Gloable Variable, diese sollte irgendwo oberhalb der setup() stehen
char   g_save_keypad = 0;
/* callback function - FUNC_LED_standard */
uint8_t g_lightsetting_current_pos = 0;
/* falls noch keine globale timer variabel existiert, muss diese verwendet werden */
unsigned long g_timer_1 = 0;    /* timer variable */



/* serial menu control */
void LCDMenuLib_control_keypad()
{
    if(LCDML.Timer(g_LCDMenuLib_press_time, _LCDMenuLib_cfg_press_time))
    {
         /* minimal verändern */
         char l_key = kpd.getKey();   // das l_  steht für lokale variabel
      switch(l_key)
      {
        case 'E': LCDML.Button_enter(); break;
        case 'U': LCDML.Button_up_down_left_right(_LCDMenuLib_button_up); break;
        case 'D': LCDML.Button_up_down_left_right(_LCDMenuLib_button_down); break;
        case 'L': LCDML.Button_up_down_left_right(_LCDMenuLib_button_left); break;
        case 'B': LCDML.Button_up_down_left_right(_LCDMenuLib_button_right); break;      
        case 'S': LCDML.Button_quit(); break;

        /* neu */
       case 'deine_zahl':  
          // Button Check setzen
          bitWrite(LCDML.button, _LCDMenuLib_button, 1);
          g_save_keypad = l_key;
      break;

      //.. weitere abfragen nach dem gleichen schema      
        default: break;
      }
    }


Anschließend folgt in deiner Menu Funktion folgendes:
Code:

void FUNC_Lightsetting(void)
{  
/* setup function */      
if(!LCDML.FuncInit())
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Startzeit: ");
lcd.print(erste_Null(g_hour_start));  
lcd.print(":");
lcd.print(erste_Null(g_minute_start));  
  
lcd.setCursor(0,1);
lcd.print("Stoppzeit: ");
lcd.print(erste_Null(g_hour_stopp));  
lcd.print(":");
lcd.print(erste_Null(g_minute_stopp));  
lcd.setCursor(11,0);
lcd.blink();
}

// Die while schleife ist hier eine dumme lösung, da alle anderen funktionen nun darauf warten
// Weitere verbesserung, du führst die key-48 operation an mehreren stellen aus, an einer wäre angenehmer oder ?
 
// g_save_keypad >= '0'  liefert einen vergleich mit der zahl 48 die in ascii 0 enspricht
// g_Save_keypad <= '9'  liefert einen vergleich mit der zahl 57 die in ascii 9 enspricht
if(LCDML.checkButtons() && g_save_keypad >= '0' && g_save_keypad <= '9' && g_lightsetting_current_pos < 8)
{
Serial.println("Button");

Serial.print(g_lightsetting_current_pos+1);
Serial.print(". Stelle");



switch(g_lightsetting_current_pos)
{
//1. Ziffer///////////////////////////////////////////Eingabe Stunde Start////////
case 0:  
              if(g_save_keypad-48 <=2)
                {
                  lcd.print(g_save_keypad);
                  g_hour_start = 10 * (g_save_keypad-48);
                  lcd.setCursor(12,0);
 g_lightsetting_current_pos++;
                }        

break;

case 1://2. Ziffer
              
              lcd.print(g_save_keypad);
              g_hour_start = g_hour_start + (g_save_keypad-48);  
              if(g_hour_start<=24) {
 lcd.setCursor(14,0);
 g_lightsetting_current_pos++;
 }
            
              break;/////////////////////////////////////////////////////////////////////////////////
              
             case 2://3. Ziffer//////////////////////////////////Eingabe Minute Start////////////////
            
              if(g_save_keypad-48 <=5)
                {
                  lcd.print(g_save_keypad);
                  g_minute_start = 10 * (g_save_keypad-48);
                  lcd.setCursor(15,0);
 g_lightsetting_current_pos++;
                }
            
              break;
              
             case 3://4. Ziffer
            
              lcd.print(g_save_keypad);
              g_minute_start = g_minute_start + (g_save_keypad-48);              
              if(g_minute_start<=59) {
 lcd.setCursor(11,1);
 g_lightsetting_current_pos++;
 }
            
              break;/////////////////////////////////////////////////////////////////////////////////
 
             case 4://1. Ziffer///////////////////////////////////////////Eingabe Stunde Stopp////////
            
              if(g_save_keypad-48 <=2)
                {
                  lcd.print(g_save_keypad);
                  g_hour_stopp = 10 * (g_save_keypad-48);
                  lcd.setCursor(12,1);
 g_lightsetting_current_pos++;
                }
            
              break;
              
             case 5://2. Ziffer
              
              lcd.print(g_save_keypad);
              g_hour_stopp = g_hour_stopp + (g_save_keypad-48);  
              if(g_hour_stopp<=24) {
 lcd.setCursor(14,1);
 g_lightsetting_current_pos++;
 }
            
              break;/////////////////////////////////////////////////////////////////////////////////
              
             case 6://3. Ziffer//////////////////////////////////Eingabe Minute Stopp////////////////
            
              if(g_save_keypad-48 <=5)
                {
                  lcd.print(g_save_keypad);
                  g_minute_stopp = 10 * (g_save_keypad-48);
                  lcd.setCursor(15,1);
 g_lightsetting_current_pos++;
                }
            
              break;
              
             case 7://4. Ziffer              
              lcd.print(g_save_keypad);
              g_minute_stopp = g_minute_stopp + (g_save_keypad-48);              
              if(g_minute_stopp<=59) {
 lcd.setCursor(11,2);
 g_lightsetting_current_pos++;
 }
            
              break;/////////////////////////////////////////////////////////////////////////////////

 default: break;
          
             }  


}



if(g_lightsetting_current_pos >= 8)
{
// Damit das lcd nicht zuschnell blinkt
if(LCDML.Timer(g_timer_1, 1000))
{
lcd.print("OK!");
Serial.println(g_hour_start);
Serial.println(g_minute_start);
}

// Abbruch erst erlauben, wenn die 8 Ziffern eingegeben wurden
/* end function for callback */
 if(LCDML.FuncEnd(0, 1, 1, 1, 1, 1))  /* (direct, up, down, left, right) */
 {
lcd.noBlink();
 }
}
}

Ich konnte den Code nicht testen, daher sind vermutlich noch kleine Fehler drin. Die While Schleife hab ich entfernt, da sie nicht mehr benötigt wird.

Im Normalfall sollte man mit Quit die Funktion trotz Zahleneingabe verlassen können.
45  International / Deutsch / Re: Projekt: LCDMenuLib - LCD Menü mit mehreren Ebenen (4Bit/I2C/ShiftReg/...) on: January 02, 2014, 05:38:19 am
Hi,
diese Funktionalität wird so leider nicht unterstützt. Man kann sich alles selber so schreiben und anpassen, aber da es jeder dann anders haben will ist das so nicht vorgesehen und auch mit einigem Arbeitsaufwand verbunden.
Pages: 1 2 [3] 4 5 ... 39