Forum: Mikrocontroller und Digitale Elektronik Brute Force mit dem Arduino


von Wer B. (Gast)


Lesenswert?

Hallo,

Ich würde gerne ein Brute Force Programm für meinen Arduino schreiben.

Er soll einen 4-Stelligen Code knacken.

Zahl: Von 0000-9999.

Es reicht nicht, nur 1 in den Seriellen Monitor zu schreiben, sondern 
0001 müsste es sein.

Ich würde im Nachhinein gerne die Methode in Ziffern unterteilen, so das 
er bei 1234 schreibt:

4312 6583 9372 8482 (bsp.)

Die Zahlen von 0-9 werde ich vorher definieren.

Meine Frage nun:

Wie schreib ich so ein Programm :D

Wenn einer einen ähnlichen Beitrag kennt, ich würde mich über einen Link 
freuen.

Vielen Dank fürs durchlesen schonmal

Grüße Simon.Sp

PS: Ich bitte nicht um ein ganze Programm, sonder bsp um eine "Funktion" 
um dies einfach zu realisieren.

von Finn S. (scooter757)


Lesenswert?

Hast du schonmal deinen Arduino programmiert?? Vielleicht solltest du 
erst einmal eine Led zum Blinken bekommen, dann mal einen Taster 
einlesen und dann was über Serial.print() ausgeben.
Wenn das alles funktioniert und du ein bisschen Übung hast kannst du 
nochmal fragen und etwas detaillierter sein.

Auch Schleifen (insbesondere eine for-Schleife) solltest du dir auch mal 
angucken..

Simon S. schrieb:
> Ich würde im Nachhinein gerne die Methode in Ziffern unterteilen, so das
> er bei 1234 schreibt:
>
> 4312 6583 9372 8482 (bsp.)

Das verstehe ich nicht. Soll er die Zahlen zufällig ausgeben?

Finn

von Wer B. (Gast)


Lesenswert?

Finn S. schrieb:
> Hast du schonmal deinen Arduino programmiert?? Vielleicht solltest du
> erst einmal eine Led zum Blinken bekommen, dann mal einen Taster
> einlesen und dann was über Serial.print() ausgeben.
> Wenn das alles funktioniert und du ein bisschen Übung hast kannst du
> nochmal fragen und etwas detaillierter sein.
>
> Auch Schleifen (insbesondere eine for-Schleife) solltest du dir auch mal
> angucken..
>
> Simon S. schrieb:
>> Ich würde im Nachhinein gerne die Methode in Ziffern unterteilen, so das
>> er bei 1234 schreibt:
>>
>> 4312 6583 9372 8482 (bsp.)
>
> Das verstehe ich nicht. Soll er die Zahlen zufällig ausgeben?
>
> Finn

Oh man...

Ich hab nicht gefragt wie ich die Serial.print Funktion nutze.

Der Tipp mit der for-Schleife war gut, nur bei meinem Programm nicht 
praktikabel.

Die zahlen sollen nicht zufällig sein, die definier ich vorher. (s.o.)

Nur mal so:
Wer andere so korrigiert und meint ein auf oberschlau zu machen und dann 
sowas fragt...

Naja, da ich ja hilfe von dir brauch werd ich weiter freundlich bleiben.

von Wer B. (Gast)


Lesenswert?

Zu der for-Schleife:

Es ust meines Erachtens nicht möglich mit ihr einen Wert von 0 bis 9999 
verändern im 0001 Formart.

Oder ?
(Neugier, nicht Vorwurf, bevor das wieder kommt)

von Pandur S. (jetztnicht)


Lesenswert?

> Vielen Dank fürs durchlesen schonmal

Bitte.
Leider kam ueberhaupt nicht durch, was das soll.
Was soll gemacht werden ?
Die Zahlen 0000 .. 9999 ausgeben ?

eher nicht, etwas trivial

von Realist (Gast)


Lesenswert?

Simon S. schrieb:
> Naja, da ich ja hilfe von dir brauch werd ich weiter freundlich bleiben.

Und du denkst jetzt, da kommt noch was von hier, was dir nützlich sein 
könnte?

Dann träum mal weiter.

Simon S. schrieb:


> Oh man...

von Dr. Sommer (Gast)


Lesenswert?

Simon S. schrieb:
> Es ust meines Erachtens nicht möglich mit ihr einen Wert von 0 bis 9999
> verändern im 0001 Formart.

Doch, selbstverständlich. Du zählst ganz normal 0 bis 9999, und bei der 
Ausgabe mit Serial.println lässt du dir halt führende Nullen mit 
ausgeben.

Simon S. schrieb:
> Ich hab nicht gefragt wie ich die Serial.print Funktion nutze.

Genau das ist aber dein Problem.

von Philipp L. (philipp_l89)


Lesenswert?

Simon S. schrieb:
> Es ust meines Erachtens nicht möglich mit ihr einen Wert von 0 bis 9999
> verändern im 0001 Formart.

formaRt dürfte wohl eher in die Richtung 3D Drucker gehen! Schönes 
Wortspiel.

Desweiteren ist Deine Beschreibung sehr dürftig.

Was soll das 0001 Format sein?

Erster Schleifendurchlauf: 0001
Zweiter:                   0002
...
Elfter:                    0011

Oder wie? Und wenn jetzt "ja" kommt, dann solltest Du Dir doch mal 
gaaanz dringend aneignen Strings zu formatieren und sie mit der "ICH 
WEISZ WIE SIE GEHT"-Serial.Print senden!

von Planlos (Gast)


Lesenswert?

Simon S. schrieb:
> Die zahlen sollen nicht zufällig sein, die definier ich vorher.

