Повесил 2 реле на 11 и 12 пин.
Код был культурно слизан с данного форума, но чуть-чуть под себя переделан.
Код: Выделить всё
#ifdef RELAYS_FEATURE
byte RPIN[2] ={11,12};
byte RCTRPIN[2]={11,12};
int current_val[2];
int old_val[2];
void relInit() {
for (byte i=0; i<=1; i++){
pinMode(RCTRPIN[i],LOW);
}
Serial.print("Relays module... ");
modulRel = MODUL_ENABLE;
Serial.print("started\n");
}
void rel_control() {
for (byte i=0; i<=1; i++) {
current_val[i]=digitalRead(RCTRPIN[i]);
if (old_val[i] != current_val[i]){
if (digitalRead(RCTRPIN[i])== HIGH) {
rel_sw(i, 1);
}else {
rel_sw(i, 0);
}
old_val[i] = current_val[i];
}
}}
void rel_sw(byte num, byte stat) {
if(stat==1) {
digitalWrite(RPIN[num], HIGH);
Serial.print("REL");
Serial.print(num+1);
Serial.print(": on\n");
REL_state[num] = 1;
} else {
digitalWrite(RPIN[num], LOW);
Serial.print("REL");
Serial.print(num+1);
Serial.print(": off\n");
REL_state[num] = 0;
}
}
#endif
По примеру leds добавил пару строк в Ajax.
Код: Выделить всё
else if (StrContains(HTTP_req, "request_generic")) {sendXmlAnswer(cl); SetREL(); responseGeneric(cl);}
.
.
.
// Generic
void SetREL() {
if (StrContains(HTTP_req, "REL1=1")) {
REL_state[0] = 1; // save LED state
digitalWrite(11, HIGH);
} else if (StrContains(HTTP_req, "REL1=0")) {
REL_state[0] = 0; // save LED state
digitalWrite(11, LOW);
}
// REL 2 (pin 12)
if (StrContains(HTTP_req, "REL2=1")) {
REL_state[1] = 1;
digitalWrite(12, HIGH);
} else if (StrContains(HTTP_req, "REL2=0")) {
REL_state[1] = 0;
digitalWrite(12, LOW);
}
}Код: Выделить всё
var strREL1 = "";
var strLED3 = "";
var strLED4 = "";
var REL2_state = 0;
var LED4_state = 0;
...
// REL 1
if (this.responseXML.getElementsByTagName('REL')[0].childNodes[0].nodeValue === "checked") {
document.REL_form.REL1.checked = true;
document.getElementById("REL1").innerHTML = "ON";
} else {
document.REL_form.REL1.checked = false;
document.getElementById("REL1").innerHTML = "OFF";
}
// REL 2
if (this.responseXML.getElementsByTagName('REL')[2].childNodes[0].nodeValue === "on") {
document.getElementById("REL2").innerHTML = "REL 2 is ON (D12)";
document.getElementById("REL2").innerHTML = "ON";
LED3_state = 1;
} else {
document.getElementById("REL2").innerHTML = "REL2 is OFF (D5)";
document.getElementById("REL2").innerHTML = "OFF";
REL2_state = 0;
}
// LED 4
if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue === "on") {
document.getElementById("LED4").innerHTML = "LED 4 is ON (D3)";
document.getElementById("ld3").innerHTML = "ON";
LED4_state = 1;
} else {
document.getElementById("LED4").innerHTML = "LED 4 is OFF (D3)";
document.getElementById("ld3").innerHTML = "OFF";
LED4_state = 0;
}
...
request.open("GET", "request_generic" + strREL1 + strREL2 + strLED3 + strLED4 + randomNoCache(), true);
request.send(null);
setTimeout('getArduinoIO()', 1000);
strREL1 = "";
strREL2 = "";
strLED3 = "";
strLED4 = "";
} // getArduinoIO()
...
unction GetCheck() {
if (REL_form.REL1.checked) {
strREL1 = "&REL1=1";
} else {
strREL1 = "&REL1=0";
}
}
/* -----------------------------------------
service LEDs when button checked/unchecked
-------------------------------------------- */
function GetButton1() {
if (REL2_state === 1) {
REL2_state = 0;
strREL2 = "&REL2=0";
} else {
REL2_state = 1;
strREL2 = "&REL2=1";
}
}
function GetButton2() {
if (LED4_state === 1) {
LED4_state = 0;
strLED4 = "&LED4=0";
} else {
LED4_state = 1;
strLED4 = "&LED4=1";
}
...
<h3>Светодиоды,<br>использующие чекбоксы</h3>
<form id="check_RELs" name="REL_form">
<input type="checkbox" name="REL1" value="0" onclick="GetCheck()" /> REL 1 (D11)<br /><br />
</form>
</div>
</div>
<div class="cell-4">
<div class="box">
<h3>Светодиоды,<br>использующие кнопки</h3>
<button type="button" id="REL2" onclick="GetButton1()">REL 2 is OFF (D12)</button><br /><br />
<button type="button" id="LED4" onclick="GetButton2()">LED 4 is OFF (D9)</button><br /><br />
</div>
</div>Как понимаете, ничего с моим реле не происходит, как бы яростно я не тыкал по кнопкам.
Направьте на путь истинный.
Что я опять сделал не так?