INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino LCD Menü Rotary und Settings im Untermenü setzen?
05.08.2014, 10:40
Beitrag #9
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
Hallo Wampo,

vorab: ich denke nicht, dass man zwei verschiedene Themen (auch wenn sie verwandt sind) in einem Thread laufen lassen sollte.

auch wenn ich keine Ahnung davon habe wie der Encoder funktioniert ist mir folgendes aufgefallen:
1. Im ersten Teil (Rotary-Menü) bist du ja offensicht soweit gekommen, dass die Menüsteuerung über den Encoder funktioniert. Je nach Bewegung des Encoder wird also (grob gesagt) im Menü navigiert
2.Im zweiten Teil (Rotaray-Array-Element-Auswahl) benutzt du jedoch eine völlig andere Methode um den Encoder abzufragen. Warum das?
Meine Frage: Warum benutzt du nicht die Encoder-Abfrage aus dem 1. Teil und hängst daran die Auswahl des Array-Elementes anstatt der Menüfunktionen Huh
Die Array-Element-Auswahl machst du mit einer Laufvariablen die, je nach Encoder Bewegung verringert oder erhöht wird. Die Variable liegt min. bei 0 und max. bei Anzahl der Array-Elemente. Wenn die nächste Erhöhung die Anzahl der Array-Elemente übersteigen würde, setzt du die Variable wieder auf 0 (Rollover).
Über Array[Laufvariable] kommst du dann an das aktuelle Element.
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 17:59
Beitrag #10
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
Ich wollte nur keinen neuen Beitrag verfassen, der Code um den es jetzt geht hat nix mit dem anderen zu tun, es ist sozusagen ein Standalone Trigger für einen Sensor.

Ok das mit der Laufzeitvariablen hab ich kapiert, jedoch kann ich mir echt nicht ausmalen wie der code dafür aussehen muss.
Die Laufvariable hab ich schon probiert allerdings scheitert es immer am gleichen, wenn ich i++ bzw i+=1 benutze und eine abfrage mache z.b. if decoder >> decoderalt dann i++, allerdings fängt dann mein array an hochzuzählen bis nonstop, für ne stopuhr wäre das vielleicht sinnvoll.

Wie gesagt ich weiß ums verrecken nicht wie ich immer nur um 1 erhöhe und bei ende Array wieder auf 1 bzw 0 spring.

P.S. Ich werde den alten RotaryCode aber wieder benutzen den ich hatte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 18:37
Beitrag #11
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
(04.08.2014 19:38)Wampo schrieb:  ...

Wie kann ich das bewerkstelligen. Ich habe schon mit i++ rumprobiert, laststate do while alles, ich weiss nicht wie das geht.

und das da...
Code:
char zbuff;          // Eingabe Zeichenpuffer
String command = ""; // GesamtString von SerialRead
const byte felder = 9;

unsigned int light[felder] ={1000, 5000, 10000, 15000, 20000, 30000, 40000, 50000, 60000};
byte i;

//----------------------
// Setup
//----------------------
void setup()
{
  Serial.begin(9600);
  Serial.println("START");   // BEREIT Meldung...
}

//----------------------
// Loop
//----------------------
void loop()
{
    command = "";
    while (Serial.available() > 0)
    {
    zbuff = Serial.read();
    delay(10);     // ohne delay werden nur einzelne Zeichen gelesen
    Serial.print(zbuff);
    command.concat(zbuff);
    }
//    if(command != "")Serial.print("  <= Zeichenecho der Eingabe");
  
  if(command != ""){      // wenn Zeichen im String dann auswerten
    Serial.println("");   // Zeilenvorschub
    i = byte(zbuff);      // Character in Byte wandeln
    i = i - 48;           // ASCII Zahlenwert von "0" abziehen
    if(i >= felder-1)i = felder -1;  // Begrenzung Index
    Serial.println(i);    // Bytewert als Zahl ausgeben
    
    Serial.println(light[i]);  // indizierten Array Wert ausgeben
    }  // Ende if command != ""
}

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 19:11 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2014 20:17 von rkuehle.)
Beitrag #12
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
Test the west:
Code:
// Variablen
volatile boolean fired;
volatile boolean up;
const uint8_t to_Count = 5; //Anzahl Elemente in TO
unsigned int TO[to_Count] = {1000, 5000, 10000, 15000, 20000};
unsigned int to_Element = 0; // aktuelles Element von TO
long rotaryCount = 0;
#define PINA 2
#define PINB 3
#define INTERRUPT 0  // Interrupt auf Pin 2
void setup ()
{
  digitalWrite (PINA, HIGH);
  digitalWrite (PINB, HIGH);
  attachInterrupt (INTERRUPT, isr, CHANGE);
}
void loop ()
{
   if (fired)
  {
    if (up)
    {
      rotaryCount++;
      if (rotaryCount > to_Count) rotaryCount = 0;
    }
    else
    {
      rotaryCount--;
      if (rotaryCount < 0) rotaryCount = to_Count;
    }
    fired = false;
  }
  to_Element = TO[rotaryCount];
  Serial.print(F("Ausgewaehltes Arrayelement: "));
  Serial.println(to_Element);
}
// ISR für Pin 2
void isr ()
{
  if (digitalRead (PINA))
    up = digitalRead (PINB);
  else
    up = !digitalRead (PINB);
  fired = true;
}
Grüße Ricardo
-----------------------------------
Edit: Code nach Hinweis von BK korrgiert!

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 19:28
Beitrag #13
Thumbs Up RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
Meine Herren ihr seid die geilsten, damit kann ich was anfangen und ich kann mich reinarbeiten. Solche ansätze habe ich nirgends gefunden. Herzlichen dank.

