D-BP(Daiso製品でつくる安価で便利な点字プリンタ）

# 概要

「安価で使いやすい点字プリンタが欲しい！」の声に
安価：電気系以外はDaiso製品のみ使用
使いやすい：PC／スマホから操作可能（iPhoneのVoiceOver機能も使える）
を開発しました。
![概要.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181708/f84bf408-9c82-82b4-1472-f9c7af8f8084.jpeg)

![構成図.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181708/9b38cc6c-62f1-c2f9-1ce6-3d4cc2fe4b72.jpeg)


![システム構成図.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181708/1c963a13-c9bd-d4c5-f962-0ae116d2131f.jpeg)

# コード

```Javascript:tenjiPrinter.js
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link
      rel="stylesheet"
      href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
    />
    <link rel="stylesheet" href="/css/starter-sample.css" />
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script
      src="https://unpkg.com/obniz@3.18.0/obniz.js"
      crossorigin="anonymous"
    ></script>
  </head>
 <body>


<h1>点字プリンタ操作画面</h1>
<p>
<label>入力項目：<input type="text" id="nameText" style="width:300px;height:50px"></label>
<input type="button" value="印刷" id="checkButton" style="width:100px;height:50px">
</p>

<p id="msg">
<p id="msg2">

</p>
  <br />
    <button
      id="bFW"
      class="btn btn-warning"
      style="width:20%;height:100px;font-size:50px;"
    >
      紙送り
    </button>
    <button
      id="bPUSH"
      class="btn btn-warning"
      style="width:20%;height:100px;font-size:50px;"
    >
      点打ち
    </button>
       <br />
         <br />
    <button
      id="bP1"
      class="btn btn-warning"
      style="width:20%;height:100px;font-size:50px;"
    >
      位置１
    </button>
    <button
      id="bP2"
      class="btn btn-warning"
      style="width:20%;height:100px;font-size:50px;"
    >
      位置２
    </button>
     <button
      id="bP3"
      class="btn btn-warning"
      style="width:20%;height:100px;font-size:50px;"
    >
      位置３
    </button>
       <br />
<script>

 



var obniz = new Obniz("★★★★YOUR　ID★★★★");
obniz.onconnect = async function () {
 
  //var servo = obniz.wired("ServoMotor", {gnd:0,  vcc:1,signal:2});
 var servo = obniz.wired("ServoMotor", {gnd:0, signal:2});
 
  var solenoid = obniz.wired('Solenoid', {gnd:3, signal:4});
 
  //var servoR = obniz.wired("ServoMotor", {gnd:5, signal:7});
  var motor = obniz.wired("DCMotor",  {forward:5, back:6});


function doPush(num) {
  if(num == 1){
  servo.angle(18);
  obniz.wait(500); 
  solenoid.on();
  obniz.wait(200); 
  solenoid.off();
  }else if (num == 2){
  servo.angle(33);      
  obniz.wait(500); 
  solenoid.on();
  obniz.wait(200); 
  solenoid.off();
  }else{
  servo.angle(50);
  obniz.wait(500); 
  solenoid.on();
  obniz.wait(200); 
  solenoid.off();      
  }
}

/*
function doFW() {
  motor.power(20);
  motor.forward();
  setTimeout(function(){
    motor.stop();
  }, 50);
  obniz.wait(200); 
 }
*/
function doFW() {
  motor.power(20);
  motor.forward();
  obniz.wait(150); 
  motor.stop();
  obniz.wait(200); 
}

  $("#bFW").on("touchstart mousedown", () => {
  doFW();
  });

  $("#bPUSH").on("touchstart mousedown", () => {
  solenoid.on();
  obniz.wait(200); 
  solenoid.off();
  });

  $("#bP1").on("touchstart mousedown", () => {
      doPush(1);
  });

  $("#bP2").on("touchstart mousedown", () => {
      doPush(2);
  });
    $("#bP3").on("touchstart mousedown", () => {
      doPush(3)
  });

//フォームを試す
//https://www.javadrive.jp/javascript/form/index1.html
//お名前サンプル  
function butotnClick(){
  let arrayText = nameText.value.split(''); //テキストを数値化
  let arrayTextTenji = [];//点字文字を数字にしたものを確保
  let arrayTextTenjiRev = [];//点字文字を数字にしたものをリバースしたもの
  
  //点字文字を数字に変換
  for (var i=0; i<arrayText.length; i++){
    if(arrayText[i] == 'A'){
    arrayTextTenji.push(1); 
    arrayTextTenji.push(0); 
    }else if (arrayText[i] == 'B'){
    arrayTextTenji.push(3); 
    arrayTextTenji.push(0); 
    }else if (arrayText[i] == 'C'){
    arrayTextTenji.push(1); 
    arrayTextTenji.push(1); 
    }else if (arrayText[i] == 'D'){
    arrayTextTenji.push(1); 
    arrayTextTenji.push(3); 
    }else if (arrayText[i] == 'E'){
    arrayTextTenji.push(1); 
    arrayTextTenji.push(2); 
    }else if (arrayText[i] == 'F'){
    arrayTextTenji.push(3); 
    arrayTextTenji.push(4); 
    }else if (arrayText[i] == 'G'){
    arrayTextTenji.push(3); 
    arrayTextTenji.push(3); 
    }else if (arrayText[i] == 'H'){
    arrayTextTenji.push(3); 
    arrayTextTenji.push(2); 
    }else if (arrayText[i] == 'I'){
    arrayTextTenji.push(2); 
    arrayTextTenji.push(1); 
    }else if (arrayText[i] == 'J'){
    arrayTextTenji.push(2); 
    arrayTextTenji.push(3); 
    }else if (arrayText[i] == 'K'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(0); 
    }else if (arrayText[i] == 'L'){
    arrayTextTenji.push(7); 
    arrayTextTenji.push(0); 
    }else if (arrayText[i] == 'M'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(1); 
    }else if (arrayText[i] == 'N'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(3); 
    }else if (arrayText[i] == 'O'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(2); 
    }else if (arrayText[i] == 'P'){
    arrayTextTenji.push(7); 
    arrayTextTenji.push(1); 
    }else if (arrayText[i] == 'Q'){
    arrayTextTenji.push(7); 
    arrayTextTenji.push(3); 
    }else if (arrayText[i] == 'R'){
    arrayTextTenji.push(7); 
    arrayTextTenji.push(2); 
    }else if (arrayText[i] == 'S'){
    arrayTextTenji.push(6); 
    arrayTextTenji.push(1); 
    }else if (arrayText[i] == 'T'){
    arrayTextTenji.push(6); 
    arrayTextTenji.push(3); 
    }else if (arrayText[i] == 'U'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(4); 
    }else if (arrayText[i] == 'V'){
    arrayTextTenji.push(7); 
    arrayTextTenji.push(4); 
    }else if (arrayText[i] == 'W'){
    arrayTextTenji.push(2); 
    arrayTextTenji.push(7); 
    }else if (arrayText[i] == 'X'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(5); 
    }else if (arrayText[i] == 'Y'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(7); 
    }else if (arrayText[i] == 'Z'){
    arrayTextTenji.push(5); 
    arrayTextTenji.push(6); 
     } else{
    arrayTextTenji.push(0); 
    }
    arrayTextTenji.push(9); //字間用２つ
  }

  arrayTextTenjiRev = arrayTextTenji.slice().reverse();
  //arrayTextTenjiRev.slice().reverse();
  let TextTenji = arrayTextTenji.join(',')
  let TextTenjiRev = arrayTextTenjiRev.join(',')
  
  msg.innerText = '文字変換後：' + TextTenji ;
  msg2.innerText = '文字変換＋並べ替え後：' + TextTenjiRev ;
 
 
  //テキストを数列に変換https://techacademy.jp/magazine/32457
 
  for (var i=0; i<arrayTextTenjiRev.length; i++){
    if(arrayTextTenjiRev[i] == 0){
		 doFW();
    }else if (arrayTextTenjiRev[i] == 1){
		 doPush(1);
    }else if (arrayTextTenjiRev[i] == 2){
		 doPush(2);
    }else if (arrayTextTenjiRev[i] == 3){
		 doPush(1);
		 doPush(2);
    }else if (arrayTextTenjiRev[i] == 4){
		 doPush(3);
    }else if (arrayTextTenjiRev[i] == 5){
		 doPush(1);
		 doPush(3);
    }else if (arrayTextTenjiRev[i] == 6){
		 doPush(2);
		 doPush(3);
    }else if (arrayTextTenjiRev[i] == 7){
		 doPush(1);
		 doPush(2);
     doPush(3);
    } else{
     //doFW();  
    }
	doFW();
  }


}//End of butotnClick()

let nameText = document.getElementById('nameText');
nameText.value = 'SALT';
let msg = document.getElementById('msg');

let checkButton = document.getElementById('checkButton');
checkButton.addEventListener('click', butotnClick);
//お名前サンプル 

};


</script>
</body>
</html>```