aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--readme.md24
-rw-r--r--software/scan.ino37
2 files changed, 20 insertions, 41 deletions
diff --git a/readme.md b/readme.md
index c62ba15..7c47256 100644
--- a/readme.md
+++ b/readme.md
@@ -9,14 +9,24 @@ weerstanden inplaats van zestien, en geen transistoren of mosfets. ook worden
maar drie uitgangen van de arduino gebruikt voor de seriële ingang, seriële
klok, en de latch klok van het shiftregister.
+## coole functies
+
+- algoritme om lege scanrijen over te slaan voor een hogere felheid
+- instelbare lengte en volgorde van de effecten die afspelen
+- makkelijk uitbereidbaar met nieuwe effecten
+- goed gedocumenteerd
+- opgesplitst in losse bestanden voor overzichtelijkheid
+- ingebouwde led map zodat je coordinaten kunt gebruiken in je animatiecode
+- veganistisch vriendelijk
+
## software
-de software is als gevolg hierdoor ook anders ingericht. de atmega328p heeft
-ingebouwde pwm timers, die je zou kunnen gebruiken om snel door de vier lagen
-van de ledcube heen te schakelen. omdat deze timers los van je code draaien kun
-je de ingebouwde `delay()` gewoon gebruiken om de animaties makkelijker te
-implementeren, maar dit werkt alleen wanneer je transistoren gebruikt en ze
-direct op pwm uitgangen aansluit.
+de software is als gevolg van de ongewone aansluitingswijze ook anders
+ingericht. de atmega328p heeft ingebouwde pwm timers, die je zou kunnen
+gebruiken om snel door de vier lagen van de ledcube heen te schakelen. omdat
+deze timers los van je code draaien kun je de ingebouwde `delay()` gewoon
+gebruiken om de animaties makkelijker te implementeren, maar dit werkt alleen
+wanneer je transistoren gebruikt en ze direct op pwm uitgangen aansluit.
daarom gebruikt onze software geen `delay()` of andere 'blokkerende' functies,
maar timers. dit zorgt ervoor dat de ingebouwde `loop()` functie van de arduino
@@ -46,5 +56,3 @@ software/
└── util.ino gereedschapsfuncties
```
-het algoritme om lege scanrijen over te slaan is nog niet afgewerkt en wordt op
-woensdag getest.
diff --git a/software/scan.ino b/software/scan.ino
index 100f85d..ecfe379 100644
--- a/software/scan.ino
+++ b/software/scan.ino
@@ -50,42 +50,13 @@ void optimize_scan() {
// calculate empty rows/columns
for(unsigned char direction = 0; direction < 2; direction++) {
for(unsigned char row = 0; row < 8; row++) {
- hv_empty[direction][row] = get_state_row(direction == SCAN_HOR ? row : 7 - row, direction) > 0;
- hv_emptyc[direction] += hv_empty[direction][row];
- }
- }
+ bool row_empty = get_state_row(row, direction) == 0;
+ if (!row_empty) continue;
- // garbage debug code (delete if worky)
- /* Serial.print("\r\n");
- Serial.print("\r\n");
- Serial.print("\r\n");
- for(int row = -1; row < 8; row++) {
- if (row == -1) {
- for(int i = 0; i < 8; i++) {
- Serial.print(hv_empty[1][i], DEC);
- Serial.print(" ");
- }
- Serial.print("\r\n");
- continue;
+ hv_empty[direction][row] = row_empty;
+ hv_emptyc[direction] += 1;
}
- for(int col = 0; col < 9; col++) {
- if (col == 8) {
- Serial.print(hv_empty[0][row], DEC);
- Serial.print(" ");
- continue;
- }
- Serial.print(led_state[row * 8 + col], DEC);
- Serial.print(" ");
- }
- Serial.print("\n\r");
}
- Serial.print("\r\n");
- Serial.print(hv_emptyc[0], DEC);
- Serial.print(" ");
- Serial.print(hv_emptyc[1], DEC);
- Serial.print("\r\n");
- delay(80); */
-
optimal_direction = hv_emptyc[0] > hv_emptyc[1] ? 1 : 0;
scan_direction = optimal_direction;