Also, definier die Reihenfolge.
Schreibe vor jede Zahl in deiner definierten Reihenfolge ein
>  Serial.println("
und nach jede Zahl ein
> ");
Fertig:
1
Serial.println("4312");
2
Serial.println("6583");
3
Serial.println("9372");
4
Serial.println("8482");


Schöner:

definiere eine Funktion 'Position -> Code' (als Array-Lookup oder 
Berechnungsanweisung oder Zufallsgenerator oder GUI-Prompt mit 
User-Interaktion, ...)
und dann
1
for (int i=0 ; i <10000; ++i) {
2
  Serial.println(geheimeReihenfolgenFunktion(i));
3
}

von Peter D. (peda)


Lesenswert?

Was für ein Gerät willst Du denn knacken?
Läßt das Gerät Brute Force überhaupt zu.
Viele Geräte machen nach 3 Fehleingaben erstmal ne lange Pause oder 
verlangen den Master-Key.

Wenn Du nur 4 Ziffern senden willst, wo ist dabei Dein Problem?

von Anfänger (Gast)


Lesenswert?

mach halt eine bitverknüpfung -> bitweise oder

i=0;
if(i<1)
{
 wert = 0000 | i;
 i = i+1;
}
serial.print(wert);

von Wer B. (Gast)


Lesenswert?

Die Zahl 11 soll im Format 0011 geschrieben werden.

Und jeder ziffer soll für sich stehen

Also:
0011=
Ziffer1=0
Ziffer2=0
Ziffer3=1
Ziffer4=1

von Bernd K. (prof7bit)


Lesenswert?

Simon S. schrieb:
> Oh man...
>
> Ich hab nicht gefragt wie ich die Serial.print Funktion nutze.

Bleib mal locker.

Es kann einem unglaubliche Geduld abverlangen einem Anfänger ein für 
dessen Wissensstand im Moment noch relativ komplexes und schwieriges 
Thema zu erklären.

Dein Eröffnungsposting zeigt daß Du ein blutiger Anfänger bist und in 
dem Moment haben schon 90% der Leute weitergklickt weil sie heute oder 
diese Woche oder generell einfach nicht die Nerven und die Geduld 
aufbringen können oder wollen einem blutigen Anfänger alles von Adam und 
Eva aufwärts zu erklären.

Übrig bleiben vielleicht 10% die dazu dennoch bereit sind und die die 
anstrengende Arbeit mit einem Anfänger nicht abschreckt.

Jedoch ist Dein Tonfall schon im zweiten Posting geeignet auch diese 
letzten unerschrockenen 10% noch zu vertreiben. Immerhin wird niemand 
dafür bezahlt Dir zu helfen und sich dann zur Belohnung noch blöd 
anschnauzen zu lassen.

Denk mal drüber nach.

von Wer B. (Gast)


Lesenswert?

Peter D. schrieb:
> Was für ein Gerät willst Du denn knacken?
> Läßt das Gerät Brute Force überhaupt zu.
> Viele Geräte machen nach 3 Fehleingaben erstmal ne lange Pause oder
> verlangen den Master-Key.
>
> Wenn Du nur 4 Ziffern senden willst, wo ist dabei Dein Problem?

Ich will die Zahl 0000-9999 senden.

Gerät existiert nicht.

Geht erstmal ums reine "knacken" am Serial Monitor.

von Planlos (Gast)


Lesenswert?

Simon S. schrieb:
> Die Zahl 11 soll im Format 0011 geschrieben werden.
1
char Ziffer[5];
2
int i=11; // or whatever
3
snprintf(Ziffer,5,"%04d",i);
4
5
// falls wirklich gewollt:
6
char Ziffer0=Ziffer[0];
7
char Ziffer1=Ziffer[1];
8
...

von hrmpf (Gast)


Lesenswert?

Anfänger schrieb:
> mach halt eine bitverknüpfung -> bitweise oder
> i=0;
> if(i<1)
> {
>  wert = 0000 | i;
>  i = i+1;
> }
> serial.print(wert);

Dein Nickname beschreibt sehr gut deinen Kenntnisstand: das Programm 
klappt so auf keinen Fall. Auch für dich gilt: Format-Funktionen und 
(for-) Schleifen ansehen!

von Wer B. (Gast)


Lesenswert?

Bernd K. schrieb:
> Simon S. schrieb:
>> Oh man...
>>
>> Ich hab nicht gefragt wie ich die Serial.print Funktion nutze.
>
> Bleib mal locker.
>
> Es kann einem unglaubliche Geduld abverlangen einem Anfänger ein für
> dessen Wissensstand im Moment noch relativ komplexes und schwieriges
> Thema zu erklären.
>
> Übrig bleiben vielleicht 10% die dazu dennoch bereit sind und die die
> anstrengende Arbeit mit einem Anfänger nicht abschreckt.
>
> Jedoch ist Dein Tonfall schon im zweiten Posting geeignet auch diese
> letzten unerschrockenen 10% noch zu vertreiben. Immerhin wird niemand
> dafür bezahlt Dir zu helfen und sich dann zur Belohnung noch blöd
> anschnauzen zu lassen.
>
> Denk mal drüber nach.

Ich respektiere jeden und freue mich sehr über die 10%.

Jedoch muss selbst als blutiger Anfänger mir nicht anhören müssen das 
ich erstmal lernen soll Leds anzusteuern.

von Herbert (Gast)


Lesenswert?

Simon S. schrieb:
> Die Zahl 11 soll im Format 0011 geschrieben werden.
>
> Und jeder ziffer soll für sich stehen

Lies die scheiss Dokumentation von serial.println !
Das steht drin wie man von einer Dezimalzahl 4 Stellen erzwingt. Ist 
ganz einfach aber du musst es eben lesen.

von Wer B. (Gast)


Lesenswert?

Also ich erkläre nochmal:

Der Arduino soll eine Zahl von 0000-9999 senden.

Also 1000 durchläufe:

Wenn also die zahl bspw. 0123 ist, soll er aus 0123 0 1 2 3 machen.

Dann für 0 9482 einsetzen
Für 1 0573
Für 2 4939
und für 3 4938

von Peter D. (peda)


Lesenswert?

Simon S. schrieb:
> Also:
> 0011=
> Ziffer1=0
> Ziffer2=0
> Ziffer3=1
> Ziffer4=1

Wozu auch immer:
1
  int16_t zahl;
2
  uint8_t ziffer[4];
3
  for( zahl = 0; zahl < 10000; zahl++ ){
4
    unit16_t tmp = zahl;
5
    for( int8_t i = 3; i >= 0, i-- ){
6
      ziffer[i] = tmp % 10;
7
      tmp /= 10;
8
      // mache was mit den 4 Ziffern
9
    }
10
  }

von Wer B. (Gast)


Lesenswert?

Herbert schrieb:
> Simon S. schrieb:
>> Die Zahl 11 soll im Format 0011 geschrieben werden.
>>
>> Und jeder ziffer soll für sich stehen
>
> Lies die scheiss Dokumentation von serial.println !
> Das steht drin wie man von einer Dezimalzahl 4 Stellen erzwingt. Ist
> ganz einfach aber du musst es eben lesen.

Das ist ja nur ein kleiner Teil meines Vorhabens, nach dem ich nicht 
einmal gefragt habe.

Aber ernsthaft:
Danke, dann ist das schonmal geklärt.

von chris (Gast)


Lesenswert?

Simon S. schrieb:
> Das ist ja nur ein kleiner Teil meines Vorhabens, nach dem ich nicht
> einmal gefragt habe.

OMG dann sag doch endlich mal klar ausgedrückt was du eigentlich willst?
Ist ja schlimmer als im Kindergarten hier.
Klare Problemstellung --> klare Lösung.
Aber so wie du hier rumlaberst kann dir niemand helfen.

von Wer B. (Gast)


Lesenswert?

Peter D. schrieb:
> Simon S. schrieb:
>> Also:
>> 0011=
>> Ziffer1=0
>> Ziffer2=0
>> Ziffer3=1
>> Ziffer4=1
>
> Wozu auch immer:
>
1
>   int16_t zahl;
2
>   uint8_t ziffer[4];
3
>   for( zahl = 0; zahl < 10000; zahl++ ){
4
>     unit16_t tmp = zahl;
5
>     for( int8_t i = 3; i >= 0, i-- ){
6
>       ziffer[i] = tmp % 10;
7
>       tmp /= 10;
8
>       // mache was mit den 4 Ziffern
9
>     }
10
>   }
11
>

Wozu auch immer...

Das Programm soll später den Jugendschutz am Tv rausmache, indem es den 
Code knackt.

Dazu muss es natürlich bei 0473 auch den entsprechenden IR code für die 
einzelnen Ziffern senden.
(welche ich vorher definiere)

von chris (Gast)


Lesenswert?

Simon S. schrieb:
> Dazu muss es natürlich bei 0473 auch den entsprechenden IR code für die
> einzelnen Ziffern senden.
> (welche ich vorher definiere)

Willst du jetzt Brute Forcen oder weißt du den Code schon?
Drück dich halt mal klar aus...

von Pandur S. (jetztnicht)


Lesenswert?

Wie macht man aus einen Integer (Ganzzahl) einen Character, resp String. 
Ohne Library Funktion.

char function DigitZuChar(u:int) {
 if u==0 { return 0x30; } // = "0"
 if u==1 { return 0x31; } // = "1"
 if u==2 { return 0x32; } // = "2"
 if u==3 { return 0x33; } // = "3"
 if u==4 { return 0x34; } // = "4"
 if u==5 { return 0x35; } // = "5"
 if u==6 { return 0x36; } // = "6"
 if u==7 { return 0x37; } // = "7"
 if u==8 { return 0x38; } // = "8"
 if u==9 { return 0x39; } // = "9"
}

Man sieht es gibt potential zum Vereinfachen.

von mr.confused (Gast)


Lesenswert?

Simon S. schrieb:
> Wenn also die zahl bspw. 0123 ist, soll er aus 0123 0 1 2 3 machen.
>
> Dann für 0 9482 einsetzen
> Für 1 0573
> Für 2 4939
> und für 3 4938

Ich bin nicht der einzige, der absolute keinen Zusammenhang hier erkennt 
oder?

Drück dich mal schlau aus mein Lieber.

Du willst 0000-9999 an einem Serialport ausgeben so das habe ich schon 
mal verstanden.

Du willst aus 1234 4 einzelne Variabeln mit je einer Ziffer haben auch 
das kommt noch einigermassen an.

Aber was danach folgt verstehst nur du, das ist absolute 
zusammenhangslos.

von Wer B. (Gast)


Lesenswert?

chris schrieb:
> Simon S. schrieb:
>> Dazu muss es natürlich bei 0473 auch den entsprechenden IR code für die
>> einzelnen Ziffern senden.
>> (welche ich vorher definiere)
>
> Willst du jetzt Brute Forcen oder weißt du den Code schon?
> Drück dich halt mal klar aus...

? Hab ich doch.

Es reicht ja nicht dem IR Sender zu sage:
Send mal ne 1!

Die 1 steht im IR Signal ja für (bsp) 5457.

Das heißt nur wenn ich 5457 sende versteht der Tv das als würde ich die 
Taste 1 drücken/ eine Ziffer des Codes 1 ist

von Wer B. (Gast)


Lesenswert?

mr.confused schrieb:
> Simon S. schrieb:
>> Wenn also die zahl bspw. 0123 ist, soll er aus 0123 0 1 2 3 machen.
>>
>> Dann für 0 9482 einsetzen
>> Für 1 0573
>> Für 2 4939
>> und für 3 4938
>
> Ich bin nicht der einzige, der absolute keinen Zusammenhang hier erkennt
> oder?
>
> Drück dich mal schlau aus mein Lieber.
>
> Du willst 0000-9999 an einem Serialport ausgeben so das habe ich schon
> mal verstanden.
>
> Du willst aus 1234 4 einzelne Variabeln mit je einer Ziffer haben auch
> das kommt noch einigermassen an.
>
> Aber was danach folgt verstehst nur du, das ist absolute
> zusammenhangslos.

Ok, ich versuche es nochmal.

Er soll ja ne Zahl von 0000-9999 ausgeben.
Soweit so gut.

Jedoch soll er dann hingehen und jede Ziffer ersetzen durch eine 
4-Stellige zahl.

Ich send gleich mal nen Beispiel Sketch den ich aus den Ergebnissen von 
(oben) zusammenbastel.

von Nobody (Gast)


Lesenswert?

Ich greif das Beispiel von Peter auf:
1
int16_t zahl;
2
uint8_t ziffer[4];
3
for( zahl = 0; zahl < 10000; zahl++ ){
4
   unit16_t tmp = zahl;
5
   for( int8_t i = 3; i >= 0, i-- ){
6
      ziffer[i] = tmp % 10;
7
      tmp /= 10;
8
     
9
      switch(tmp):
10
         case 1:
11
            SendIRCode1();
12
            break;
13
         case 2:
14
            SendIRCode2();
15
            break;
16
         //usw.
17
     }
18
   }

Oder eben SendIRCode(tmp) und in der Funktion den entsprechenden Code 
aufdröseln ...

von Max D. (max_d)


Lesenswert?

Machen wir ein Gedankenexperiment:
Dein Programm läuft 100% so wie du es dir erträumst, was genau kommt aus 
dem Serialport raus ?

0001(hier evtl. \r\n ?)
0002
0003
.
.
.
9999
0000
0001
usw ?

Oder was anderes ?
Soll der "User" irgendwie mit dem Gerät interagieren ?

Den Ansatz mit 0 => 9482 versteh ich nicht.
Klingt an sich aber nach nem Job für ne Lookup-Tabelle.

von Oliver S. (oliverso)


Lesenswert?

Er möchte von einem beliebigen vierstelligen Code die vier Stellen 
einzeln nacheinander ausgeben. Erst einmal per Serial, später per 
IR-Code.

Und ja, zunächst mal eine LED blinken lassen ist da tatsächlich ein 
guter Anfang. Ernsthaft.

Oliver

von Planlos (Gast)


Lesenswert?

Aber deine Fernbedienung hat 10 Zifferntasten, die man nacheinander 
drückt, keine 10000, bei dennen man nur einmal drückt, oder?


Also:
1
  for (int a=0; a<10; ++a) 
2
     for (int b=0; b<10; ++b) 
3
        for (int c=0; c<10; ++c) 
4
           for (int d=0; d<10; ++d) {
5
               SendeIRCodeFuerTaste(a);
6
               SendeIRCodeFuerTaste(b);
7
               SendeIRCodeFuerTaste(c);
8
               SendeIRCodeFuerTaste(d);
9
               // Delay/"Enter"-Taste senden etc.
10
            }

von Peter D. (peda)


Lesenswert?

Du willst also einen Code je Ziffer senden.
Das macht man mit einem Array:
1
  uint16_t IR_code[10] = { 1234, 45, 789, 19050 }; // usw.
2
3
void send_ir_ziffer( uint8_t val )
4
{
5
  SendIRCode( IR_code[val] );
6
}

von Reinhard M. (Gast)


Lesenswert?

Simon S. schrieb:
> Das Programm soll später den Jugendschutz am Tv rausmache, indem es den
> Code knackt.

Wenn ich das hier so lese, keine gute Idee.

von Planlos (Gast)


Lesenswert?

Reinhard M. schrieb:
> Wenn ich das hier so lese, keine gute Idee.

Warum? Dann schaut er den ganzen Tag FSK18-Titel und ist beschäftigt.
Das hält ihn von Arduino & Forum fern :)

