add arduino code

This commit is contained in:
marios8543 2025-04-24 23:03:07 +03:00
parent 9b80e02194
commit 8f7bb96282
4 changed files with 208 additions and 0 deletions

View File

@ -0,0 +1,88 @@
#include <Wire.h>
#define MIRQ 2
unsigned long timing;
void conf() {
TWBR = 0xff;
TWSR = 0x01;
//TWCR &= ~(1<<TWEA);
}
void sendStringToDisplay(char* str, bool dotPointEnable = false) {
Wire.beginTransmission(0x23);
//byte[] packet = { 0x0C, 0x90, 0x7E, 0x71, 0x01, }
Wire.write(0x0F);
Wire.write(0x90);
Wire.write(0x7F);
Wire.write(0xFF); //19 traffic on ? 55 ?
Wire.write(0xFF);
Wire.write(0xFF); //7F traffic on ? //FD ?
Wire.write(0x71); // PRESET
Wire.write(0x01); // DOT POINT //A5 ?
Wire.write(str[0]);
Wire.write(str[1]);
Wire.write(str[2]);
Wire.write(str[3]);
Wire.write(str[4]);
Wire.write(str[5]);
Wire.write(str[6]);
Wire.write(str[7]);
}
/*
0x19 0001 1001
0x55 0101 0101
*/
void setup() {
Serial.begin(9600);
Wire.begin();
conf();
//Wire.setClock(10000);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(MIRQ, INPUT_PULLUP);
}
void up() {
pinMode(MIRQ, INPUT_PULLUP);
}
void down() {
pinMode(MIRQ, OUTPUT);
digitalWrite(MIRQ, LOW);
}
bool initialized = false;
void loop() {
if (millis() - timing > 2000) { // Обновление данных на дисплее
Serial.println("WRITING");
while (!digitalRead(MIRQ))
;
if (digitalRead(MIRQ)) {
delay(1);
down();
Wire.beginTransmission(0x23);
conf();
Wire.write(0x01);
Wire.write(0x11);
Wire.endTransmission();
up();
delay(1);
}
while (!digitalRead(MIRQ))
;
if (digitalRead(MIRQ)) {
down();
sendStringToDisplay("HELLO", true);
Wire.endTransmission();
up();
delay(1);
}
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
timing = millis();
}
}

120
arduino/sketch_apr9c.ino Normal file
View File

@ -0,0 +1,120 @@
#include <SoftwareSerial.h>
#include <Wire.h>
#define MRQ_PIN 1
SoftwareSerial serial(3,4);
enum State { IDLE,
ACTIVE,
PAUSE };
byte HANDSHAKE[] = { 0x01, 0x00 };
byte PONG[] = { 0x01, 0x01 };
byte BUTTON[] = { 0x04, 0x82, 0x91, 0x00, 0x00 };
State currentState = IDLE;
unsigned long lastChange = 0;
bool handshakeComplete = false;
bool processButton = false;
byte readBuffer[16];
bool newBuffer = false;
void up() {
pinMode(MRQ_PIN, INPUT_PULLUP);
}
void down() {
pinMode(MRQ_PIN, OUTPUT);
digitalWrite(MRQ_PIN, LOW);
}
void onRequest() {
while (digitalRead(MRQ_PIN))
;
if (!handshakeComplete) {
Wire.write(HANDSHAKE, sizeof HANDSHAKE);
} else {
if (processButton) {
processButton = false;
Wire.write(BUTTON, sizeof BUTTON);
} else {
Wire.write(PONG, sizeof PONG);
}
}
}
void onReceive(int bytes) {
//Serial.println(bytes);
byte first_byte = Wire.read();
byte second_byte = Wire.read();
if (first_byte == 0x01 && second_byte == 0x11) {
if (!handshakeComplete) {
handshakeComplete = true;
//currentState = PAUSE;
}
} else if (first_byte == 0x01 && second_byte == 0x10) {
handshakeComplete = false;
//currentState = ACTIVE;
} else {
for (int i = 0; i < 16; i++) readBuffer[i] = 0x0;
readBuffer[0] = first_byte;
readBuffer[1] = second_byte;
for (int i = 0; i < bytes - 2; i++) {
readBuffer[i + 2] = Wire.read();
}
newBuffer = true;
}
}
void setup() {
serial.begin(9600);
Wire.setClock(10000);
Wire.begin(0x23);
Wire.onRequest(onRequest);
Wire.onReceive(onReceive);
pinMode(MRQ_PIN, INPUT_PULLUP);
}
void loop() {
if (serial.available()) {
BUTTON[3] = serial.read();
BUTTON[4] = serial.read();
processButton = true;
currentState = ACTIVE;
}
if (newBuffer) {
for (int i = 0; i < 16; i++) {
serial.write(readBuffer[i]);
}
newBuffer = false;
serial.println();
}
unsigned long now = millis();
switch (currentState) {
case PAUSE:
break;
case IDLE:
up();
if (now - lastChange >= 480) {
if (digitalRead(MRQ_PIN)) {
lastChange = now;
currentState = ACTIVE;
}
}
break;
case ACTIVE:
down();
if (now - lastChange >= 30) {
lastChange = now;
currentState = IDLE;
}
break;
}
}