- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个草图,以根据网络调用的结果来帮助设置远程开门器。我有一个运行 WiServer 的 BlackWidow Arduino,并且 wifi 工作正常,我可以从我的 URL 获得结果。我只是返回 0 或 1 作为内容。
问题出在我的循环中,relayControlState 始终为高电平,而且我似乎无法让循环使继电器关闭/打开。
当我只使用一个简单的“闪烁器”草图时,我可以让继电器正常工作,只有当它与我的服务器获取代码交织在一起时它才不起作用。我缺少什么?代码如下。为什么relayControlState不在WiServer.getStatus回调中更新?继电器是否没有获得足够的能量来切换?
#include <WiServer.h>
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,1,10}; // IP address of WiShield 192.168.1.10
unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network
char ssid[] = {"monitored"}; // max 32 bytes
unsigned char security_type = 3; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"password"}; // max 64 characters
// setup the wireless mode
// infrastructure - connect to AP
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
// IP Address for macpro.local
uint8 ip[] = {192,168,1,12};
// End of wireless configuration parameters ----------------------------------------
// A request that gets the aggregate status of the build system
GETrequest getStatus(ip, 80, "macpro.local", "/open-says-me/index.html");
const int relayPin = 12;
int relayControlState = HIGH;
// Function that sets pin/light states
// BEWARE: THIS FUNCTION IS CALLED MULTIPLE (2) TIMES PER HTTP REQ
// Hidden call before/after call that returns payload 0, 1, 2, or null
void setRelayControlState(char* data, int len) {
// Serial.print("=========================\n\nLEN:\n");
// Serial.print(len);
if(len > 0) {
Serial.print("\nDATA:");
Serial.print(data[len - 1]);
Serial.print("\n");
// Serial.print("\n\nsetRelayControlState\n\n");
if(data[len - 1] == '0') {
relayControlState = LOW;
Serial.print("SET LOW");
}
if(data[len-1] == '1') {
relayControlState = HIGH;
Serial.print("SET HIGH");
}
} else {
relayControlState = LOW;
}
}
void setup() {
pinMode(relayPin, OUTPUT);
Serial.begin(57600);
// Initialize WiServer (we'll pass NULL for the page serving function since we don't need to serve web pages)
WiServer.init(NULL);
// Enable Serial output and ask WiServer to generate log messages (optional)
WiServer.enableVerboseMode(true);
// Have the processData function called when data is returned by the server
getStatus.setReturnFunc(setRelayControlState);
}
// Time (in millis) when the data should be retrieved
long updateTime = 0;
void loop(){
// Check if it's time to get an update
if (millis() >= updateTime) {
// Get another update 15s from now
updateTime += 1000 * 5;
getStatus.submit();
}
// Run WiServer
WiServer.server_task();
// turn on light pins based on stored vals
Serial.print("\nrelayControlState: ");
Serial.print(relayControlState);
Serial.print("\n");
digitalWrite(relayPin, relayControlState);
delay(10);
}
最佳答案
这是最终有效的代码,但它也可能只是加载到 BlackWidow 上的代码行为不一致。我开始切换引脚 - 每次我切换尝试新引脚时,它都会工作一次,但只能工作一次,直到我开始重新启动arduino。似乎它就像断电,而不仅仅是重置或新代码上传。虽然还是有点挑剔,但这是一个轮询 URL 来查找特定最后一个字符的有效示例。如果 1 将引脚设置为高电平 5.5 秒。如果 0 则不执行任何操作。
#include <WiServer.h>
// ---------------------------------------------------------------------------------
// Wireless configuration parameters
// ---------------------------------------------------------------------------------
unsigned char local_ip[] = {192,168,1,10}; // IP address of WiShield 192.168.1.10
unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network
char ssid[] = {"monitored"}; // max 32 bytes
// 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
unsigned char security_type = 3;
// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"password"}; // max 64 characters
// WEP 128-bit keys
prog_uchar wep_keys[] PROGMEM = {
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
};
// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
// ---------------------------------------------------------------------------------
// GET REQUEST
// ---------------------------------------------------------------------------------
// IP Address for macpro.local
uint8 ip[] = {192,168,1,12};
// The request URL
GETrequest getStatus(ip, 80, "macpro.local", "/open-says-me/index.html");
const int relayPin = 3;
int relayControlState = LOW;
// ---------------------------------------------------------------------------------
// Callback for WiServer's getStatus
// ---------------------------------------------------------------------------------
void setRelayControlState(char* data, int len) {
Serial.print("[setRelayControlState] last digit of data: ");
Serial.println(data[len-1]);
Serial.print("[setRelayControlState] len: ");
Serial.println(len);
if(len > 0
&& data[len-1] == '1') {
relayControlState = HIGH;
Serial.print("\nSET HIGH FOR 5.5s\n");
digitalWrite(relayPin, HIGH);
delay(5500);
digitalWrite(relayPin, LOW);
}
}
void setup() {
pinMode(relayPin, OUTPUT);
Serial.begin(57600);
// Initialize WiServer (we'll pass NULL for the page serving function since we don't need to serve web pages)
WiServer.init(NULL);
// Enable Serial output and ask WiServer to generate log messages (optional)
WiServer.enableVerboseMode(true);
// Have the processData function called when data is returned by the server
getStatus.setReturnFunc(setRelayControlState);
}
// Time (in millis) when the data should be retrieved
long updateTime = 0;
void loop(){
// Check if it's time to get an update
if (millis() >= updateTime) {
// Get another update 15s from now
updateTime += 1000 * 15;
getStatus.submit();
Serial.print("end update @ ms ");
Serial.println(millis());
}
WiServer.server_task();
delay(100);
}
关于c - Arduino WiServer 继电器控制 - 无法让继电器切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816590/
我目前正在开发一个页面,该页面显示特定用户的一组特定“任务”的状态。为了获取数据,我有以下中继容器: export default Relay.createContainer(TaskReview,
我正在尝试进行第一个中继查询。我执行了 npm run relay 和 npm run build。一切正常,但在控制台中出现错误: 有谁知道可能导致此错误的原因吗? 更新。 Table.js (co
我有 25 个继电器,至少有 15 种不同的配置,它们必须存储在“数组”或其他简单的东西中……我必须打开/关闭这些继电器 (HiGH/LOW)。 为了使用尽可能少的内存,我想用一个“技巧”来做到这一点
我将首先介绍我的应用程序:简单的投票应用程序,用户可以在其中创建民意调查并进行投票。简单。 目前我的graphql模式由用户类型、民意调查类型和投票类型组成,其中用户和民意调查与其投票具有一对多关系,
我正在从事一个个人项目,涉及通过 USB 从我的计算机向电路发送简单信号。基本上我使用 USB 信号作为 MOSFET 的栅极信号,这将依次激活继电器以打开/关闭各种交流外围设备。例如,如果我想每分钟
我正在尝试用 Python 编写一个程序。它的作用是向 Arduino 发送一个数字,然后 Arduino 打开或不打开继电器。但它不会打开继电器。 Arduino: const int pinLED
我有一个要获取和显示的递归数据结构。我有一个图 ql 类型如下: human { name, children: [human] } 现在我想增量获取数据,因此用于对 HumanList 和
在定义 Relay 容器的片段时,我们可以有条件地包含或跳过字段。 For example ,以下代码仅当 showComments 变量为 true 时才包含 comments。 Relay.cre
我有一个带有 piface 数字连接的树莓派。我在其上运行 apache Web 服务器,并保存了一些用于打开和关闭中继的 Python 脚本。我可以从 Rpi 本身运行这些脚本,但当我尝试从连接到同
我无法在我的应用程序中导航到 /users,因为它不会触发提取我期望的所有查询。 我的应用程序由一个 App 组件和一些包含实际内容的组件组成,例如 Dashboard 或 UserList。还有一个
在relay/graphql中,如何表达响应可以为空的查询。我现在陷入困境,我无法使用空/空响应进行响应,因为中继需要 id 字段(可能还有 graphql 架构中的其他不可为空的字段),并且我无法发
我是一名优秀的程序员,十分优秀!