von As-I-Roved-Out (Gast)


Lesenswert?

Was der Jung vor hat bekommt er nicht in Worte gefasst weil er einfach 
keinen Plan hat.

Bruteforce auf IRDA

also Versuch ich die Zahl "2541" zu  knacken
Da der TV aber nicht "2541" gespeichert hat sondern "2" "5" "4" "1" muss 
er entsprechend diese Zahlen schicken damit die Fernbeidenung oder was 
auch immer aus der "2" den entsprechenden IRDA Code macht.

Soweit, so easy.
Kommt davon wenn man nur Whatsapp schreibt und kein Deutsch mehr 
beherrscht.

Lieber TE - Deine Lösung sind verschachtelte Schleifen die jeweils von 0 
bis 9 zählen und die jeweilige Zahl an irgendwas rausgeben was dir den 
IRDA Code generiert raushauen.
Den IRDA Inhalt kannst du per Lib einbinden, per Tabelle oder wie immer 
es dir beliebt.
Mehr hast du nicht zu tun, mehr ist das Programm nicht

Pseudocode

For 0 bis 9 /* Schleife für die zahl auf Position 1
    For 0 bis 9 /* Schleife für die zahl auf Position 2
     ..
     Bis Position 4
     next
next

Wenn ich Arduino halbwegs richtig im Kopf habe sind das  keinen 20 
Zeilen.

von Wer B. (Gast)


Lesenswert?

/*
BurteForcePreview
*/

