Go Down

Topic: Zähler 0000 - 9999 (Read 1 time) previous topic - next topic

nelson32

Hallo,
ich bin am Verzweifeln!!!
So erst mal zu dem Problem,
Ich habe ein Code-pad mit den zahlen 0-9 und zwei Led´s eine grüne und eine rote.
Von dem Pad kann man den Stecker abziehen und das sind 13 Anschlüsse.
1er für jede zahl + 2 für die Led´s + Masse und Plus
Ich habe den 4-Stelligen Code von dem Code-pad vergessen!!!
Ich würde gerne mit dem Arduino ein Programm erstellen in dem er die ganzen Codes von
0000-9999 durch geht und wenn die grüne Led leuchtet auf hört und sie im Serial Monitor ausgibt
Das wäre ja dann 0000,0001,0002,0003,0004,0005,0006…9999
Mfg Nelson32

Klaus_ww

Prima, dann mach das doch.

uwefed


Hallo,
ich bin am Verzweifeln!!!
So erst mal zu dem Problem,
Ich habe ein Code-pad mit den zahlen 0-9 und zwei Led´s eine grüne und eine rote.
Von dem Pad kann man den Stecker abziehen und das sind 13 Anschlüsse.
1er für jede zahl + 2 für die Led´s + Masse und Plus
Ich habe den 4-Stelligen Code von dem Code-pad vergessen!!!
Ich würde gerne mit dem Arduino ein Programm erstellen in dem er die ganzen Codes von
0000-9999 durch geht und wenn die grüne Led leuchtet auf hört und sie im Serial Monitor ausgibt
Das wäre ja dann 0000,0001,0002,0003,0004,0005,0006…9999
Mfg Nelson32


Bitte mehr info.
Hast du eine Beschreibung oder ein Foto des Code-pad und die genaue Modellbezeichnung.

Grüße Uwe

nelson32

Eigentlich benötige ich hilfe, bei dem Programm welches die Ausgabe der Codes ermöglicht. Ich habe bereits einen Versuch gemacht, dieses Programm ermöglich die Ausgabe von 0000 bis 0009. Ich weis jedoch nicht wie ich jetzt weitermachen muss, damit sich die Codes 0010 bis 0099 ergeben.

Quote
int I0 = 22;
int I1 = 24;
int I2 = 26;
int I3 = 28;
int I4 = 30;
int I5 = 32;
int I6 = 34;
int I7 = 36;
int I8 = 38;
int I9 = 40;


void setup()
{
pinMode(22,OUTPUT);
pinMode(24,OUTPUT);
pinMode(26,OUTPUT);
pinMode(28,OUTPUT);
pinMode(30,OUTPUT);
pinMode(32,OUTPUT);
pinMode(34,OUTPUT);
pinMode(36,OUTPUT);
pinMode(38,OUTPUT);
pinMode(40,OUTPUT);

}
void loop()
{
  int a = 22;
  int b = 22;
  int c = 22;
  int d = 22;
  for (d=22; d<41; d=d+2)
  {
    digitalWrite(a,HIGH);
    delay(10);
    digitalWrite(a,LOW);
    delay(500);
    digitalWrite(b,HIGH);
    delay(10);
    digitalWrite(b,LOW);
    delay(500);
    digitalWrite(c,HIGH);
    delay(10);
    digitalWrite(c,LOW);
    delay(500);
    digitalWrite(d,HIGH);
    delay(10);
    digitalWrite(d,LOW);
    delay(500);
  }
}


Vielen Dank für die schnelle Antwort ;)

Mfg Nelson32

uwefed

Wenn wir nicht wissen wie die Zahlen übertragen werden müssen, können wir Dir auch nicht sagen, wie der Sketch sein muß.
GrüßeUwe

Klaus_ww

Vorschlag: Zähler hochlaufen lassen und binär ausgeben lassen. Wär das was?

dertester

Ich weiß nicht inwiefern das hier auch erlaubt ist, weil ggf. könntest du ja auch etwas illegales damit anstellen  ;)

Ich würd einfach ne Zahl von 0-9999 laufen lassen.

die ersten 3 "0" kannste ne einfache if abfrage machen wenn die zahl < 10 ist,die ersten zwei nullen wenn zahl < 100 usw.

Dann schaust du dir die jeweilige Stelle der zahl an und machst dafür einfach ne if abfrage mit der jeweiligen Aktion.

Das findest du hier z.b.:
http://arduino.cc/forum/index.php/topic,137708.msg1034875.html#msg1034875

==========

