เขียนออก LED หลายหลายตัวแบบค่อยให้กดออนออฟทำไงอ่ะครับต้องแก้กับเพิ่มตรงไหนบ้างครับ ใครรู้ช่วยหน่อยครับ
ครับ อันนี้อยู่ที่การประยุกต์ใช้ ลองศึกษาที่ตัวอย่างนี้ครับ สอน วิธี ใช้งาน Ethernet Shield W5100 กับ Arduino โมดูลที่ทำให้ Arduino ต่อเน็ตได้
เมื่อทำ LED เปิด/ปิด ได้ 1 ตัวแล้ว ก็ลองประยุกต์หลาย ๆ ตัวโดยทำความเข้าใจในโคดตัวอย่างก่อนประมาณนี้ครับ โดยจะเช็คเงื่อนไขจาก url ที่ส่งมา ว่าจะให้เปิดปิดดวงไหน
///////////////////// control arduino pin
if(readString.indexOf("on") >0)//checks for on // เช็คว่า url มีคำว่า on ให้ทำงานคำสั่งนี้
{
digitalWrite(5, HIGH); // set pin 5 high
Serial.println("Led On");
}
if(readString.indexOf("off") >0)//checks for off
{
digitalWrite(5, LOW); // set pin 5 low
Serial.println("Led Off");
}
if(readString.indexOf("on2") >0)//checks for on // เช็คว่า url มีคำว่า on2 ให้ทำงานคำสั่งนี้
{
digitalWrite(6, HIGH); // set pin 6 high
Serial.println("Led On");
}
if(readString.indexOf("off2") >0)//เช็คว่า url มีคำว่า off2 ให้ทำงานคำสั่งนี้
{
digitalWrite(6, LOW); // set pin 6 low
Serial.println("Led Off");
}
มีหลายวิธี ลองดัดแปลงดูนะครับ
คือLEDออนพร้อมกันไม่ได้อ่ะครับ ถ้าที่ละตัวได้ครับเช่นตัวห้าออนแล้วออฟตัวหกจะออนได้แล้วออฟ ถ้าหกออนแล้วออฟตัวห้าจะออนได้ ถ้ากดออนพร้อมกันไม่ได้อ่ะครับคือห้าออนหกออนไม่ได้อ่ะครับ ใครรู้เยอะๆช่วยที่ครับ
#include "SPI.h"
#include "Ethernet.h"
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
/*byte ip[] = { 192, 168, 0, 4 }; // ip in lan
/*byte gateway[] = { 192, 168, 0, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask*/
EthernetServer server(80); //server port
String readString;
//////////////////////
void setup(){
pinMode(6, OUTPUT); //pin selected to control
pinMode(5, OUTPUT); //pin selected to control
//start Ethernet
Ethernet.begin(mac);
Serial.println("ArduinoAll server LED test"); // so I can keep track of what is loaded
}
void loop(){
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
//Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
///////////////
Serial.println(readString); //print to serial monitor for debuging
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("");
client.println("");
client.println("ArduinoALL");
client.println("");
client.println("");
client.println("ArduinoAll Internet Button");
// DIY buttons
client.println("<a href= /on6><h1>ON6</h1></a>");
client.println("<a href = /off6><h1>OFF6</h1></a>");
client.println("");
client.println("");
// DIY buttons
client.println("<a href= /on5><h1>ON5</h1></a>");
client.println("<a href = /off5><h1>OFF5</h1></a>");
client.println("");
client.println("");
delay(1);
//stopping client
client.stop();
///////////////////// control arduino pin
if(readString.indexOf("on5") >0)//checks for on
{
digitalWrite(5, HIGH); // set pin 5 high
Serial.println("Led On5");
}
if(readString.indexOf("off5") >0)//checks for off
{
digitalWrite(5, LOW); // set pin 5 low
Serial.println("Led Off5");
}
if(readString.indexOf("on6") >0)//checks for on
{
digitalWrite(6, HIGH); // set pin 5 high
Serial.println("Led On6");
}
if(readString.indexOf("off6") >0)//checks for off
{
digitalWrite(6, LOW); // set pin 5 low
Serial.println("Led Off6");
}
readString="";
}
}
}
}
}
การสั่งงานขึ้นอยู่กับผู้เขียนโปรแกรม อยากให้ทำงานแบบไหนได้ตามต้องการ ขึ้นอยู่กับการออกแบบ
ดูตัวอย่างนี้นะครับ ผมส่งค่าเป็น 0 กับ 1 ของ LED แต่ละตัว กรณีนี้มี 2 ตัว ก็ส่ง URL เป็น xx ไปแทนสถานะของ led แต่ละดวง เช่น 10(หนึ่งศูนย์) แปลว่า ดวงที่ 1 ติด ดวงที่ 2 ดับ ทดลองโดยส่ง url เป็น ip/10
if(readString.indexOf("11") >0)
{
digitalWrite(5, HIGH); // set pin 5 high
digitalWrite(6, HIGH); // set pin 6 high
}
if(readString.indexOf("00") >0)
{
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
if(readString.indexOf("10") >0)
{
digitalWrite(5, 1);
digitalWrite(6, 0);
}
if(readString.indexOf("01") >0)
{
digitalWrite(5, 0);
digitalWrite(6, 1);
}
แต่ทำยังไง OUTPUT ก็ออกพร้อมกันทั้ง 2 ดวงไม่ได้อ่ะ ครับคือถ้า OUTPUT ออกมาพร้อมกันไม่ได้อ่ะครับสงสัย ต้องค่อยๆ วิจัยกันยาวแน่เลย