Hallo Jungs, Hab folgendes Problem und bitte um Hilfe. Habe ein Schieberegister mit 8 LED´s an meinem Arduino Borad. Des weiteren befindet sich ein Taster auf dem Arduino Board. Ich möchte das sobald ich den Taster betätige die LED´s von links nach rechts durchlaufen, bzw wenn ich auf dem Taster bleibe die LED´s der reihe nach an gehen, und an bleiben bis ich den Taster wieder öffne und dann der reihe nach aus gehen. Ich möchte Digital dem Eingang auslesen woran der Taster hängt: Value = digitalRead (buttonPin); Value ist somit mein Ergebniss also 0 oder 1. Gibt es da eine Automatisierung oder wie stelle ich das an das aus der 1 von Taster folgende Werte erstellt werden: LED 1, LED 2, LED 3, LED 4; LED 5, LED 6, LED 7, LED 8; 1 2 4 8 16 32 64 128 Das Schieberegister spreche ich mit Zahlen von 0 - 255 an. Der Wert 0 - 255, wird mit j übergeben.
Mario schrieb: > Gibt es da eine Automatisierung oder wie stelle ich das an das aus der 1 > von Taster folgende Werte erstellt werden: > > > LED 1, LED 2, LED 3, LED 4; LED 5, LED 6, LED 7, LED 8; > > 1 2 4 8 16 32 64 128 Wenn du genau schaust, ist jede Zahl weiter rechts immer das doppelte der Zahl links. Und nein. Nicht für alles gibt es fertige Komponenten, die du einsetzen kannst. Das nennt man dann eben programmieren. Sonst wärs ja auch einfach und es würde nicht Jahre dauern, bis man ordentlich programmieren kann.
Ja das ist klar das Das ergebniss immer mal 2 genommen wird. Aber wie mache ich das das er mir alle 100ms die Zahl mit 2 multipliziert. Habe folgendes versucht: int Value1 = Value; Value1 = Value1 *2; allerdings ist dann das ergebniss immer 2
Mario schrieb: > Ja das ist klar das Das ergebniss immer mal 2 genommen wird. > Aber wie mache ich das das er mir alle 100ms die Zahl mit 2 > multipliziert. > > Habe folgendes versucht: > > int Value1 = Value; > Value1 = Value1 *2; > allerdings ist dann das ergebniss immer 2 und wenn du dann nochmal Value1 = Value1 * 2; machst, dann ist das Ergebnis 4 und beim nöchsten mal Value1 = Value1 * 2; ist das Ergebnis 8 Hmmm. int Value1 = 1; Value1 = Value1 *2; // 2. die müsste man jetzt auf das // Schieberegister ausgeben Value1 = Value1 * 2; // 4. Auch die müsste man jetzt auf das // Schieberegister ausgeben Value1 = Value1 * 2; // 8. Auch die müsste man jetzt auf das // Schieberegister ausgeben ... Im Prinzip ist das doch immer der gleiche Code. Da gibts doch noch was. Das nennt sich: eine Schleife. In einer Schleife kann man Code wiederholen lassen. Value1 = 1; for( i = 0; i < 8; i++ ) { Value1 am Schiebregister ausgeben bischen warten Value1 = Value1 * 2; }
int Value = digitalRead (buttonPin); Value1 = Value; for ( i = 0; i < 8; i++ ) { Value1 = Value1 * 2; } j = Value1; Serial.println (Value1); wenn ich es so ausführe ist Value1 immer 256 sobald der taster betätigt wird er zählt nicht erst die schritte hoch
Mario schrieb: > int Value = digitalRead (buttonPin); > > Value1 = Value; > for ( i = 0; i < 8; i++ ) { > Value1 = Value1 * 2; > } > > j = Value1; > > Serial.println (Value1); > > wenn ich es so ausführe ist Value1 immer 256 sobald der taster betätigt > wird er zählt nicht erst die schritte hoch Doch tut er. Er tut das genau hier > for ( i = 0; i < 8; i++ ) { > Value1 = Value1 * 2; > } Nur: Du machst nichts mit den Zwischenstufen! Wenn du sie sehen willst, dann musst du auch was damit tun! for ( i = 0; i < 8; i++ ) { Serial.println (Value1); Value1 = Value1 * 2; } Der Computer tut genau und zu 100% das, was du hingeschrieben hast. Von alleine passiert da gar nichts. Wenn du keine Anweisung gibst, die Zwischenergebnisse auszugeben, dann werden die auch nicht ausgegeben, sondern nur der Endstand nach 8 mal verdoppeln. Und der ist logischerweise 256.
Ja ok das sehe ich ein. Aber wie bekomme ich die Zwischenstufen raus.
Ok das mit der Zwischenausgabe habe ich hinbekommen. Aber ist doch niht so das ware. Gibt es die möglichkeit einen Taster auszulesen und das ergebnis in 8bit binärcode auszugeben. so das sich alle 10 ms eine 1 wenn taster gedrückt oder eine 0 wenn nicht gedrück von links nach rechts in den binär code schiebt
Es wird wohl Zeit für ein gutes C-Buch. Dort enthalten sind z.B. Shift-Operationen (Schieben), logische Verknüpfungen (um ein Bit an ein bestimmte Stelle setzen) und noch 1000 andere interessante Details. Vielleicht lohnt sich auch ein Blick in den Arduino-Dokumentation http://arduino.cc/en/Reference/HomePage Dort wird z.B. beschrieben, wie man ihn mit delay warten lassen kann. Damit sollte sich dein Programm in 20 Zeilen erledigen lassen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.