Добрый день , создаю систему с помощью которой буду управлять светодиодом. Для этого использую три платы Arduino UNO: Управляющую, ИК-передатчик(используется UART), ИК-приемник(используется UART и модуль ИК-приемника 1838B). В значениях используются случайные числа , посредством генерации с использованием функции “random()”, возникла проблема при передаче случайных чисел(по UART передаются непонятные символы). Не знаю что с ними можно сделать . Используются ячейки памяти EEPROM для хранения информации.
Код управляющей платы.
#include <Wire.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#define RX 12
#define TX 13
SoftwareSerial mySerial(RX,TX);
const int but = 10;
const int but2 = 11;
const int but3 = 7;
const int but4 = 8;
int State;
int State2;
int State3;
int State4;
unsigned char b, n;
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
lcd.init();
lcd.backlight();
lcd.print("C");
lcd.print("O");
lcd.print("N");
lcd.print("T");
lcd.print("R");
lcd.print("O");
lcd.print("L");
pinMode(but,INPUT_PULLUP);
pinMode(but2,INPUT_PULLUP);
pinMode(but3,INPUT_PULLUP);
pinMode(but4,INPUT_PULLUP);
int State = 1;
int State2 = 1;
int State3 = 1;
int State4 = 1;
Serial.begin(9600);
mySerial.begin(9600);
randomSeed(analogRead(0));
}
void loop()
{
State3 = digitalRead(but3);//Создание случайного значения и запись его в ячейку памяти()
if(State == LOW)
{
lcd.clear();
b = random(10,255);
EEPROM.update(0,b);
n = EEPROM[0];
}
State = digitalRead(but);//Передача ключа на УА(Кнопка на 10 входе)
if(State == LOW)
{
lcd.clear();
lcd.print("1");
Serial.println(n);
Serial.setTimeout(1000);
}
State2 = digitalRead(but2);//Передача ключа на носитель(Кнопка на 11 входе)
if(State2 == LOW)
{
lcd.clear();
lcd.print("2");
mySerial.println(n);
mySerial.setTimeout(1000);
}
State4 = digitalRead(but4);//Принудительное открытие УА(Кнопка на 8 входе)
if(State4 == LOW)
{
Serial.println('10');
Serial.setTimeout(1000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("D");
lcd.print("I");
lcd.print("S");
lcd.print("T");
lcd.print("A");
lcd.print("N");
lcd.print("C");
lcd.print("E");
lcd.print(" ");
lcd.print("A");
lcd.print("C");
lcd.print("C");
lcd.print("E");
lcd.print("S");
lcd.print("S");
delay(5000);
lcd.clear();
}
if(Serial.available())
{
char signID = Serial.read();
if(signID == '1', signID != '0', signID != n , signID != b)
{
lcd.clear();
lcd.setCursor(1,0);//Установка курсора в начало второй строки
lcd.print("U");//Вывод текста на дисплее
lcd.print("S");
lcd.print("E");
lcd.print("R");
lcd.print(" ");
lcd.print("1");
lcd.setCursor(1,1);//Установка курсора в начало второй строки
lcd.print("A");
lcd.print("C");
lcd.print("C");
lcd.print("E");
lcd.print("S");
lcd.print(" ");
lcd.print("G");
lcd.print("R");
lcd.print("A");
lcd.print("N");
lcd.print("T");
lcd.print("E");
lcd.print("D");
delay(5000);
lcd.clear();
}
else if(signID == '10', signID != '1', signID != n )//Сигнализация об аварии на линии
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("L");
lcd.print("I");
lcd.print("N");
lcd.print("E");
lcd.print(" ");
lcd.print("F");
lcd.print("A");
lcd.print("I");
lcd.print("L");
lcd.print("U");
lcd.print("R");
lcd.print("E");
delay(5000);
lcd.clear();
}
}
}
Код ИК-передатчика(пульта)
#define cr_pin 9
#define RX 12
#define TX 13
#include <EEPROM.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(RX,TX);
const int BUT = 10;
int State = 1;
char n;
char a;
char m;
void setup()
{
pinMode(BUT,INPUT_PULLUP);
Serial.begin(9600);
mySerial.begin(9600);
tone(cr_pin,38000);
}
void loop()
{
if(mySerial.available()>0)
{
m = mySerial.read();
EEPROM.update(1,m);
n = EEPROM [1];
mySerial.println(n);
mySerial.setTimeout(1000);
}
State = digitalRead(BUT);
if(State == LOW)
{
EEPROM.update(3,'1');
a = EEPROM[3];
Serial.println(n);
Serial.setTimeout(1000);
Serial.println(a);
Serial.setTimeout(1000);
}
}
Код принимающей части
#include <EEPROM.h>
#include <SoftwareSerial.h>
#define RX 12
#define TX 13
SoftwareSerial mySerial(RX,TX);
unsigned char a , b , m ;
boolean c;
const int BUT = 11;
const int ledPin = 10;
const int BUT2 = 9;
int State = 1;
int State2 = 2;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(BUT, INPUT_PULLUP);
pinMode(BUT2, INPUT_PULLUP);
}
void loop()
{
if(mySerial.available())//Принятие сигнала от РМО
{
m = mySerial.read();
EEPROM.update(1,m);
a = EEPROM [1];
mySerial.setTimeout(1000);
if(m == 10, m != c)//Дистанционное открытие стойки УА с РМО
{
digitalWrite(ledPin,HIGH);
}
}
if(Serial.available())//Принятие сигнала от ИК-пульта
{
EEPROM.update(2,Serial.read());
b = EEPROM [2];
Serial.setTimeout(1000);
EEPROM.update(3,Serial.read());
c = EEPROM[3];
Serial.setTimeout(1000);
if(a == b, a != '0', b != '0')//Предоставление доступа с помощью ИК-пульта
{
digitalWrite(ledPin, HIGH);
}
else if(c == '1', c != a, c != b )//Отправка информации о пользователе на РМО
{
mySerial.println(c);
mySerial.setTimeout(1000);
}
}
State = digitalRead(BUT);//Сигнализация об аварии на линии
if(State == LOW)
{
mySerial.println(2,BIN);
mySerial.setTimeout(1000);
}
State2 = digitalRead(BUT2);//Закрытие стойки
if(State2 == LOW)
{
digitalWrite(ledPin, LOW);
}
}