Mal am Rande: Bist du sicher, dass es keine "Lock"-funktion gibt, wenn das Ding zuviele Falsch-Eingaben hat?

J3RE

#7
Feb 17, 2013, 09:20 pm Last Edit: Feb 17, 2013, 09:25 pm by J3RE Reason: 1
ich würde auch eine dezimale Zahl hochlaufen lassen bis 9999.
Dann einfach die einzelnen Stellen abfragen.
z.B. so:
Code: [Select]
tausenderStelle = code / 1000;
hunderterStelle = (code - tausenderStelle * 1000) / 100;
zehnerStelle = (code - tausenderStelle * 1000 - hunderterStelle * 100) / 10;
einerStelle = code - tausenderStelle * 1000 - hunderterStelle * 100 - zehnerStelle * 10;
code++;


die Nachkommastellen werden einfach weckgelassen, wenn man die Variablen als integer definiert.

Grüße,
J3RE

nelson32



Die 10 LED´s sind für die Zahlen von 0 bis 9, sie simulieren quasi die Zahlen des Nummernpads. Bei 0001 soll 3 mal die erste LED blinken und danach 1 mal die Zweite. Bei 3791 müsste dann 1 mal die vierte danach 1 mal die achte dann die zehnte und dann 1 mal die zweite.

Led´s   |  Zahlen
1              0
2              1
3              2
4              3
5              4
6              5
7              6
8              7
9              8
10            9


Mfg Nelson32

J3RE

Ungefähr so sollte es funktionieren

Code: [Select]
  stelle[3] = code / 1000;
  stelle[2] = (code - stelle[3] * 1000) / 100;
  stelle[1] = (code - stelle[3] * 1000 - stelle[2] * 100) / 10;
  stelle[0] = code - stelle[3] * 1000 - stelle[2] * 100 - stelle[1] * 10;

  for(int i = 3; i >= 0; i--){
    switch(stelle[i]){
      case 0:
        // 0-Taste drücken
        break;
      case 1:
        // 1-Taste drücken 
        break;
      case 2:
        // 2-Taste drücken
        break; 
      case 3:
        // 3-Taste drücken
        break;
      case 4:
        // 4-Taste drücken
        break; 
      case 5:
        // 5-Taste drücken
        break; 
      case 6:
        // 6-Taste drücken
        break;
      case 7:
        // 7-Taste drücken
        break;
      case 8:
        // 8-Taste drücken
        break;
      case 9:
        // 9-Taste drücken
        break;
    }
   
  }   
 
  if(codeRichtig){
    Serial.println(code); // richtigen Code ausgeben
    while(1); // nichts mehr tun
  } 
 
  code++;

mwyraz

Achso, jetzt ergibt es Sinn :-)

Es wird übersichtlicher, wenn Du das Problem in Teilprobleme zerlegst:
1. Die einzelnen Ziffern ermitteln.Das hat J3RE schon beschrieben.

Alternativ machst Du 4 Zähler, zählst den 1. hoch, wenn der >9 ist, setzt du ihn auf 0 und zählst den 2. eins höher usw. bis der 4. zähler > 9 ist.

2. Die Ziffern senden. z.B. als  Funktion(en).

const int ziffernZuPins[]= {22,24,26,28,30,32,34,36,38,40};

void zifferAn(int ziffer) {
 for (int i=0;i<=9;i++) {
   digitalWrite(ziffernZuPins,(i==ziffer)?HIGH:LOW);
 }
}
boolean sendeSequenz(int ziffer1,int ziffer2,int ziffer3,int ziffer4) {
 zifferAn(-1); // alle aus
 delay(10);
 zifferAn(ziffer1);
 delay(10);
 zifferAn(-1); // alle aus
 zifferAn(ziffer2);
 delay(10);
 zifferAn(-1); // alle aus
 zifferAn(ziffer3);
 delay(10);
 zifferAn(-1); // alle aus
 zifferAn(ziffer4);
 delay(10);
 return pruefeErgebnis();
}

@dertester - mit so ziemlich jeden Sketch kann man was Illegales machen bzw. hineininterpretieren. Beispiel: Wie schreibe ich einen Sketch, der eine Zeit zurückzählt und nach Ablauf oder wenn jemand eine falsch Signalleitung entfernt, zündet ääähm einen Pin  auf 1 setzt ;-)

nelson32

Erstmal vielen Dank für die zahlreiche Hilfe,

aber entwerde ich bin zumüde oder zu dumm

aber versteh grad nur bahnhof

kann mir mal jemand den gnazen skript schreiben ich raff ja grad garnix mehr  :smiley-eek:

Mfg Nelson32

Go Up