Arduino Yun に Web サーバーをセットアップしました。この Web ページには、さまざまな音を鳴らすブザーを制御する一連のボタンと、ステッピング モーターを制御するボタンがあります。AccelStepper ライブラリを使用するリンクされたコードを使用しています。
ブザーのボタンは正常に機能し、クリックするとサウンドが再生されます。ただし、モーターの場合は、ボタンをクリックすると、ボタンをクリックした後、ドライバー ボードの LED が 1 秒間点灯しますが、それだけです。
ブザーとは異なり、モーターはその位置に移動している間は常にコマンドが真である必要があり、そうでない場合は停止すると思われます。したがって、ウェブページのボタンはスイッチのように機能する必要があります。クリックするとオンになり、オンのままになり、もう一度クリックするとオフになり、オフのままになります。しかし、これを行う方法がわかりません。
あるいは、このステッピング モーターの経験があり、accelstepper なしで使用する方法を知っている人がいるかもしれません。(私がやろうとしているのは、モーターを特定の位置に回すことだけです。)
これがあまり混乱しないことを願っています。私はとても近くにいますが、このモーターは私に大きな痛みを引き起こしています. どうもありがとう!
スケッチコード:
//Bridge Setup
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
YunServer server;
String readString;
//Motor Setup
#include <AccelStepper.h>
#define HALFSTEP 8
// Motor pin definitions
#define motorPin1 3 // IN1 on the ULN2003 driver 1
#define motorPin2 4 // IN2 on the ULN2003 driver 1
#define motorPin3 5 // IN3 on the ULN2003 driver 1
#define motorPin4 6 // IN4 on the ULN2003 driver 1
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
//////////////
//const int thereader = 8;
int Buzzer1 = 9;
//int readerstate = 0;
void setup() {
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(100.0);
stepper1.setSpeed(200);
stepper1.moveTo(20000);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
Bridge.begin();
//digitalWrite(13, HIGH);
// Listen for incoming connection only from localhost
// (no one from the external network could connect)
server.listenOnLocalhost();
server.begin();
////////////
//pinMode(Buzzer1, OUTPUT);
// initialize the pushbutton pin as an input:
//pinMode(thereader, INPUT);
}//--(end setup )---
void loop() {
YunClient client = server.accept();
// There is a new client?
if (client) {
// read the command
String command = client.readString();
command.trim(); //kill whitespace
Serial.println(command);
if (command == "rolloutcarpet") {
stepper1.run();
//delay(2000);
//stepper1.moveTo(-stepper1.currentPosition());
}
if (command == "playfanfare") {
tone(Buzzer1,400,200);
delay(500);
tone(Buzzer1,400,200);
delay(500);
tone(Buzzer1,450,225);
delay(300);
tone(Buzzer1,450,225);
delay(500);
tone(Buzzer1,400,200);
delay(500);
tone(Buzzer1,450,200);
delay(300);
tone(Buzzer1,600,300);
delay(3000);
}
else if (command == "stopfanfare") {
delay(10000);
}
client.stop();
}
delay(50);
}
HTML コード:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="zepto.min.js"></script>
<script type="text/javascript">
function rolloutcarpet()
{
$('#content').load('/arduino/rolloutcarpet');
}
function playfanfare()
{
$('#content').load('/arduino/playfanfare');
}
function stopfanfare()
{
$('#content').load('/arduino/stopfanfare');
}
</script>
</head>
<body onload="setInterval(refresh, 500);">
<span id="content"></span>
<button onclick="rolloutcarpet()">Roll Out the Carpet</button>
<button onclick="ledoff()">LED BLUE OFF</button>
<br><br><br>
<button onclick="playfanfare()">PLAY FANFARE</button>
<button onclick="stopfanfare()">STOP FANFARE</button>
<img src="yun.png" align="right">
</body>
</html>