FIrst off, we drop a testing code for the DotMatrix
#define PIN_DIN 8 #define PIN_CLK 9 #define PIN_CS 10 #define NUM_DEVICES 1 #include <LedControl.h> LedControl lc = LedControl(PIN_DIN, PIN_CLK, PIN_CS, NUM_DEVICES); void setup() { lc.shutdown(0, false); // intensity level (0..15) lc.setIntensity(0, 15); lc.clearDisplay(0); } void loop() { int rx = (int)(random(8)); int ry = (int)(random(8)); if (random(100) > 50) { lc.setLed(0, rx, ry, true); } else { lc.setLed(0, rx, ry, false); } }
processing code
import processing.serial.*; Serial myPort; // Create object from Serial class boolean[] ledState = new boolean[64]; // Array to store LED states int cellSize = 50; void setup() { size(400, 400); String portName = Serial.list()[0]; // Adjust the port index as needed myPort = new Serial(this, portName, 9600); // Initialize all LEDs as off for (int i = 0; i < ledState.length; i++) { ledState[i] = false; } // Send special command to reset Arduino state buffer resetArduinoState(); } void draw() { background(0); // Draw LED grid for (int row = 0; row < 8; row++) { for (int col = 0; col < 8; col++) { int id = row * 8 + col; // Determine fill color based on LED state fill(ledState[id] ? color(255, 0, 0) : color(20)); ellipse(col * cellSize + cellSize / 2, row * cellSize + cellSize / 2, cellSize * 0.8, cellSize * 0.8); } } // Periodically send special command to keep Arduino state in sync if (frameCount % 300 == 0) { // Adjust the period (300 frames = approx. 5 seconds at 60 fps) // resetArduinoState(); } } void mousePressed() { // Calculate which LED was clicked and send its ID over serial int row = mouseY / cellSize; int col = mouseX / cellSize; int id = row * 8 + col; myPort.write(id); // Send LED ID (0 to 63) over serial // Toggle local state and update visualization ledState[id] = !ledState[id]; } void resetArduinoState() { myPort.write(255); // Send special command (255) over serial to reset Arduino state println("reset ARDUINO"); }
#include <LedControl.h> #define PIN_DIN 8 #define PIN_CLK 9 #define PIN_CS 10 #define NUM_DEVICES 1 LedControl lc = LedControl(PIN_DIN, PIN_CLK, PIN_CS, NUM_DEVICES); bool ledState[64] = {false}; // State buffer for 64 LEDs void setup() { Serial.begin(9600); lc.shutdown(0, false); lc.setIntensity(0, 15); lc.clearDisplay(0); // Initialize all LEDs as off for (int i = 0; i < 64; i++) { ledState[i] = false; } } void updateLED(int id, bool state) { // Map LED index to row and column for 90 degrees clockwise rotation int row = id % 8; // Row is now column index int col = 7 - (id / 8); // Column is now mirrored row index lc.setLed(0, row, col, state); ledState[id] = state; // Update state buffer } void loop() { // Check if special command (255) is received to reset LED state buffer if (Serial.available() > 0) { int specialCommand = Serial.read(); if (specialCommand == 255) { // Reset LED state buffer for (int i = 0; i < 64; i++) { updateLED(i, false); // Turn off all LEDs } } else { // Toggle LED state based on received LED ID int id = specialCommand; bool state = !ledState[id]; // Toggle state updateLED(id, state); } } }
ANIMATION 🙂
import processing.serial.*; import java.util.ArrayList; Serial myPort; // Create object from Serial class boolean[] ledState = new boolean[64]; // Array to store LED states int cellSize = 50; ArrayList<Integer> recordedCommands = new ArrayList<Integer>(); // ArrayList to store recorded LED IDs ArrayList<Long> timestamps = new ArrayList<Long>(); // ArrayList to store timestamps boolean recording = false; // Flag to indicate recording state long lastRecordTime = 0; // Last recorded timestamp boolean playingBack = false; // Flag to indicate playback state int playbackIndex = 0; // Index for current playback command void setup() { size(400, 400); String portName = Serial.list()[0]; // Adjust the port index as needed myPort = new Serial(this, portName, 9600); // Initialize all LEDs as off for (int i = 0; i < ledState.length; i++) { ledState[i] = false; } // Send special command to reset Arduino state buffer resetArduinoState(); } void draw() { background(0); // Draw LED grid for (int row = 0; row < 8; row++) { for (int col = 0; col < 8; col++) { int id = row * 8 + col; // Determine fill color based on LED state fill(ledState[id] ? color(255, 0, 0) : color(20)); ellipse(col * cellSize + cellSize / 2, row * cellSize + cellSize / 2, cellSize * 0.8, cellSize * 0.8); } } // Check if playback is active if (playingBack) { sendPlaybackCommand(); // Send the next playback command } } void keyPressed() { if (key == ' ') { if (!recording && !playingBack) { startRecording(); } else if (recording) { stopRecording(); playbackCommands(); } else if (playingBack) { stopPlayback(); resetArduinoState(); } } } void mousePressed() { // Check if the mouse is inside the recording button area if (mouseX > 50 && mouseX < 150 && mouseY > 420 && mouseY < 470) { if (!recording && !playingBack) { startRecording(); } else if (recording) { stopRecording(); playbackCommands(); } else if (playingBack) { stopPlayback(); resetArduinoState(); } } // Check if the mouse is inside the clear button area if (mouseX > 250 && mouseX < 350 && mouseY > 420 && mouseY < 470) { clearRecording(); } // If recording, record which LED was clicked if (recording && mouseX >= 0 && mouseX < width && mouseY >= 0 && mouseY < height) { int row = mouseY / cellSize; int col = mouseX / cellSize; int id = row * 8 + col; recordedCommands.add(id); // Record LED ID timestamps.add(millis() - lastRecordTime); // Record time since last command lastRecordTime = millis(); // Update last record time // Toggle local state and update visualization ledState[id] = !ledState[id]; } } void startRecording() { recording = true; recordedCommands.clear(); // Clear any previous recorded commands timestamps.clear(); // Clear any previous recorded timestamps lastRecordTime = millis(); // Initialize last record time // Initialize all LEDs as off for (int i = 0; i < ledState.length; i++) { ledState[i] = false; } } void stopRecording() { recording = false; } void playbackCommands() { if (recordedCommands.size() > 0) { playingBack = true; playbackIndex = 0; } } void sendPlaybackCommand() { if (playingBack) { if (playbackIndex < recordedCommands.size()) { int id = recordedCommands.get(playbackIndex); myPort.write(id); // Send LED ID (0 to 63) over serial delay(int(timestamps.get(playbackIndex))); // Wait for the recorded time delay playbackIndex++; } else { // End of playback, loop infinitely playbackIndex = 0; } } } void stopPlayback() { playingBack = false; } void clearRecording() { recordedCommands.clear(); // Clear recorded commands timestamps.clear(); // Clear timestamps for (int i = 0; i < ledState.length; i++) { ledState[i] = false; // Clear LED states } } void resetArduinoState() { myPort.write(255); // Send special command (255) over serial to reset Arduino state }
// ARDUINO COE MIT BEEPER auf pin3
#include <LedControl.h> #define PIN_DIN 8 #define PIN_CLK 9 #define PIN_CS 10 #define NUM_DEVICES 1 LedControl lc = LedControl(PIN_DIN, PIN_CLK, PIN_CS, NUM_DEVICES); bool ledState[64] = {false}; // State buffer for 64 LEDs void setup() { Serial.begin(9600); lc.shutdown(0, false); lc.setIntensity(0, 15); lc.clearDisplay(0); // Initialize all LEDs as off for (int i = 0; i < 64; i++) { ledState[i] = false; } } void updateLED(int id, bool state) { // Map LED index to row and column for 90 degrees clockwise rotation int row = id % 8; // Row is now column index int col = 7 - (id / 8); // Column is now mirrored row index lc.setLed(0, row, col, state); ledState[id] = state; // Update state buffer } void loop() { // Check if special command (255) is received to reset LED state buffer if (Serial.available() > 0) { int specialCommand = Serial.read(); if (specialCommand == 255) { // Reset LED state buffer for (int i = 0; i < 64; i++) { updateLED(i, false); // Turn off all LEDs } } else { // Toggle LED state based on received LED ID int id = specialCommand; bool state = !ledState[id]; // Toggle state updateLED(id, state); for(int i=0;i<5;i++){ tone(3,40+i*500 + id * 100); delay(30); } noTone(3); } } }