int 1= 7685;
int 2= 7245;
int 3= 9275;
int 4= 7628;
int 5= 5482;
int 6= 6347;
int 7= 2168;
int 8= 0134;
int 9= 0458;

setup()
{
  Serial.begin(9600);

  Serial.print("GO);
}


void loop()
{
  for( zahl = 0; zahl < 10000; zahl++ )

  /*
   * Wenn dann die Zahl 5735 ist, soll er
   * (5 = 5482 / 7 = 2168 / 3 = 9275 / 5 = 5482)
   * Serial.print(Zahl5);
   * Serial.print(Zahl7);
   * Serial.print(Zahl3);
   * Serial.print(Zahl5);
   */
}

Und im Serial-Monitor steht dann:
"5482 2168 9257 5485" (ohne die Lücken)

von Wer B. (Gast)


Lesenswert?

Nur wie schreib ich das, was in dem Sketch als Kommentar steht ?

von Wer B. (Gast)


Lesenswert?

Reinhard M. schrieb:
> Simon S. schrieb:
>> Das Programm soll später den Jugendschutz am Tv rausmache, indem es den
>> Code knackt.
>
> Wenn ich das hier so lese, keine gute Idee.

Ob ich das jz am Fernseher bin oder am PC sitze und euch nerve...

Und egal ob ihr/du es glaubst/glaubt oder nicht.

Mich interessiert nicht mal der Zugriff auf dem TV.

Das bekomm ich auch anders hin...

Mir geht es nur um die Möglichkeit/das Wissen mit dem Arduino einen 
Brute Force Angriff zu machen.

von chris (Gast)


Lesenswert?

Simon S. schrieb:
> das Wissen

Man kann nicht erkennen, dass du davon auch nur Spuren besitzt...

von Dussel (Gast)


Lesenswert?

Simon S. schrieb:
> Der Tipp mit der for-Schleife war gut, nur bei meinem Programm nicht
> praktikabel.
Simon S. schrieb:
> for( zahl = 0; zahl < 10000; zahl++ )
Das schließt sich doch gegenseitig aus.

Simon S. schrieb:
> Nur mal so:
> Wer andere so korrigiert und meint ein auf oberschlau zu machen und dann
> sowas fragt...
Mir scheint, du hast verstanden, wie soziale Interaktion funtkioniert.
(Leichte Ironie)

Bernd K. schrieb:
> Jedoch ist Dein Tonfall schon im zweiten Posting geeignet auch diese
> letzten unerschrockenen 10% noch zu vertreiben.
Richtig. In dem Sinne: Tschüss :D

von Hans M. (Gast)


Lesenswert?

Peter D. schrieb:
> Du willst also einen Code je Ziffer senden.
> Das macht man mit einem Array:  uint16_t IR_code[10] = { 1234, 45, 789,
> 19050 }; // usw.
>
> void send_ir_ziffer( uint8_t val )
> {
>   SendIRCode( IR_code[val] );
> }

Genau das ist, das was Du brauchst und machen willst.

Hans

von Oliver S. (oliverso)


Lesenswert?

Planlos schrieb:
> Reinhard M. schrieb:
>> Wenn ich das hier so lese, keine gute Idee.
>
> Warum? Dann schaut er den ganzen Tag FSK18-Titel und ist beschäftigt.
> Das hält ihn von Arduino & Forum fern :)

