Go Down

Topic: Einsteiger benötigt Hilfe (Read 2 times) previous topic - next topic

michael_x

Ja, das war auch mein intuitives Gefühl:
   99,5 % Treffer ist zu wenig bei Uwe.

Und Danke, dass ich hier den Rechthaber spielen darf. Zuhause gibt's immer Streit, wer der größere Rechthaber ist
:smiley-roll:


dischneider

und wir vertrauen jedem Post von dir, Uwe!
Wir bauen auf dich!

Dirk
using arduino leonardo
--
tomorrow today will only be yesterday, so live your life today!

Thorben

#22
Feb 06, 2013, 11:41 pm Last Edit: Feb 06, 2013, 11:42 pm by Thorben Reason: 1
Also, ich habe jetzt ein wenig rum probiert und folgendes kam dabei heraus:

Code: [Select]
int fin[]  = {0,1,2,3,4,5,6,7,8,9,10,11};
int chan[] = {A0, A1, A2, A3};
int led    = 13;

void setup()
{
  for(int i = 0 ; i <=11 ; i++)
  {
    pinMode(fin[i], INPUT_PULLUP);
    pinMode(chan[i], INPUT_PULLUP);
  }
  pinMode(led, OUTPUT);
  Keyboard.begin();
  Serial.begin(9600);
}

#define CHARBUTTONS 12
#define MODIFIERBUTTONS 4

char charTable[MODIFIERBUTTONS+1][CHARBUTTONS]={
    {'a','b','c','d','e','f','g','h','i','j','k','l'},
    {'m','n','o','p','q','r','s','t','u','v','w','x'},
    {'y','z','!','%','&','/','(',')','=','?','.',','},
    {'1','2','3','4','5','6','7','8','9','0','+','-'}
    };


int readCharButton()
{
  for(int j = 0 ; j<=11 ; j++)
  {
    if(digitalRead(fin[j]) == LOW)
    {
      return j;
    }
    else
    {
      return -1;
    }
  }
}


int readModifierButton()
{
  for(int i = 0 ; i <= 3 ; i++)
  {
    if(digitalRead(chan[i]) == LOW)
    {
      return i;
    }
    else
    {
      return 0;
    }
  }
}

   
void fireButton(int charBtn, int modifierBtn)
{
  Keyboard.press(charTable[modifierBtn][charBtn]);
  Serial.println(charTable[modifierBtn][charBtn]);
}

void loop()
{
  int charButton,modifierButton;
  charButton=readCharButton();
  if (charButton>=0)
  {
    modifierButton=readModifierButton();
    fireButton(charButton,modifierButton);
  }
  else
  {
    Keyboard.releaseAll();
  }
}


Mir selbst fallen am laufenden Band Fehler auf und ich weiß, es ist nicht sonderlich gut. Ich habe da nur ein Problem: die einzige belegte "Taste", scheint der Pin 0 zu sein, denn egal was ich sonst ground'e, es passiert nichts. Auch nicht bei den ModifierTasten. Es ist grade ca. 23.20 und mir fällt einfach nicht auf wo der Fehler ist. Ist es ein einfacher, fast schon doofer Fehler, der einem quasi mit Neonroter Farbe in Gesicht springt? Mir fällt der Fehler einfach nicht auf..
Und sorry, das ich die ganze Zeit Nerve   :smiley-sweat:

uwefed

Code: [Select]
int readCharButton()
{
  for(int j = 0 ; j<=11 ; j++)
  {
    if(digitalRead(fin[j]) == LOW)
    {
      return j;
    }
    else
    {
      return -1;
    }
  }}

Du kontrollierst das erste Pin und springst dann auf jeden Fall mit 0 oder -1 heraus. Die for Schleife wird nicht durchlaufen.
Du mußt die ganze for Schleife durchlaufen lassen und nur im Fall, daß keine Taste gedrückt ist, mit -1 zurückspringen.

Diese Code findet bei mehreren gedrückten Tasten nur die am niedrigrsten Pin angeschlossenen.
Code: [Select]
int readCharButton()
{
  for(int j = 0 ; j<=11 ; j++)
  {
    if(digitalRead(fin[j]) == LOW)
    {
      return j;
    }
  }
return -1;
}


Grüße Uwe

mkl0815

Bei der Funktion int readModifierButton() hast Du das gleiche Problem. Bei solchen Fehlern hilft es meistens, wenn man versucht Schritt für Schritt die problematische Funktion durchzugehen und alle einzelnen Programmschritte nachzuvollziehen, dann merkt man häufig shon, wo der Fehler liegt.

Code: [Select]

int readModifierButton()
{
  for(int i = 0 ; i <= 3 ; i++)
  {
    if(digitalRead(chan[i]) == LOW)
    {
      return i;
    }
    else
    {
      return 0;
    }
  }
}



Code: [Select]

int readModifierButton()
{
  for(int i = 0 ; i <= 3 ; i++)
  {
    if(digitalRead(chan[i]) == LOW)
    {
      return i;
    }
  }
  return 0;

}

Go Up