Hallo, ich habe mit meinem Freund eine Schaltung aufgebaut, die aus zwei Schieberegister 74HC595, und an diesen sind LEDs angeschlossen, um die Signalausgabe zu kontrollieren. Die Schieberegister und die LEDs funktionieren mit anderen Codes Bsp. 0B0101010101010101 perfekt. Doch jetzt lassen wir den Code hochzählen. Dabei sind die letzten 8 Ziffern gleich. Nachdem die 8 Ziffern gemeinsam den Wert 11111111 erreicht haben Schaltet der vorhergehende Code eins hoch. Die ersten vier Ziffern bleiben dabei immer konstant. Somit lautet die Zusammensetzung folgendermaßen: 0B 1001 0000 0001 0001 konstant Mothercode zwei gleiche Codes dazu die Tabelle des Arduinos zur Veranschaulichung: ===================================== MotherCode: 0 ===================================== 1001000000000000 1001000000010001 1001000000100010 1001000000110011 1001000001000100 1001000001010101 1001000001100110 1001000001110111 1001000010001000 1001000010011001 1001000010101010 1001000010111011 1001000011001100 1001000011011101 1001000011101110 1001000011111111 ===================================== MotherCode: 1 ===================================== 1001000100000000 1001000100010001 1001000100100010 1001000100110011 1001000101000100 1001000101010101 1001000101100110 1001000101110111 1001000110001000 1001000110011001 1001000110101010 1001000110111011 1001000111001100 1001000111011101 1001000111101110 1001000111111111 ===================================== MotherCode: 10 ===================================== 1001001000000000 1001001000010001 1001001000100010 1001001000110011 1001001001000100 1001001001010101 1001001001100110 1001001001110111 1001001010001000 1001001010011001 1001001010101010 1001001010111011 1001001011001100 1001001011011101 1001001011101110 1001001011111111 ===================================== MotherCode: 11 ===================================== 1001001100000000 1001001100010001 1001001100100010 1001001100110011 1001001101000100 1001001101010101 1001001101100110 1001001101110111 1001001110001000 1001001110011001 1001001110101010 1001001110111011 1001001111001100 1001001111011101 1001001111101110 1001001111111111 Doch wenn ich diesen Code zum Schieberegister schicke, werden alle LEDs auf HIGH gesetzt, woran liegt das? Das ist das Programm: --------------------------------------------------------- int speicherPin = 10; int taktPin = 11; int datenPin = 9; long motherCode = 0; void setup() { Serial.begin(9600); } void loop() { Serial.println("====================================="); Serial.print("MotherCode: "); Serial.println(motherCode, BIN); Serial.println("====================================="); sendBytes(65499); delay(1000); for(int regalCodeCounter = 0; regalCodeCounter < 16; regalCodeCounter++) { long fullCode = (0B1001 << 4) + motherCode; // 1001 + motherCode fullCode = fullCode << 8; // 1001 + motherCode + 0000 0000 fullCode += getRegalCode(regalCodeCounter); // 1001 + motherCode + regalCode sendBytes(fullCode); Serial.println(fullCode,BIN); delay(1000); } delay(1000); // Eine Sekunde Verzögerung für jeden neuen MotherCode motherCode++; // MotherCode hochzählen if(motherCode == 16) // MotherCode zurücksetzen motherCode = 0; } // Generiere den RegalCode, welcher aus zwei identischen Zahlen besteht int getRegalCode(long regalCodeCounter) { long sendRegalCode = 0B11111111; sendRegalCode = regalCodeCounter << 4; sendRegalCode += regalCodeCounter; return sendRegalCode; } void sendBytes(long data) { digitalWrite(speicherPin, LOW); shiftOut(datenPin, taktPin, MSBFIRST, data >> 8); shiftOut(datenPin, taktPin, MSBFIRST, data & 255); digitalWrite(speicherPin, HIGH); }
t800w schrieb: > Doch wenn ich diesen Code zum Schieberegister schicke, werden alle LEDs > auf HIGH gesetzt, woran liegt das?
1 | pinMode(speicherPin, OUTPUT); |
2 | pinMode(taktPin, OUTPUT); |
3 | pinMode(datenPin, OUTPUT); |
Daran.
Es ist ziemlich verwirrend, wenn Du Variablen und Parameter als long (32Bit) deklarierst, aber davon nur 16Bit verwendest. Vorzugsweise nimmt man eindeutige Typen, wie z.B. uint16_t.
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.