Bis das Programm fertig ist, ist er schon in Rente...

Oliver

von Oliver S. (oliverso)


Lesenswert?

Simon S. schrieb:
> /*
>    * Wenn dann die Zahl 5735 ist, soll er
>    * (5 = 5482 / 7 = 2168 / 3 = 9275 / 5 = 5482)

Auch wenn dich das im Moment noch völlig überfordert, stelle ich schon 
mal den Begriff Array in den Raum.

Nur für den Fall, daß du in deinem C-Buch irgend wann einmal über Seite 
drei hinauskommst.

Oliver

von Wer B. (Gast)


Lesenswert?

Dussel schrieb:
> Simon S. schrieb:
>> Der Tipp mit der for-Schleife war gut, nur bei meinem Programm nicht
>> praktikabel.
> Simon S. schrieb:
>> for( zahl = 0; zahl < 10000; zahl++ )
> Das schließt sich doch gegenseitig aus.

Ich bin ja immernoch überzeugt das es so nicht geht, war ja auch nur ein 
Beispiel...

> Simon S. schrieb:
>> Nur mal so:
>> Wer andere so korrigiert und meint ein auf oberschlau zu machen und dann
>> sowas fragt...
> Mir scheint, du hast verstanden, wie soziale Interaktion funtkioniert.
> (Leichte Ironie)

Me 2


> Bernd K. schrieb:
>> Jedoch ist Dein Tonfall schon im zweiten Posting geeignet auch diese
>> letzten unerschrockenen 10% noch zu vertreiben.
> Richtig. In dem Sinne: Tschüss :D

Gj

von Wer B. (Gast)


Lesenswert?

Oliver S. schrieb:
> Simon S. schrieb:
>> /*
>>    * Wenn dann die Zahl 5735 ist, soll er
>>    * (5 = 5482 / 7 = 2168 / 3 = 9275 / 5 = 5482)
>
> Auch wenn dich das im Moment noch völlig überfordert, stelle ich schon
> mal den Begriff Array in den Raum.
>
> Nur für den Fall, daß du in deinem C-Buch irgend wann einmal über Seite
> drei hinauskommst.
>
> Oliver

Diese Leute die nur # Kommentare bringen aber nichts konstruktives...

Den Begriff Array kenn ich auch.
Nur wie wende ich es an... (in diesem Fall)

von Wer B. (Gast)


Lesenswert?

chris schrieb:
> Simon S. schrieb:
>> das Wissen
>
> Man kann nicht erkennen, dass du davon auch nur Spuren besitzt...

Jeder fängt mal klein an, nicht war ?
Ich will nicht wissen was deine ersten Fragen in einem Forum waren.

Und ganz sicher würde ich entweder helfen oder nix sagen, aber ganz 
sicher nicht sowas.

von Wer B. (Gast)


Lesenswert?

Hans M. schrieb:
> Peter D. schrieb:
>> Du willst also einen Code je Ziffer senden.
>> Das macht man mit einem Array:  uint16_t IR_code[10] = { 1234, 45, 789,
>> 19050 }; // usw.
>>
>> void send_ir_ziffer( uint8_t val )
>> {
>>   SendIRCode( IR_code[val] );
>> }
>
> Genau das ist, das was Du brauchst und machen willst.
>
> Hans

Danke, nur wie sag ich ihm nun er soll dann auch bei der Zahl 0123 
entsprechend:

SendIRCode( IR_code[0] );
SendIRCode( IR_code[1] );
SendIRCode( IR_code[2] );
SendIRCode( IR_code[3] );

schreiben/machen ?

von Kindersicherung (Gast)


Lesenswert?

https://www.arduino.cc/en/Reference/Array

setup()
{
  Serial.begin(9600);
  Serial.print("GO);
}

void loop()
{
int irda[] = {1234, 5678, 4321, 8765, 1111, 2222, 3333, 7777, 8888, 
9999};
int i;
int j;
int k;
int l;

for (i = 0; i < 10; i = i + 1) {
for (j = 0; j < 10; j = j + 1) {
for (k = 0; k < 10; k = k + 1) {
for (l = 0; l < 10; l = l + 1) {
Serial.println(irda[i]);
Serial.println(irda[j]);
Serial.println(irda[k]);
Serial.println(irda[l]);
}
}
}
}

}

von Oliver S. (oliverso)


Lesenswert?

Simon S. schrieb:
> Den Begriff Array kenn ich auch.
> Nur wie wende ich es an... (in diesem Fall)

Als ersten Schritt mal so, in dem du deine Liste von Integer-Werten in 
ein Array packst, und das dann mit einer for-Schleife Index für Index 
abarbeitest.

Und nein, DAS macht dir jetzt keiner vor. Das ist grundlegendes 
Programmierhandwerk, das schaffst du selber.

Oliver

von Richard H. (richard_h27)


Lesenswert?

Simon S. schrieb:
> Das Programm soll später den Jugendschutz am Tv rausmache, indem es den
> Code knackt.

> Jedoch muss selbst als blutiger Anfänger mir nicht anhören müssen das
> ich erstmal lernen soll Leds anzusteuern.

Er hat noch gar nicht begriffen, das er das mit dem LED-ansteuern auch 
noch braucht.

von Wer B. (Gast)


Angehängte Dateien:

Lesenswert?

Hab den Sketch jetzt fertig. (glaube ich jedenfalls)

Würde mich freuen wenn den einer kontrollieren würde.

Simons.Sp

von mr.confused (Gast)


Lesenswert?

Max D. schrieb im Beitrag #4535455:
> Das hier liefert dir Werte von 0 bis 4, wie du es auf 0-10 aufbohrst sei
> dir überlassen.
> Wenn du 0-10 hast kommst du mal wieder und wir machen den modulo
> durch...

Das nützt dem TE doch nichts, das gibt die Strings ja immer in der 
gleichen Reihenfolge aus.

von Max D. (max_d)


Lesenswert?

Das gibt am Ende einmalig ein "9999\r\n9999\r\n9999\r\n9999\r\n" aus

mr.confused schrieb:
> Das nützt dem TE doch nichts, das gibt die Strings ja immer in der
> gleichen Reihenfolge aus.

Das sollte als Einführung dienen (und ich habs inzwoschen glöscht, weil 
er das mit dem String-array shcon weitestgehend gerafft hatte).

von Y. W. (york_w34)


Lesenswert?

Ja aber dafür macht er kein Copy und Paste (von dem 
Kindersicherungscode) sonst wäre er schon fertig.

Toller Thread.

Vergleich mal Deine For-Schleifen und wo der Code dann ausgeführt wird 
mit dem oben genannten Beispiel.

von Wer B. (Gast)


Lesenswert?

Danke

von Joachim B. (jar)


Lesenswert?

und warum lernst du die FB nicht mit IRMP an und sendest dann 0000 bis 
9999 ?

https://www.mikrocontroller.net/articles/IRMP

kleiner Arduino, Sende Diode und TSOP31236
https://www.reichelt.de/Fotodioden-etc-/TSOP-31236/3/index.html?ACTION=3&GROUPID=3045&ARTICLE=107208

Das Leben könnte so einfach sein.

von Oliver S. (oliverso)


Lesenswert?

Simon S. schrieb:
> Hab den Sketch jetzt fertig. (glaube ich jedenfalls)
>
> Würde mich freuen wenn den einer kontrollieren würde.

Spätestens jetzt wird's Zeit für die Seite über for-Schleifen in deinem 
C-Buch. Denn bisher ist das noch ziemlich aua.

Oliver

von Wer B. (Gast)


Lesenswert?

Oliver S. schrieb:
> Simon S. schrieb:
>> Hab den Sketch jetzt fertig. (glaube ich jedenfalls)
>>
>> Würde mich freuen wenn den einer kontrollieren würde.
>
> Spätestens jetzt wird's Zeit für die Seite über for-Schleifen in deinem
> C-Buch. Denn bisher ist das noch ziemlich aua.
>
> Oliver

Das wird ich wohl jz machen müssen.

von Y. W. (york_w34)


Lesenswert?

Wie Du hast die Lösung immer noch nicht?


...
void loop()
{
  for (Z1 = 0; Z1 < 10; Z1 = Z1 ++)
  {
      for (Z2 = 0; Z2 < 10; Z2 = Z2 ++)
      {
          for (Z3 = 0; Z3 < 10; Z3 = Z3 ++)
          {
              for (Z4 = 0; Z4 < 10; Z4 = Z4 ++)
              {
                  Serial.println(irda[Z1]);
                  Serial.println(irda[Z2]);
                  Serial.println(irda[Z3]);
                  Serial.println(irda[Z4]);
              }
          }
     }
  }
}
....

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Das allerdings ist genauso aua...

Oliver

von Wer B. (Gast)


Lesenswert?

Y. W. schrieb:
> Wie Du hast die Lösung immer noch nicht?
> void loop()
> {
>   for (Z1 = 0; Z1 < 10; Z1 = Z1 ++)
>   {
>       for (Z2 = 0; Z2 < 10; Z2 = Z2 ++)
>       {
>           for (Z3 = 0; Z3 < 10; Z3 = Z3 ++)
>           {
>               for (Z4 = 0; Z4 < 10; Z4 = Z4 ++)
>               {
>                   Serial.println(irda[Z1]);
>                   Serial.println(irda[Z2]);
>                   Serial.println(irda[Z3]);
>                   Serial.println(irda[Z4]);
>               }
> [...]


Nun ja, der geht nicht ;D

von Wer B. (Gast)


Angehängte Dateien:

Lesenswert?

Wie steht es mit meinem ?

Ich komm immerhin über die 0 hinaus :D

Nur das Problem ist, nach 0010 kommt 0020 und nicht 0011.

Wie lös ich das ?

von Y. W. (york_w34)


Lesenswert?

Verstehe ich nicht...
1
/*
2
  BurteForcePreview
3
 */
