Передатчик и приемник Ардуино
привет, я использую передатчик и приемник Arduino, он работает правильно с отправкой и получением имени пользователя и пароля, но я бы включил проверку имени пользователя, если он действительно открывает светодиод, я добавил это в код, но кажется, что код игнорирует его (последняя часть), а также я хочу, чтобы он одновременно принимал пароль и имя пользователя
это код восстановления
#include <RH_ASK.h>//включаем библиотеку RadioHead ASK
#include <SPI.h> // включаем зависимую библиотеку SPI
RH_ASK rf_driver; // создать объект ASK
int ledon = 13;
String userid;
String password;
//RH_ASK ID1; // создать объект ASK
//RH_ASK pass1; // создать объект ASK
void setup() {
rf_driver.init(); // инициализируем объект ASK
Serial.begin(9600); //настройка серийного монитора на 9600
//если(!rf_driver.init())
//Serial.print("Ошибка инициализации");
}
void loop() {
// установить буфер на размер ожидаемого сообщения
uint8_t buf[9];
uint8_t buflen =sizeof(buf);
//проверить правильность размера полученного пакета
if (rf_driver.recv(buf,&buflen))
{
int i;
// получено сообщение с корректной контрольной суммой
Serial.print("id: ");
Serial.println((char*)buf);
userid =(char*)buf;
Serial.println(userid);
}
delay(5000);
uint8_t buf2[8];
uint8_t buflen2 = sizeof(buf2);
if (rf_driver.recv(buf,&buflen))
{
int i;
// получено сообщение с корректной контрольной суммой
Serial.print("password: ");
Serial.println((char*)buf);
password = (char*)buf;
Serial.println(password);
}
delay(5000);
while ( userid =="A00034732" && password == "123456789"){
digitalWrite(ledon, HIGH);
delay(2000);
digitalWrite(ledon, LOW);
}
}
код передатчика ----
//Включаем библиотеку шифт-кеинга RadioHead Amplitidue
#include <RH_ASK.h>
// Подключаем зависимую библиотеку ISP
#include <SPI.h>
//создаем объект с амплитудной манипуляцией
RH_ASK rf_driver;
void setup() {
// инициализируем объект ASK
rf_driver.init();
Serial.begin(9600);
//если(!rf_driver.init())
//Serial.print("Ошибка инициализации");
}
void loop()
{
const char *pass= "123456789";
rf_driver.send((uint8_t *)pass, strlen(pass));
rf_driver.waitPacketSent();
delay(5000);
const char *ID= "A00034732";
rf_driver.send((uint8_t *)ID, strlen(ID));
rf_driver.waitPacketSent();
delay(5000);
//const char *pass= "12345678";
//rf_driver.send((uint8_t *)pass, strlen(pass));
//rf_driver.waitPacketSent();
// задержка (5000);
}
@amal, 👍0
1 ответ
▲ 1
Вы не сравниваете строки — вы сравниваете адреса строк. Используйте strcmp()
.
while (
(strcmp(userid, "A00034732") == 0) &&
(strcmp(password, "123456789") == 0)
) {
,
@Majenko
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Я хочу преобразовать его в целое число, @amal