#include "WiFi.h" #include "WiFiUDP.h" #include "BasicStepperDriver.h" #include "MultiDriver.h" #include "SyncDriver.h" #include "ESP32Servo.h" #include "SSD1306.h" #include "Wire.h" SSD1306 display(0x3c, 21, 22); #define MOTOR_STEPS 200 #define L_Motor_RPM 7 //speed #define R_Motor_RPM 7 //speed #define MICROSTEPS 16 #define LedPin 2 #define ENB_Pin 19 #define L_Motor_DIR 26 #define L_Motor_STEP 33 #define R_Motor_DIR 32 #define R_Motor_STEP 25 BasicStepperDriver L_Motor(MOTOR_STEPS, L_Motor_DIR, L_Motor_STEP); BasicStepperDriver R_Motor(MOTOR_STEPS, R_Motor_DIR, R_Motor_STEP); SyncDriver controller(L_Motor, R_Motor); WiFiUDP UDP; char recbuff[8]; IPAddress myIP(192, 168, 4, 1); IPAddress HOSTIP (192, 168, 4, 2); const char *ssid = "OSTR"; const char *password = "12345678"; int fs = 3; //font size fs=1mm int servoPin = 23; int PEN_DOWN = 60; // f-sizengle of servo when pen is down int PEN_UP = 20; // f-sizengle of servo when pen is up Servo penServo; float wheel_dia = 68.9;// # mm (increase = spiral out) float wheel_base = 91.8;// # mm (increase = spiral in, ccw) int steps_rev = 3200; // # 200*16 MICROSTEPS int LedState = 0; unsigned long previousMillis = 0; unsigned long interval = 500; void setup() { WiFi.softAP(ssid, password); // setting SSID and Password WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); // setting IP Address UDP.begin(8000); // setting UDP port,port number is the same setting as the controller and the side. Serial.begin(115200); pinMode(ENB_Pin, OUTPUT); digitalWrite(ENB_Pin, HIGH); pinMode(LedPin, OUTPUT); digitalWrite(LedPin, HIGH); L_Motor.begin(L_Motor_RPM, MICROSTEPS); R_Motor.begin(R_Motor_RPM, MICROSTEPS); penServo.attach(servoPin); penup(); display.init(); display.setFont(ArialMT_Plain_24); display.drawString(20, 0, " Select"); display.drawString(10, 25, "16 Button"); display.display(); delay(300); } void loop() { if (UDP.parsePacket() > 0) { UDP.read(recbuff, 8); UDP.flush(); } WiFi_receive(); unsigned long currentMillis = millis(); if (ENB_Pin == LOW) { if (currentMillis - previousMillis > interval) { if (LedState == 0) { digitalWrite(LedPin, HIGH); LedState = 1; } else { digitalWrite(LedPin, LOW); LedState = 0; } previousMillis = currentMillis; } } } void WiFi_receive() { switch (recbuff[0]) { case 'F': forward(0.2); break; case 'B': backward(0.2); break; case 'R': right(1); break; case 'L': left(1); break; case '0': //100mm Square Calibration display.clear(); display.drawString(0, 0, "Calibration"); display.drawString(0, 25, " wait a bit"); display.display(); pendown(); for (int x = 0; x < 12; x++) { forward(100); left(90); } penup(); done(); display2(); break; case '1': // 8_DIA Right Satrt display.clear(); display.drawString(0, 0, "8 Diamond"); display.drawString(0, 25, " wait a bit"); display.display(); forward(25); left(90); backward(20); left(30); for (int x = 0; x < 4; x++) { dia8(); } penup(); right(30); backward(20); left(90); forward(25); done(); display2(); break; case '2': //Heart display.clear(); display.drawString(0, 0, " HEART"); display.drawString(0, 25, " wait a bit"); display.display(); forward(50); right(45); pendown(); forward(14.84); right(45); forward(14); right(45); forward(49.49); right(90); forward(49.49); right(45); forward(14); right(45); forward(14.84); right(45); forward(14); right(45); forward(14.84); left(90); forward(14.84); right(45); forward(14); penup(); forward(15); penup(); done(); display2(); break; case '3': // 3 Diamond display.clear(); display.drawString(0, 0, "3 Diamond"); display.drawString(0, 25, " wait a bit"); display.display(); forward(30); right(60); pendown(); forward(20); right(60); forward(40); right(60); forward(20); left(60); backward(20); right(60); backward(40); right(60); backward(20); left(60); forward(20); right(60); forward(40); right(60); forward(20); penup(); right(60); forward(30); done(); display2(); break; case '4': // 5Stars display.clear(); display.drawString(0, 0, "5 Stars"); display.drawString(0, 25, " wait a bit"); display.display(); forward(30); right(72); pendown(); forward(60); right(144); forward(60); right(144); forward(60); right(144); forward(60); right(144); forward(60); penup(); right(72); forward(30); done(); display2(); break; case '5': // 7Stars display.clear(); display.drawString(0, 0, "7 Stars"); display.drawString(0, 25, " wait a bit"); display.display(); forward(30); right(77.142); pendown(); forward(60); left(25.714); backward(60); left(25.714); forward(60); left(25.714); backward(60); left(25.714); forward(60); left(25.714); backward(60); left(25.714); forward(60); penup(); right(77.142); forward(30); done(); display2(); break; case '6': // HELLO WORLD display.clear(); display.drawString(0, 0, "Hello World"); display.drawString(0, 25, " wait a bit"); display.display(); fontdat_H(); fontdat_E(); fontdat_L(); fontdat_L(); fontdat_O(); fontdat_sp(); //space fontdat_W(); fontdat_O(); fontdat_R(); fontdat_L(); fontdat_D(); penup(); done(); display2(); break; case '7': // 012..789 display.clear(); display.drawString(0, 0, " 012..789"); display.drawString(0, 25, " wait a bit"); display.display(); fontdat_0(); fontdat_1(); fontdat_2(); fontdat_3(); fontdat_4(); fontdat_5(); fontdat_6(); fontdat_7(); fontdat_8(); fontdat_9(); fontdat_sp(); //space fontdat_dl(); // / fontdat_hy(); // - penup(); done(); display2(); break; case '8': // ABCDEFGHIJKLM display.clear(); display.drawString(0, 0, "ABC...KLM"); display.drawString(0, 25, " wait a bit"); display.display(); fontdat_A(); fontdat_B(); fontdat_C(); fontdat_D(); fontdat_E(); fontdat_F(); fontdat_G(); fontdat_H(); fontdat_I(); fontdat_J(); fontdat_K(); fontdat_L(); fontdat_M(); penup(); done(); display2(); break; case '9': // NOPQRSTUVWXYZ display.clear(); display.drawString(0, 0, "NOP...XYZ"); display.drawString(0, 25, " wait a bit"); display.display(); fontdat_N(); fontdat_O(); fontdat_P(); fontdat_Q(); fontdat_R(); fontdat_S(); fontdat_T(); fontdat_U(); fontdat_V(); fontdat_W(); fontdat_X(); fontdat_Y(); fontdat_Z(); penup(); done(); display2(); break; case 'G': // abcdefghijklm display.clear(); display.drawString(0, 0, "abc...klm"); display.drawString(0, 25, " wait a bit"); display.display(); fontdat_a(); fontdat_b(); fontdat_c(); fontdat_d(); fontdat_e(); fontdat_f(); fontdat_g(); fontdat_h(); fontdat_i(); fontdat_j(); fontdat_k(); fontdat_l(); fontdat_m(); penup(); done(); display2(); break; case 'H': // opqrstuvwxyz display.clear(); display.drawString(0, 0, "opq...xyz"); display.drawString(0, 25, " wait a bit"); display.display(); fontdat_n(); fontdat_o(); fontdat_p(); fontdat_q(); fontdat_r(); fontdat_s(); fontdat_t(); fontdat_u(); fontdat_v(); fontdat_w(); fontdat_x(); fontdat_y(); fontdat_z(); penup(); done(); display2(); break; case 'I': // FontSize fs=3 display.clear(); display.drawString(0, 0, "Fontsize 3"); display.display(); fs = 3; delay(500); display2(); break; case 'J': // FontSize fs=2 display.clear(); display.drawString(0, 0, "Fontsize 2"); display.display(); fs = 2; delay(500); display2(); break; case 'K': // Penup display.clear(); display.drawString(0, 0, " Pen UP"); display.display(); penup(); delay(100); display2(); break; case 'M': // penup display.clear(); display.drawString(0, 0, "Pen DOWN"); display.display(); pendown(); delay(100); display2(); break; } } void display2() { display.clear(); display.drawString(20, 0, " Select"); display.drawString(10, 25, "16 Button"); display.display(); } // ----- HELPER FUNCTIONS ----------- int step(float distance) { int steps = distance * steps_rev / (wheel_dia * 3.14159); return steps; } void forward(float distance) { float steps = step(distance); float degs = (steps / steps_rev) * 360; // #Convert steps to degs in controller.rotate. digitalWrite(ENB_Pin, LOW); controller.rotate(-degs, degs); digitalWrite(ENB_Pin, HIGH); } void backward(float distance) { float steps = step(distance); float degs = (steps / steps_rev) * 360; // #Convert steps to degs in controller.rotate. digitalWrite(ENB_Pin, LOW); controller.rotate(degs, -degs); digitalWrite(ENB_Pin, HIGH); } void left(float degrees) { float rotation = degrees / 360; float distance = wheel_base * 3.14159 * rotation;//3.14159265359 * rotation;//3.1412 float steps = step(distance); float degs = (steps / steps_rev) * 360; // #Convert steps to degs in controller.rotate. digitalWrite(ENB_Pin, LOW); controller.rotate(degs, degs); digitalWrite(ENB_Pin, HIGH); } void right(float degrees) { float rotation = degrees / 360; float distance = wheel_base * 3.14159 * rotation;//3.14159265359 * rotation;//3.1412 float steps = step(distance); float degs = (steps / steps_rev) * 360; // #Convert steps to degs in controller.rotate. digitalWrite(ENB_Pin, LOW); controller.rotate(-degs, -degs); digitalWrite(ENB_Pin, HIGH); } void done() { // unlock stepper to save battery digitalWrite(ENB_Pin, HIGH); } void penup() { delay(250); penServo.write(PEN_UP); delay(250); } void pendown() { delay(250); penServo.write(PEN_DOWN); delay(250); } //---font data--- void fontdat_A() { forward(fs * 2); right(68.2); pendown(); forward(sqrt(pow(2, 2) + pow(5, 2))*fs); right(21.8); forward(fs * 3); penup(); backward(fs * 2); right(90); pendown(); forward(fs * 4); penup(); right(90); backward(fs * 2); pendown(); forward(fs * 3); right(21.7);//-0.1 forward(sqrt(pow(2, 2) + pow(5, 2))*fs); penup(); right(67.7);//-0.5 forward(fs * 3); done(); } void fontdat_B() { pendown(); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); left(90); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 3); right(90); forward(fs * 8); penup(); backward(fs * 4); right(90); pendown(); forward(fs * 3); penup(); forward(fs * 2); left(90); forward(fs * 4); right(90); done(); } void fontdat_C() { forward(fs * 3); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); penup(); forward(fs * 4); pendown(); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs * 2); done(); } void fontdat_D() { forward(fs * 3); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 3); right(90); forward(fs * 8); right(90); forward(fs * 3); penup(); forward(fs * 2); done(); } void fontdat_E() { right(90); pendown(); forward(fs * 8); left(90); forward(fs * 4); penup(); left(90); forward(fs * 4); left(90); forward(fs); pendown(); forward(fs * 3); penup(); right(90); forward(fs * 4); right(90); pendown(); forward(fs * 4); penup(); forward(fs); done(); } void fontdat_F() { pendown(); forward(fs * 4); penup(); backward(fs * 4); right(90); pendown(); forward(fs * 8); penup(); backward(fs * 4); left(90); pendown(); forward(fs * 3); penup(); forward(fs * 2); left(90); forward(fs * 4); right(90); done(); } void fontdat_G() { forward(fs * 4); left(90); backward(fs * 2); pendown(); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 6); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); left(45); forward(sqrt(2)*fs); penup(); left(45); backward(fs); pendown(); forward(fs * 4); left(90); forward(fs * 2); penup(); right(90); forward(fs * 4); right(90); forward(fs * 3); done(); } void fontdat_H() { right(90); pendown(); forward(fs * 8); penup(); backward(fs * 4); left(90); pendown(); forward(fs * 4); penup(); left(90); backward(fs * 4); pendown(); forward(fs * 8); penup(); right(90); forward(fs); done(); } void fontdat_I() { pendown(); forward(fs * 2); penup(); backward(fs); right(90); pendown(); forward(fs * 8); penup(); left(90); backward(fs); pendown(); forward(fs * 2); penup(); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_J() { forward(fs * 3); pendown(); forward(fs); right(90); forward(fs * 7); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs * 5); right(90); forward(fs * 5); done(); } void fontdat_K() { right(90); pendown(); forward(fs * 8); penup(); left(90); forward(fs * 4); pendown(); left(135); forward(sqrt(pow(4, 2) + pow(4, 2))*fs); right(90); forward(sqrt(pow(4, 2) + pow(4, 2))*fs); penup(); right(45); forward(fs); done(); } void fontdat_L() { right(90); pendown(); forward(fs * 8); left(90); forward(fs * 4); penup(); left(90); forward(fs * 8); right(90); forward(fs); done(); } void fontdat_M() { right(90); forward(fs * 8); pendown(); backward(fs * 8); left(21.80); forward(sqrt(pow(2, 2) + pow(5, 2))*fs); left(136.40); forward(sqrt(pow(2, 2) + pow(5, 2))*fs); left(21.80); backward(fs * 8); penup(); right(90); forward(fs); left(90); forward(fs * 8); right(90); } void fontdat_N() { right(90); pendown(); forward(fs * 8); penup(); backward(fs * 8); left(26.57); pendown(); forward(sqrt(pow(4, 2) + pow(8, 2))*fs); right(26.57); backward(fs * 8); penup(); left(90); forward(fs); done(); } void fontdat_O() { forward(fs * 3); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs * 2); done(); } void fontdat_P() { pendown(); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 3); penup(); right(90); backward(fs * 4); pendown(); forward(fs * 8); penup(); right(90); forward(fs * 5); done(); } void fontdat_Q() { forward(fs * 3); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); backward(fs); right(90); forward(fs * 6); left(45); pendown(); forward(sqrt(pow(2, 2) + pow(2, 2))*fs); penup(); left(45); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_R() { pendown(); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 3); penup(); backward(fs * 2); right(63.43); pendown(); backward(sqrt(pow(2, 2) + pow(4, 2))*fs); left(63.43); penup(); forward(fs * 4); right(90); pendown(); forward(fs * 8); right(90); penup(); forward(fs * 5); done(); } void fontdat_S() { right(90); forward(fs * 7); left(45); pendown(); forward(sqrt(2)*fs); left(45); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); penup(); backward(sqrt(2)*fs); left(45); forward(fs * 2); done(); } void fontdat_T() { pendown(); forward(fs * 4); penup(); backward(fs * 2); right(90); pendown(); forward(fs * 8); penup(); left(90); forward(fs * 3); left(90); forward(fs * 8); right(90); forward(fs); done(); } void fontdat_U() { right(90); pendown(); forward(fs * 7); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 7); penup(); right(90); forward(fs); done(); } void fontdat_V() { left(104.04); // 90+14.04 pendown(); backward(sqrt(pow(2, 2) + pow(8, 2))*fs); right(28.07); // 14.04*2 forward(sqrt(pow(2, 2) + pow(8, 2))*fs); right(75.96); // 90-14.04 penup(); forward(fs); done(); } void fontdat_W() { left(97.13); pendown(); backward(sqrt(1 + pow(8, 2))*fs); right(16.59); forward(sqrt(1 + pow(6, 2))*fs); left(18.92); backward(sqrt(1 + pow(6, 2))*fs); right(16.59); forward(sqrt(1 + pow(8, 2))*fs); penup(); right(82.80);//-0.07 forward(fs); done(); } void fontdat_X() { right(63.43); pendown(); forward(sqrt(pow(4, 2) + pow(8, 2))*fs); penup(); left(63.43); backward(fs * 4); left(63.43); pendown(); forward(sqrt(pow(4, 2) + pow(8, 2))*fs); penup(); right(63.43); forward(fs); done(); } void fontdat_Y() { right(63.43); pendown(); forward(sqrt(pow(2, 2) + pow(4, 2))*fs); right(53.13); backward(sqrt(pow(2, 2) + pow(4, 2))*fs); penup(); forward(sqrt(pow(2, 2) + pow(4, 2))*fs); left(26.57); pendown(); forward(fs * 4); penup(); left(90); forward(fs * 3); left(90); forward(fs * 8); right(90); done(); } void fontdat_Z() { pendown(); forward(fs * 4); left(63.43); backward(sqrt(pow(4, 2) + pow(8, 2))*fs); penup(); right(63.43); pendown(); forward(fs * 4); penup(); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_a() { left(90); backward(fs * 3); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 5); penup(); backward(fs); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(18.43); forward(sqrt(1 + pow(2, 2))*fs); penup(); left(63.43); forward(fs * 4); right(90); forward(fs); done(); } void fontdat_b() { right(90); pendown(); forward(fs * 8); left(90); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 3); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); penup(); right(90); forward(fs * 3); right(90); forward(fs * 4); done(); } void fontdat_c() { forward(fs * 3); left(90); backward(fs * 3); left(45); pendown(); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 4); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); penup(); left(45); forward(fs * 7); right(90); forward(fs); done(); } void fontdat_d() { forward(fs * 3); right(90); pendown(); forward(fs * 8); right(90); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs); left(90); forward(fs * 3); right(90); done(); } void fontdat_e() { right(90); forward(fs * 5); pendown(); left(90); forward(fs * 3); left(90); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 4); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); penup(); forward(fs); left(45); forward(fs * 6); right(90); done(); } void fontdat_f() { forward(fs * 3); left(90); backward(fs * 2); pendown(); forward(fs); left(45); forward(sqrt(2)*fs); left(90); forward(sqrt(2)*fs); left(45); forward(fs * 7); penup(); backward(fs * 4); right(90); backward(fs * 2); pendown(); forward(fs * 3); penup(); right(90); forward(fs * 4); right(90); forward(fs * 4); done(); } void fontdat_g() { right(90); forward(fs * 9); pendown(); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 5); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 3); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); penup(); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_h() { left(90); pendown(); backward(fs * 8); penup(); forward(fs * 4); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 4); penup(); left(90); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_i() { forward(fs); right(90); forward(fs * 2); pendown(); forward(fs); penup(); forward(fs); pendown(); forward(fs * 4); penup(); left(90); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_j() { forward(fs * 3); right(90); forward(fs * 2); pendown(); forward(fs); penup(); forward(fs); pendown(); forward(fs * 5); right(45); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); penup(); forward(fs * 9); right(90); forward(fs * 4); done(); } void fontdat_k() { left(90); pendown(); backward(fs * 8); penup(); forward(fs * 3); right(45); pendown(); forward(sqrt(pow(3, 2) + pow(3, 2))*fs); penup(); left(45); backward(fs * 6); left(26.57); pendown(); forward(sqrt(pow(2, 2) + pow(4, 2))*fs); penup(); right(26.57); forward(fs * 4); right(90); forward(fs * 3); done(); } void fontdat_l() { forward(fs); right(90); pendown(); forward(fs * 8); penup(); left(90); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_m() { left(90); backward(fs * 2); pendown(); backward(fs * 6); penup(); forward(fs * 5); right(45); pendown(); forward(sqrt(2)*fs); right(90); forward(sqrt(2)*fs); penup(); left(135); backward(fs * 5); pendown(); forward(fs * 5); right(45); forward(sqrt(2)*fs); right(90); forward(sqrt(2)*fs); right(45); forward(fs * 5); penup(); backward(fs * 8); left(90); forward(fs); done(); } void fontdat_n() { left(90); backward(fs * 2); pendown(); backward(fs * 6); penup(); forward(fs * 5); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); penup(); left(135); pendown(); backward(fs * 5); penup(); forward(fs * 8); right(90); forward(fs); done(); } void fontdat_o() { left(90); backward(fs * 3); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 4); right(45); pendown(); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 4); penup(); forward(fs * 3); right(90); forward(fs * 4); done(); } void fontdat_p() { left(90); backward(fs * 7); right(90); pendown(); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 3); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); left(90); forward(fs * 8); penup(); left(90); forward(fs * 4); left(90); forward(fs * 10); right(90); done(); } void fontdat_q() { right(90); forward(fs * 10); left(90); forward(fs * 3); left(90); pendown(); forward(fs * 8); left(90); forward(fs * 2); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 3); left(45); forward(sqrt(2)*fs); left(45); forward(fs * 2); penup(); forward(fs); left(90); forward(fs * 7); right(90); done(); } void fontdat_r() { left(90); backward(fs * 2); pendown(); backward(fs * 6); penup(); forward(fs * 4); right(26.57); pendown(); forward(sqrt(1 + pow(2, 2))*fs); right(63.43); forward(fs); right(45); forward(sqrt(2)*fs); penup(); left(45); forward(fs); left(90); forward(fs * 3); right(90); done(); } void fontdat_s() { forward(fs * 3); left(90); backward(fs * 3); left(45); pendown(); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs); right(45); forward(sqrt(2)*fs); right(45); penup(); forward(fs * 7); right(90); forward(fs * 4); done(); } void fontdat_t() { forward(fs); right(90); pendown(); forward(fs * 7); left(45); forward(sqrt(2)*fs); left(90); forward(sqrt(2)*fs); left(45); penup(); forward(fs * 5); left(90); forward(fs); pendown(); forward(fs * 2); penup(); right(90); forward(fs * 2); right(90); forward(fs * 4); done(); } void fontdat_u() { right(90); forward(fs * 2); pendown(); forward(fs * 5); left(45); forward(sqrt(2)*fs); left(45); forward(fs); left(45); forward(sqrt(2)*fs); left(45); penup(); backward(fs); pendown(); forward(fs * 6); penup(); forward(fs * 2); right(90); forward(fs); done(); } void fontdat_v() { right(90); forward(fs * 2); pendown(); left(9.46); forward(sqrt(1 + pow(6, 2))*fs); right(9.56 + 18.43); backward(sqrt(pow(2, 2) + pow(6, 2))*fs); left(18.43); penup(); backward(fs * 2); left(90); forward(fs); done(); } void fontdat_w() { right(90); forward(fs * 2); pendown(); left(9.46); forward(sqrt(1 + pow(6, 2))*fs); right(23.5); backward(sqrt(pow(2, 2) + pow(4, 2))*fs); left(28.07); forward(sqrt(pow(2, 2) + pow(4, 2))*fs); right(23.5); backward(sqrt(1 + pow(6, 2))*fs); left(9.46); penup(); backward(fs * 2); left(90); forward(fs); done(); } void fontdat_x() { right(90); forward(fs * 2); pendown(); left(26.57); forward(sqrt(pow(3, 2) + pow(6, 2))*fs); left(63.43); penup(); backward(fs * 3); left(63.43); pendown(); forward(sqrt(pow(3, 2) + pow(6, 2))*fs); penup(); left(26.57); forward(fs * 2); right(90); forward(fs); done(); } void fontdat_y() { right(90); forward(fs * 2); left(26.57); pendown(); forward(sqrt(pow(2, 2) + pow(4, 2))*fs); penup(); backward(sqrt(pow(2, 2) + pow(4, 2))*fs); right(26.57); forward(fs * 8); left(90); pendown(); forward(fs); left(75.96); forward(sqrt(pow(2, 2) + pow(8, 2))*fs); penup(); left(14.04); forward(fs * 2); right(90); forward(fs); done(); } void fontdat_z() { right(90); forward(fs * 2); left(90); pendown(); forward(fs * 3); left(63.43); backward(sqrt(pow(3, 2) + pow(6, 2))*fs); right(63.43); forward(fs * 3); penup(); left(90); forward(fs * 8); right(90); forward(fs); done(); } void fontdat_0() { forward(fs); pendown(); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); penup(); backward(sqrt(2)*fs); left(45); backward(fs * 6); right(33.69); pendown(); forward(sqrt(pow(4, 2) + pow(6, 2))*fs); penup(); left(33.69); forward(fs); right(90); done(); } void fontdat_1() { forward(fs * 2); right(90); pendown(); forward(fs * 8); penup(); right(90); backward(fs); pendown(); forward(fs * 2); penup(); right(90); forward(fs * 7); right(45); pendown(); forward(sqrt(2)*fs); penup(); right(45); forward(fs * 2); done(); } void fontdat_2() { left(90); backward(fs * 2); pendown(); forward(fs); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs * 4); left(45); forward(fs); left(90); forward(fs * 4); penup(); forward(fs); left(90); forward(fs * 8); right(90); done(); } void fontdat_3() { forward(fs * 3); pendown(); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); backward(fs * 2); left(135); pendown(); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 1); penup(); forward(fs * 4); pendown(); forward(fs * 1); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs * 2); done(); } void fontdat_4() { forward(fs); right(90); forward(fs); right(14.04); pendown(); forward(sqrt(1 + pow(4, 2))*fs); left(104.04); forward(fs * 4); penup(); right(90); forward(fs * 3); right(90); forward(fs); right(90); pendown(); forward(fs * 8); penup(); right(90); forward(fs * 2); done(); } void fontdat_5() { pendown(); forward(fs * 4); penup(); backward(fs * 4); right(90); pendown(); forward(fs * 3); left(90); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs); penup(); forward(fs * 6); right(90); forward(fs * 5); done(); } void fontdat_6() { right(90); forward(fs * 4); left(90); pendown(); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs); penup(); backward(fs * 2); left(90); forward(fs); done(); } void fontdat_7() { left(90); backward(fs * 2); pendown(); forward(fs * 2); right(90); forward(fs * 4); right(90); forward(fs * 2); right(18.43); forward(sqrt(pow(6, 2) + pow(2, 2))*fs); penup(); left(18.43); backward(fs * 8); left(90); forward(fs * 4); done(); } void fontdat_8() { forward(fs * 4); pendown(); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); backward(fs * 2); left(135); pendown(); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); left(90); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs * 3); done(); } void fontdat_9() { forward(fs * 4); right(90); forward(fs * 4); right(90); pendown(); forward(fs * 3); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 6); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); right(45); forward(sqrt(2)*fs); right(45); forward(fs * 2); penup(); forward(fs * 6); right(90); forward(fs * 5); done(); done(); } void fontdat_dl() { // "/" Diagonal line left(90); backward(fs * 8); right(20.56); pendown(); forward(sqrt(pow(3, 2) + pow(8, 2))*fs); right(69.44); penup(); forward(fs); } void fontdat_hy() { // "-" hyphen right(90); forward(fs * 4); left(90); pendown(); forward(fs * 3); penup(); left(90); forward(fs * 4); right(90); forward(fs); } void fontdat_sp() { // " " space forward(fs * 3); } void dia8() { pendown(); forward(20); right(60); forward(20); left(60); backward(20); right(60); backward(40); left(60); backward(20); right(60); forward(20); left(60); forward(20); right(45); } |