4
int Z1;
5
int Z2;
6
int Z3;
7
int Z4;
8
9
int NZ1;
10
int NZ2;
11
int NZ3;
12
int NZ4;
13
14
int irda[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
15
16
17
void setup()
18
{
19
  Serial.begin(9600);
20
  Serial.print("GO");
21
}
22
23
24
void loop()
25
{
26
  for (Z1 = 0; Z1 < 10; Z1 = Z1 ++)
27
  {
28
    for (Z2 = 0; Z2 < 10; Z2 = Z2 ++)
29
    {
30
      for (Z3 = 0; Z3 < 10; Z3 = Z3 ++)
31
      {
32
        for (Z4 = 0; Z4 < 10; Z4 = Z4 ++)
33
        {
34
          Serial.print(irda[Z1]);
35
          Serial.print(irda[Z2]);
36
          Serial.print(irda[Z3]);
37
          Serial.print(irda[Z4]);
38
          Serial.println();
39
        }
40
      }
41
    }
42
  }
43
}

ergibt dieses:

GO0000
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
...

Aber vielleicht habe ich Dich wirklich nicht verstanden. Ach ja die 
Werte des Arrays solltest Du natürlich wieder anpassen aber sonst hätte 
ich die Ausgabe nicht verstanden.

von PittyJ (Gast)


Lesenswert?

Wenn ich da an früher denke. Da hat man sich noch hingesetzt, und auf 
einem Blatt Papier mitgeschrieben. Oder zumindest nach jeder Zeile noch 
mal Variablen ausgegeben.
Heute nimmt man jeden Pups ins Internet, und andere sollen das 
verbessern.
Wo ist da die eigene Initiative, Kreativität und eigenes Denken.

Und dann sieht man hier fertige Lösungen, und der Junge nimmt die 
Ratschläge nicht einmal an. Ist das jetzt Arroganz gepaart mit 
Unfähigkeit?

Ich prgrammiere auch gerne mit Arduinos. Nur wenn man das sieht, dann 
versteht man das Verhalten von anderen Leute hier, wenn die nur Arduino 
lesen....

von Wer B. (Gast)


Lesenswert?

Y. W. schrieb:
> Verstehe ich nicht...
>
> ergibt dieses:
>
> GO0000
> 0001
> 0002
> 0003
> 0004
> 0005
> 0006
> 0007
> 0008
> ...
>
> Aber vielleicht habe ich Dich wirklich nicht verstanden. Ach ja die
> Werte des Arrays solltest Du natürlich wieder anpassen aber sonst hätte
> ich die Ausgabe nicht verstanden.

Ernsthaft, bei mir kommt:
0000
0000
0000
0000
0000

von Wer B. (Gast)


Lesenswert?

PittyJ schrieb:
> Wenn ich da an früher denke. Da hat man sich noch hingesetzt, und auf
> einem Blatt Papier mitgeschrieben. Oder zumindest nach jeder Zeile noch
> mal Variablen ausgegeben.
> Heute nimmt man jeden Pups ins Internet, und andere sollen das
> verbessern.
> Wo ist da die eigene Initiative, Kreativität und eigenes Denken.
>
> Und dann sieht man hier fertige Lösungen, und der Junge nimmt die
> Ratschläge nicht einmal an. Ist das jetzt Arroganz gepaart mit
> Unfähigkeit?
>
> Ich prgrammiere auch gerne mit Arduinos. Nur wenn man das sieht, dann
> versteht man das Verhalten von anderen Leute hier, wenn die nur Arduino
> lesen....

Ich machs ja A selber und B geht die "fertig" Lösung bei mir nicht.

von Hurtig (Gast)


Lesenswert?

>  for (Z4 = 0; Z4 < 10; Z4 = Z4 ++)

MegaLOL

von Dieter F. (Gast)


Lesenswert?

Es geht auch einfach:
1
int Zahl;
2
char Nummer[5];
3
4
5
void setup()
6
{
7
  Serial.begin(9600);
8
  Serial.println("GO");
9
}
10
11
12
void loop()
13
{
14
  for (Zahl = 0; Zahl < 10000; Zahl = Zahl + 1)
15
  {
16
    sprintf (Nummer, "%04d", Zahl);
17
    Serial.println(Nummer);
18
    delay(1000);
19
  }
20
}

Eigentlich wollte ich Dir nicht mehr helfen - aber das kann man sich ja 
nicht anschauen :-)

