- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用名为 IDCartao 的全局字符串变量来保存 rfid 卡的 id。读取 id 后,我在带有 enc28j60 的服务器上搜索它们,如果 id 在服务器上,我会发出一声蜂鸣声,如果没有,我会发出两声蜂鸣声。
但是,我遇到了全局字符串 IDCartao 的问题,它在函数循环中具有正确的 ID 值,但是当我在另一个名为 my_callback 的函数中搜索该值时,我没有正确的值,我只是有空字符串“”。
/**
* Pinagem Leitor RFID:
* CLK - Pino 13
* MISO - Pino 12
* MOSI - Pino 11
* SDA - Pino 10
* RST - Pino 09
* GND - GND Arduino
* 3.3 - 3.3v do Arduino
* NC - Não Conectado
*/
/**
* Pinagem Módulo Ethernet:
* 5v - Não Conectado
* LNT - Não Conectado
* CLK - Não Conectado
* SO - Pino 12
* WOL - Não Conectado
* SCK - Pino 13
* ST - Pino 11
* RST - Não Conectado
* CS - Pino 8
* Q3 - 3.3v do Arduino
* GND - GND Arduino
*/
/**
* Pinagem de Outros componentes:
* BUZZER - Pino 7
*/
//DECLARAÇÃO DAS BIBLIOTECAS UTILIZADAS NO PROJETO
#include <SPI.h> //Biblioteca que permite a comunicação com dispositivos SPI (Serial Peripheral Interface), sendo o Arduino como dispositivo principal
#include <MFRC522.h> //Biblioteca do Leitor RFID
#include <EtherCard.h> //Biblioteca do Módulo Ethernet
//DECLARAÇÃO DOS PINOS UTILIZADOS NO ARDUINO
#define PINO_SDA 10 //Constante que define onde o pino SDA do leitor RFID está ligado
#define PINO_RST 9
#define BUZZER 7
MFRC522 mfrc522 (PINO_SDA, PINO_RST); //Cria instância MFRC522
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; //mac do módulo ethernet
byte Ethernet::buffer[500];
static uint32_t timer;
const char website[] PROGMEM = "192.168.0.103"; //endereço IP do servidor no Raspberry Pi
String conteudo; //Armazena nessa variável todas as informações contidas no servidor
unsigned int tamanho; //variável para guardar o tamanho do retorno do servidor
static char *IDCartao;
//ESCOPO DAS FUNÇÕES
void lerID ();
void my_callback (byte status, word off, word len);
void acessoLiberado();
void acessoNegado();
void testaValor();
void setup() {
Serial.begin(9600);
Serial.println ("Iniciando setup");
SPI.begin();
pinMode (BUZZER, OUTPUT);
mfrc522.PCD_Init(); //Inicia MFRC522 (Leitor RFID)
delay(100);
if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0) {
Serial.println("Falha ao acessar o Modulo Ethernet");
}
else {
Serial.println("Modulo Ethernet conectado!");
}
if (!ether.dhcpSetup()) {
Serial.println("DHCP failed");
}
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
if (!ether.dnsLookup(website)) {
Serial.println("DNS failed");
}
ether.printIp("SRV: ", ether.hisip);
delay(100);
IDCartao = (char*) calloc (12, sizeof(char));
Serial.println("Setup finalizado!");
Serial.println ("Aproxima");
*IDCartao = "WAGNER";
}
void loop() {
ether.packetLoop(ether.packetReceive());
//String card = lerID();
//card.toCharArray(IDCartao, card.length()+1);
//*IDCartao = lerID();
lerID();
if (IDCartao[0] != '\0') { //Se um cartão tiver sido aproximado e sua ID lida com sucesso
//Serial.print ("ID DO CARTAO: ");
//Serial.write (IDCartao);
delay(100);
if (millis() > timer) {
Serial.println("VAI LER SITE");
timer = millis() + 5000;
Serial.println();
testaValor();
ether.browseUrl(PSTR("/"), "", website, my_callback);
}
delay(5000);
testaValor3();
Serial.println("CONTEUDO:");
Serial.print(conteudo);
}
}
void testaValor() {
Serial.println ("DENTRO DO TESTA VALOR");
Serial.write(IDCartao);
Serial.println ("\nSUCESSO");
}
void testaValor2() {
Serial.println ("DENTRO DO TESTA VALOR 2");
Serial.write(IDCartao);
Serial.println ("\nSUCESSO");
}
void testaValor3() {
Serial.println ("DENTRO DO TESTA VALOR 3");
Serial.write(IDCartao);
Serial.println ("\nSUCESSO");
}
void lerID () {
if (mfrc522.PICC_IsNewCardPresent ()) {
if (mfrc522.PICC_ReadCardSerial ()) {
String conteudorfid = "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++) {
conteudorfid.concat (String (mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
conteudorfid.concat (String (mfrc522.uid.uidByte[i], HEX));
}
conteudorfid.toUpperCase ();
int i;
for (i = 0; i < conteudorfid.substring(1).length(); i++) {
IDCartao[i] = conteudorfid.substring(1)[i];
}
i++;
IDCartao[i] = '\0';
}
//Serial.println(IDCartao); //ID do cartão lida com sucesso
}
else {
IDCartao[0] = '\0';
}
}
/**
* Função que faz a leitura do servidor armazenando seu conteudo numa String
*/
void my_callback (byte status, word off, word len) {
testaValor2();
Ethernet::buffer[off+500] = 0;
conteudo = (const char*) Ethernet::buffer + off;
String verifica(IDCartao);
if (conteudo.indexOf(verifica) > 0) { //procura pela ID do cartão no servidor
Serial.println("Acesso liberado");
Serial.println(verifica);
Serial.print ("POSICAO: ");
Serial.println (conteudo.indexOf(verifica));
acessoLiberado();
}
else {
Serial.println ("ACESSO NEGADO!");
Serial.print ("CARTAO VERIFICA: ");
Serial.println (verifica);
Serial.print ("IDCartao: ");
Serial.write (IDCartao);
acessoNegado();
}
}
void acessoLiberado() {
tone(BUZZER, 1000); //1kHz
//digitalWrite (LED_VERDE, HIGH);
delay (300);
noTone (BUZZER);
//digitalWrite (LED_VERDE, LOW);
*IDCartao = "";
}
void acessoNegado() {
tone (BUZZER, 1000);
//digitalWrite (LED_VERMELHO, HIGH);
delay (150);
noTone (BUZZER);
delay (150);
tone (BUZZER, 1000);
delay (150);
noTone (BUZZER);
//digitalWrite (LED_VERMELHO, LOW);
*IDCartao = "";
}
这就是发生的事情。看看函数 testaValor2(),这是第二个被调用的函数,但她是在 testaValor3() 之后调用的。我不知道为什么会发生这种情况。抱歉,质量不好
最佳答案
当多个函数正在编辑全局变量时,需要将它们设为 volatile 。例如,实例化 IDCartao
如下:
volatile String IDCartao;
这会强制 Arduino 在每次请求时从内存中获取 IDCartao
的最新值。
关于c - Arduino 不同函数中具有两个值的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43163079/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!