#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#define QRCODEVERSION 10
#define SCREEN_WIDTH 400
#define SCREEN_HEIGHT 300
#define BUFFER_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT / 8)
#define CS_PIN 10
GFXcanvas1 display(SCREEN_WIDTH, SCREEN_HEIGHT);
#include "qrencode.h"
void setup() {
Serial.begin(115200);
SPI.begin();
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
// Clear display
display.setRotation(3);
display.fillScreen(0);
display.setFont(&FreeSansBold9pt7b);
display.setTextSize(1);
display.setTextColor(1);
// Generate QR Code
String message = "https://antimatter15.com/LOOK_ON_MY_WORKS_YE_MIGHTY_AND_DESPAIR/LOOK_ON_MY_WORKS_YE_MIGHTY_AND_DESPAIRLOOK_ON_MY_WORKS_YE_MIGHTY_AND_DESPAIRLOOK_ON_MY_WORKS_YE_MIGHTY_AND_DESPAIRLOOK_ON_MY_WORKS_YE_MIGHTY_AND_DESPAIR";
message.toCharArray((char *)strinbuf,456);
// strncpy((char *)strinbuf, message, 1024);
qrencode();
// Calculate QR code position (centered)
int qr_size = WD; // WD is defined in qrencode.h
int scale = min(SCREEN_WIDTH, SCREEN_HEIGHT) / qr_size;
int qr_x = 10; //(SCREEN_HEIGHT - (qr_size * scale)) / 2;
int qr_y = 10; //(SCREEN_WIDTH - (qr_size * scale)) / 2;
// Draw QR Code
for (int y = 0; y < qr_size; y++) {
for (int x = 0; x < qr_size; x++) {
if (QRBIT(x,y)) {
display.fillRect(qr_x + x * scale, qr_y + y * scale, scale, scale, 1);
}
}
}
// Add text
// display.setCursor(10, 30);
// display.println(F("Scan this QR code:"));
// display.setCursor(10, SCREEN_HEIGHT - 30);
// display.println(F("https://example.com"));
// Transmit buffer to the framebuffer chip
digitalWrite(CS_PIN, LOW);
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
SPI.transfer(display.getBuffer(), BUFFER_SIZE);
SPI.endTransaction();
digitalWrite(CS_PIN, HIGH);
Serial.println("Display updated");
}
void loop() {
// Nothing to do in the loop for this demo
}