von Hurtig (Gast)


Lesenswert?

@ Autor: Simon Spettmann (simonsp)

Hast du schon einmal daran gedacht C/C++ zu lernen?

von Wer B. (Gast)


Lesenswert?

Fehler gefunden:

FALSCH:
for (Z1 = 0; Z1 < 10; Z1 = Z1 ++)

RIGHTIG:
for (Z1 = 0; Z1 < 10; Z1 = Z1 + 1)

von Y. W. (york_w34)


Angehängte Dateien:

Lesenswert?

Also das läuft hier bei mir auf dem Arduino.

das
1
int NZ1;
2
int NZ2;
3
int NZ3;
4
int NZ4;

kannst getrost löschen benutzt Du eh nicht

von Wer B. (Gast)


Lesenswert?

Jetzt geht es.

Und ich soll C/C++ lernen...

von Y. W. (york_w34)


Lesenswert?

Ja, am Besten von den Grundlagen an und eine Buch kann man (und sollte 
man) auch lesen, wenn man kein Buch schreiben will.
Also mehr Interesse zeigen, so oft wird Dir hier mit Deiner 
Grundeinstellung nicht mehr geholfen befürchte ich.

von Hurtig (Gast)


Lesenswert?

Simon S. schrieb:
> Jetzt geht es.
>
> Und ich soll C/C++ lernen...

Unbedingt.

von Wer B. (Gast)


Lesenswert?

Immerhin habt ihr wegen mir euern Humor nicht verloren :D

Nochmal danke an alle.

Werde in Zukunft anders "fragen".

von Jemand (Gast)


Lesenswert?

Simon S. schrieb:
> Jetzt geht es.
>
> Und ich soll C/C++ lernen...

Echt so. Die anderen hier können noch viel von dir und deinen Künsten 
der Fehlerbehebung lernen.

