Browse Source

First

master
Arti Zirk 4 years ago
commit
b12d602075
  1. 96
      charmap.txt
  2. 23
      convert.py
  3. 32
      slowcat.py
  4. 246
      stepper.ino
  5. 32
      welcome.txt

96
charmap.txt

@ -0,0 +1,96 @@
_
.
t
f
h
s
p
u
q
k
y
z
w
,
W
'
M
!
B
°
Z
C
F
"
R
S
?
E
U
D
:
G
V
L
P
J
T
A
Y
I
O
H
;
N
^
K
Q
X
/
*
Ü
1
2
3
4
0
5
6
7
8
9
-
$
+
£
%
=
ü
Ö
ä
(
)
&
Ä
´
ö
x
m
`
g
j
v
d
l
b
c
r
o
n
e
a
i

23
convert.py

@ -0,0 +1,23 @@
#!/usr/bin/env python3
orig = {}
with open("charmap.txt" ) as f:
for n, line in enumerate(f):
line = line.strip()
if line:
orig[n] = line
else:
print(n, "-empty-")
clist = {}
for pos, char in orig.items():
ascii = ord(char)
clist[ascii] = pos, char
print(pos, char, ascii)
for x in range(0xff):
print(x, *clist.get(x, (0, '')))
print("unsigned char charmap[] = {", end="")
for x in range(0xff):
print('{:>0}'.format(clist.get(x, (0, 0))[0]), end=", ")
print("};")

32
slowcat.py

@ -0,0 +1,32 @@
#! /usr/bin/python2
# slowcat.py - print a file slowly
# author : dave w capella - http://grox.net/mailme
# date : Sun Feb 10 21:57:42 PST 2008
############################################################
from __future__ import print_function
import sys, time
delay = .02
if len(sys.argv) > 1:
arg = sys.argv[1]
if arg != "-d":
print("usage: %s [-d delay]" % (sys.argv[0]))
print("delay: delay in seconds")
print("example: %s -d .02 < vtfile" % (sys.argv[0]))
sys.exit()
if len(sys.argv) > 2:
delay = float(sys.argv[2])
while 1:
try:
for c in raw_input():
print(c, end="")
sys.stdout.flush()
time.sleep(delay)
print()
except:
break
######################################################################
# eof: slowcat.py

246
stepper.ino

@ -0,0 +1,246 @@
/*
Stepper Motor Control - one step at a time
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor will step one step at a time, very slowly. You can use this to
test that you've got the four wires of your stepper wired to the correct
pins. If wired correctly, all steps should be in the same direction.
Use this also to count the number of steps per revolution of your motor,
if you don't know it. Then plug that number into the oneRevolution
example to see if you got it right.
Created 30 Nov. 2009
by Tom Igoe
*/
#include <Stepper.h>
unsigned char charmap[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 24, 0, 64, 67, 74, 16, 72, 73, 51, 65, 14, 63, 1, 50, 57, 53, 54, 55, 56, 58, 59, 60, 61, 62, 31, 43, 0, 68, 0, 27, 0, 38, 19, 22, 30, 28, 23, 32, 42, 40, 36, 46, 34, 17, 44, 41, 35, 48, 25, 26, 37, 29, 33, 15, 49, 39, 21, 0, 0, 0, 45, 0, 82, 94, 88, 89, 86, 93, 3, 83, 4, 95, 84, 9, 87, 81, 92, 91, 6, 8, 90, 5, 2, 7, 85, 13, 79, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 69, 0, 0};
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper columnStepper(stepsPerRevolution, 8, 9, 10, 11);
Stepper charWheelStepper(stepsPerRevolution, 7, 6, 5, 4);
int charWidth = 11; // how many steps between char prints
int currentPos = 0;
int currentChar = 0;
int limitPin = 12;
int headMotorLimitPin = 13;
int hammerPin = 22;
int Motor1A = 2;
int Motor1B = 3;
int Motor2A = 23;
void setup() {
// initialize the serial port:
Serial.begin(1200);
// configure limit pin
pinMode(limitPin, INPUT);
digitalWrite(limitPin, HIGH);
pinMode(headMotorLimitPin, INPUT);
digitalWrite(headMotorLimitPin, HIGH);
pinMode(Motor1A, OUTPUT);
pinMode(Motor1B, OUTPUT);
pinMode(Motor2A, OUTPUT);
pinMode(hammerPin, OUTPUT);
digitalWrite(hammerPin, LOW);
columnStepper.setSpeed(90);
charWheelStepper.setSpeed(90);
Serial.println("Finding home");
findHome();
Serial.println("Home found!");
}
void loop() {
delay(1000);
unsigned long lastCharTime;
while(0) {
for (int i = 0; i < 98; i++) {
printChar('0');
}
while(1) {lineFeed();}
}
while(1) {
if (Serial.available() > 0) {
// read the incoming byte:
lastCharTime = millis();
unsigned char in = Serial.read();
if (in == '\n') {
lineFeed();
lineFeed();
home();
} else {
printChar(in);
}
}
if (millis() - lastCharTime > 1000) {
releaseSteppers();
}
}
while(1) {
lineFeed();
delay(500);
}
while(1) {
//charWheelStepper.step(96);
charWheelStepper.step(1);
delay(100);
Serial.println(digitalRead(headMotorLimitPin));
}
bool limit = digitalRead(limitPin);
if(!limit) {
// step one step:
columnStepper.step(-1);
} else {
columnStepper.step(1200);
}
Serial.println(limit);
delay(3);
}
void printChar(unsigned char c){
int newLoc = charmap[c];
/*Serial.print("char ");
Serial.print(c);
Serial.print(" at ");
Serial.print(newLoc);*/
if (newLoc == 0){
charWheelStepper.step(1);
delay(30);
charWheelStepper.step(-1);
delay(30);
} else {
/*aSerial.print(", cur: ");
Serial.print(currentChar);
if (currentChar > newLoc) {
Serial.print(" > ");
newLoc = newLoc - currentChar;
currentChar += newLoc;
} else if (currentChar < newLoc) {
Serial.print(" < ");
} else {
Serial.print(" = ");
// that char is already selected
newLoc = 0;
}*/
newLoc = newLoc - currentChar;
currentChar += newLoc;
if (currentChar > 97) {
currentChar -= currentChar - 96;
}
/*Serial.print(" calcPos: ");
Serial.print(newLoc);
Serial.print(" new: ");
Serial.print(currentChar);*/
charWheelStepper.step(newLoc);
delay(30);
hammer();
freshTape();
}
columnStepper.step(charWidth);
currentPos += charWidth;
}
void hammer() {
digitalWrite(hammerPin, HIGH);
delay(13);
digitalWrite(hammerPin, LOW);
delay(10);
}
void freshTape() {
unsigned long start = millis();
char backTime = 13;
digitalWrite(Motor2A, LOW);
while(digitalRead(headMotorLimitPin)){
digitalWrite(Motor2A, HIGH);
if (millis() - start > 1000) {
digitalWrite(Motor2A, LOW);
return;
}
}
digitalWrite(Motor2A, LOW);
}
void home() {
columnStepper.step(-currentPos);
currentPos = 0;
}
void lineFeed(){
unsigned long start = millis();
char backTime = 13;
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, LOW);
while(!digitalRead(limitPin)){
digitalWrite(Motor1A, HIGH);
if (millis() - start > 1000) {
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
delay(backTime);
digitalWrite(Motor1B, LOW);
return;
}
}
start = millis();
while(digitalRead(limitPin)){
digitalWrite(Motor1A, HIGH);
if (millis() - start > 1000) {
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
delay(backTime);
digitalWrite(Motor1B, LOW);
return;
}
}
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
delay(backTime);
digitalWrite(Motor1B, LOW);
}
void findHome() {
currentPos = 0;
currentChar = 0;
bool limit = 0;
lineFeed();
while (!limit) {
columnStepper.step(-1);
delay(3);
limit = digitalRead(limitPin);
}
charWheelStepper.step(-100);
columnStepper.step(20);
charWheelStepper.step(-1);
limit = digitalRead(limitPin);
if (limit) {
lineFeed();
Serial.print("Column limit error!");
findHome();
}
}
void releaseSteppers(){
for (int i = 4; i < 12; i++) {
digitalWrite(i, LOW);
}
}

32
welcome.txt

@ -0,0 +1,32 @@
Lapikute arendusmasin
lap-dev login: purustaja
Password: *****
I------------------------------I
I Kas oled Rekorditeks valmis? I
I------------------------------I
$ sudo apt-get rekt
Loading…
Cancel
Save