154 lines
2.4 KiB
C++
154 lines
2.4 KiB
C++
#define DP_0 2
|
|
#define DP_1 3
|
|
#define DP_2 4
|
|
#define DP_3 5
|
|
#define AR 6
|
|
#define CR 7
|
|
|
|
#define STANDBY 0
|
|
#define READ 1
|
|
#define WRITE 2
|
|
|
|
|
|
char count = 0;
|
|
char delayAmount = 100;
|
|
char textToSent[] = "Hallo vom Arduino Nano!";
|
|
|
|
char mode;
|
|
|
|
char getScreenCode(char c) {
|
|
if (c >= 32 && c <= 63) {
|
|
return c;
|
|
} else if (c == 64) {
|
|
return 0;
|
|
} else if (c >= 65 && c <= 90) {
|
|
return c;
|
|
} else if (c == 91 || c == 93) {
|
|
return c - 64;
|
|
} else if (c == 95) {
|
|
return 111;
|
|
} else if (c >= 97 && c <= 122) {
|
|
return c - 96;
|
|
} else if (c == 124) {
|
|
return 93;
|
|
} else {
|
|
return 63;
|
|
}
|
|
}
|
|
|
|
void initMode(char mode) {
|
|
|
|
switch (mode) {
|
|
case WRITE:
|
|
pinMode(DP_0, OUTPUT);
|
|
pinMode(DP_1, OUTPUT);
|
|
pinMode(DP_2, OUTPUT);
|
|
pinMode(DP_3, OUTPUT);
|
|
break;
|
|
case STANDBY:
|
|
default:
|
|
pinMode(DP_0, INPUT);
|
|
pinMode(DP_1, INPUT);
|
|
pinMode(DP_2, INPUT);
|
|
pinMode(DP_3, INPUT);
|
|
}
|
|
|
|
pinMode(AR, OUTPUT);
|
|
pinMode(CR, INPUT);
|
|
|
|
digitalWrite(DP_0, LOW);
|
|
digitalWrite(DP_1, LOW);
|
|
digitalWrite(DP_2, LOW);
|
|
digitalWrite(DP_3, LOW);
|
|
digitalWrite(AR, LOW);
|
|
digitalWrite(CR, LOW);
|
|
|
|
}
|
|
|
|
void setup() {
|
|
delay(2000);
|
|
mode = STANDBY;
|
|
initMode(mode);
|
|
|
|
Serial.begin(9600);
|
|
|
|
}
|
|
|
|
void send4Bit(char c) {
|
|
|
|
for (char i = 3; i >= 0; i--) {
|
|
char d = c >> i & 1;
|
|
Serial.print(d, DEC);
|
|
}
|
|
|
|
for (char i = 0; i < 4; i++) {
|
|
char d = c >> i & 1;
|
|
digitalWrite(i+2, d);
|
|
}
|
|
Serial.print(" ");
|
|
digitalWrite(AR, HIGH);
|
|
|
|
while (digitalRead(CR) == LOW) {}
|
|
|
|
while (digitalRead(CR) == HIGH) {}
|
|
digitalWrite(AR, LOW);
|
|
|
|
//delay(500);
|
|
}
|
|
|
|
void sendByte(char a, char byte) {
|
|
char upper = byte >> 4;
|
|
char lower = byte & 0b00001111;
|
|
|
|
|
|
Serial.print(a);
|
|
Serial.print(" ");
|
|
Serial.print(a, DEC);
|
|
Serial.print(" ");
|
|
Serial.print(byte, DEC);
|
|
Serial.print(" ");
|
|
send4Bit(upper);
|
|
send4Bit(lower);
|
|
}
|
|
|
|
void startWrite() {
|
|
Serial.print("start\n");
|
|
mode = WRITE;
|
|
initMode(mode);
|
|
digitalWrite(AR, LOW);
|
|
|
|
int i = 0;
|
|
char c, sc;
|
|
do {
|
|
c = textToSent[i];
|
|
sc = getScreenCode(c);
|
|
i++;
|
|
sendByte(c, sc);
|
|
//Serial.print(c, DEC);
|
|
} while (c != 0);
|
|
|
|
Serial.print("\n");
|
|
|
|
for (char i = 2; i < 8; i++) {
|
|
digitalWrite(i, LOW);
|
|
}
|
|
|
|
mode = STANDBY;
|
|
}
|
|
|
|
void loop() {
|
|
|
|
if (mode == WRITE) {
|
|
|
|
} else if (mode == READ) {
|
|
|
|
} else {
|
|
startWrite();
|
|
}
|
|
|
|
Serial.print("\nAAAAAAAA\n");
|
|
|
|
delay(20000);
|
|
|
|
}
|