Würd mich mal interessieren ob das gesamte Vorhaben dann so klappt ;)
(Wie überträgst du denn die Ausgabe von der Seriellen Schnittstelle auf 
deine Fernbedienung usw...)

Bei deinen Kenntnissen sollte das aber natürlich kein Problem 
darstellen.

MFG amüsierter Leser :)

von Wer B. (Gast)


Lesenswert?

Jetzt im Ernst:

Welches Buch könntet ihr mir empfehlen ? :D

von Hurtig (Gast)


Lesenswert?

Simon S. schrieb:
> Immerhin habt ihr wegen mir euern Humor nicht verloren :D
>
> Nochmal danke an alle.
>
> Werde in Zukunft anders "fragen".

"anders"? Ist das ein Kumpel von dir?

von Daniel A. (daniel-a)


Lesenswert?

Simon S. schrieb:
> Y. W. schrieb:
>> Verstehe ich nicht...
>>
>> ergibt dieses:
>>
>> GO0000
>> 0001
>> 0002
>> 0003
...
> Ernsthaft, bei mir kommt:
> 0000
> 0000

Ihr habt beide recht. "Z1 = Z1++" ist undefined behavour. Es ist nicht 
definiert, ob das Resultat von Z1++ vor oder nachdem es inkrementiert 
wird in Z1 zurückgeschrieben wird. Das Ergenis eines post-increment ist 
der Wert vor dem Inkrementieren.

Simon S. schrieb:
> Fehler gefunden:
>
> FALSCH:
> for (Z1 = 0; Z1 < 10; Z1 = Z1 ++)
>
> RIGHTIG:
> for (Z1 = 0; Z1 < 10; Z1 = Z1 + 1)

Ich bevorzuge "for (Z1 = 0; Z1 < 10; Z1++)", aber das ist 
Geschmackssache.

von Y. W. (york_w34)


Lesenswert?

Ganz im Gegenteil ich fand es stellenweise sehr amüsant.

Ich glaub aber Dein Fehler lag an einer anderen Stelle

Z=Z+1; sollte gleich
Z=Z++; sein und das sollte
Z++; entsprechen.

von Wer B. (Gast)


Lesenswert?

Jemand schrieb:
> Simon S. schrieb:
>> Jetzt geht es.
>>
>> Und ich soll C/C++ lernen...
>
> Echt so. Die anderen hier können noch viel von dir und deinen Künsten
> der Fehlerbehebung lernen.
>
> Würd mich mal interessieren ob das gesamte Vorhaben dann so klappt ;)
> (Wie überträgst du denn die Ausgabe von der Seriellen Schnittstelle auf
> deine Fernbedienung usw...)
>
> Bei deinen Kenntnissen sollte das aber natürlich kein Problem
> darstellen.
>
> MFG amüsierter Leser :)

Kann nur mit Theorie dienen :D

Mein IR Sender hat sich mangels Wiederstand verabschiedet...

Antwort kommt in den nächsten Tagen.

von Y. W. (york_w34)


Lesenswert?

Da haben wir das Problem mit der blinkenden LED.

Das Increment habe ich im Übrigen von einem Codeschnippsel weiter oben 
entnommen ich präferiere auch
for(int z = 0; z <= 10; z++){...}

von Daniel A. (daniel-a)


Lesenswert?

Y. W. schrieb:
> Das Increment habe ich im Übrigen von einem Codeschnippsel weiter oben
> entnommen ich präferiere auch
> for(int z = 0; z <= 10; z++){...}

Warum hast du das '=' dahin getan? Jetzt sind es 11 stat 10 Iterationen.

von Frank G. (frank_g53)


Lesenswert?


: Bearbeitet durch User
von W.A. (Gast)


Lesenswert?

Simon S. schrieb:
> Mein IR Sender hat sich mangels Wiederstand verabschiedet...

Und? Hast du was draus gelernt?

Hoffentlich steht er beim nächsten Mal wieder ...

von Wer B. (Gast)


Lesenswert?

W.A. schrieb:
> Simon S. schrieb:
>> Mein IR Sender hat sich mangels Wiederstand verabschiedet...
>
> Und? Hast du was draus gelernt?

 Das man vorher googelt. (oder Bücher liest)

von Sheeva P. (sheevaplug)


Lesenswert?

Simon S. schrieb:
> Immerhin habt ihr wegen mir euern Humor nicht verloren :D
>
> Nochmal danke an alle.
>
> Werde in Zukunft anders "fragen".

Prima. ;-)

Ok, you tiny little grashopper, so you want to be a hacker. Kung Fu 
time:
1
#define BUFLEN 5
2
#define OUTLEN 21
3
4
#include <stdio.h>
5
6
const char* code[] = {
7
    "0100", "0101", "0102", "0103", "0104",
8
    "0200", "0201", "0202", "0203", "0204"};
9
10
11
int main(void) {
12
    char out[OUTLEN];
13
    char buf[BUFLEN];
14
15
    for(int i = 0; i <= 9999; ++i) {
16
        snprintf(buf, BUFLEN, "%04d", i);
17
        snprintf(out, OUTLEN, "%s %s %s %s",
18
                 code[buf[0]-'0'], code[buf[1]-'0'],
19
                 code[buf[2]-'0'], code[buf[3]-'0']);
20
        printf("%s: %s\n", buf, out);
21
    }
22
    
23
    return 0;
24
}

Der Code ist weder schön, noch schnell. Doch wenn Du ihn verstanden 
hast, bist Du kein blutiger Anfänger mehr. ;-)

Beim Verständnis hilft natürlich das gute alte Standardwerk [1]: have 
fun!

http://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628/

von Y. W. (york_w34)


Lesenswert?

Daniel A. schrieb:
> Warum hast du das '=' dahin getan? Jetzt sind es 11 stat 10 Iterationen.

Ich habe nicht wirklich auf den Sourcecode Bezug nehmen wollen, sondern 
nur ein Beispiel geben wollen. Natürlich hast Du recht, dass er jetzt 
bis 11 laufen würde wenn das in den Code eingesetzt würde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.