Weiß jemand zufällig noch ob sich ein Speed Up AnalogRead bei einem UNO, NANO, MEGA bemerkbar macht??

Code:
// Speed up AnalogRead
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 20:04 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2014 20:06 von rkuehle.)
Beitrag #14
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
Ja, sicher hat das Auswirkungen.
Allerdings sollte dann auch der Prescaler runtergezogen werden, sonst passiert mal garnix.
Hintergrund:
Der ADC läuft mit 16 Mhz / 128 (Standardprescaler in wiring.h) also 125 KHz. Da eine Wertekonvertierung 13 ADC Cyclen dauert kommst du damit auf eine Samplerate von 9600 Hz. Setzt du den Prescaler runter auf 16 mit:
Code:
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
läuft der ADC mit 1 Mhz und ca. 77 KHz Samplingrate. Der Verlust der Auflösung ist dabei jedoch gering.
A-BärExclamationExclamationExclamation:
Das bringt dir natürlich alles nix wenn du so Funktionen wie analog- oder digitalRead/Write benutzt.
Auch hier der Hintergrund:
Diese Funktionen machen viel Zeugs wie Umwandeln von der angebenen Pinnummer in den realen Port und Pin des Atmega. bei digital-Funktionen wird evtl. laufendes PWM temporär abgeschaltet, bei analog-Funktionen irgendwelche Referenzbits gesetzt und erst dann kommt das Lesen/Schreiben der Pins.
Naja das macht die Arduinosprache zwar recht verdaulich,dauert aber halt alles.
Lange Rede kurzer Sinn:
Wenn du den Speedup (wenigstens annähernd) ausnutzen möchtest, musst du mit Portmanipulation arbeiten.
Guckst du hier: http://www.arduino.cc/en/Reference/PortManipulation und hier: http://hekilledmywire.wordpress.com/2011...al-part-3/
Hope it helps!

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 20:04
Beitrag #15
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
(05.08.2014 19:11)rkuehle schrieb:  Test the west:
Code:
// Variablen
volatile boolean fired;
volatile boolean up;
const uint8_t to_Count = 5; //Anzahl Elemente in TO
unsigned int TO[to_Count] = {1000, 5000, 10000, 15000, 20000};
unsigned int to_Element = 0; // aktuelles Element von TO
#define PINA 2
#define PINB 3
#define INTERRUPT 0  // Interrupt auf Pin 2
void setup ()
{
  digitalWrite (PINA, HIGH);
  digitalWrite (PINB, HIGH);
  attachInterrupt (INTERRUPT, isr, CHANGE);
}
void loop ()
{
  static long rotaryCount = 0;
  if (fired)
  {
    if (up)
    {
      rotaryCount++;
      if (rotaryCount > to_Count) rotaryCount = 0;
    }
    else
    {
      rotaryCount--;
      if (rotaryCount < 0) rotaryCount = to_Count;
    }
    fired = false;
  }
  to_Element = TO[rotaryCount];
  Serial.print(F("Ausgewaehltes Arrayelement: "));
  Serial.println(to_Element);
}
// ISR für Pin 2
void isr ()
{
  if (digitalRead (PINA))
    up = digitalRead (PINB);
  else
    up = !digitalRead (PINB);
  fired = true;
}
Grüße Ricardo

Hi Ricardo,
hast du diese Encoder Routine auch schon auf Kontaktprellen getestet ?
Und warum setzt du rotaryCount bei jedem Programmdurchlauf am Anfang auf 0 ?
Gehört das nicht in den Setup Abschnitt ?
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.08.2014, 20:08 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2014 20:12 von rkuehle.)
Beitrag #16
RE: Arduino LCD Menü Rotary und Settings im Untermenü setzen?
Hallo bk,

völlig richtig. ich korrigere den Code noch. Habe selber so ein Encoder nicht da, daher kein Test gemacht. Nun die Entprellerei muss dann Wampoo machen Smile
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Menü über Bluetooth Eingabe abwarten anwo 4 503 18.10.2016 08:59
Letzter Beitrag: Lolliball
  Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ? arduinofan 3 438 01.02.2016 20:10
Letzter Beitrag: arduinofan
  Rotary Encoder - Anschließen King2k7 10 1.145 18.01.2016 12:38
Letzter Beitrag: hotsystems
  image menu navi für mega2560 mit tft-lcd ArduTux 3 412 16.01.2016 15:52
Letzter Beitrag: arduinofan
  Serial Menü futti0 8 1.112 25.12.2015 19:54
Letzter Beitrag: hotsystems
  Pins setzen und auslesen im Yun mit FreeBasic arduinofan 3 555 08.12.2015 15:03
Letzter Beitrag: manau21
  Hilfe für Grafikfunktion Setzen jgrothe 5 767 19.06.2015 14:23
Letzter Beitrag: torsten_156
  Rotary Encoder zählt nicht Rückwerts elmo 8 2.180 20.05.2015 20:05
Letzter Beitrag: elmo
  Einen hochzählenden Wert auf null setzen - wie macht man das? Gelegenheitsbastler 6 1.323 16.05.2015 16:18
Letzter Beitrag: Gelegenheitsbastler
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.113 05.05.2015 13:40
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste