переменная для выполнения действия или переход к метке
- Войдите на сайт для отправки комментариев
Ср, 26/10/2016 - 19:56
имеется код
И как сделать переход к метке, раньше делал через goto, но тут несколько void и я думаю что можно сделать через переменную.
Как реализовать?
#include <RemoteReceiver.h>
///////////////////////////////////////////////////////////////////////////////////////
#include <MFRC522.h> // это скачанная библиотека "RFID".
///////////////////////////////////////////////////////////////////////
int button = 14;
///////////////////////////////////////////////////////////////////////////
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522C / reate MFRC522 instance.
unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате
int pik = 8;
int kalitka = 7;
int pultC = 5;
int pultD = 6;
int vorota = 3;
int vorota2 =4;
///////////////////////////////////////////////////////////////////////////////////////j
void setup() {
Serial.begin(9600);
RemoteReceiver::init(0, 3, showCode);
////////////////////////////////////////////////////////////////////////////
Serial.println("Prilozhite kartu / Waiting for card...");
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
digitalWrite(vorota , LOW);
digitalWrite(vorota2, LOW);
///////////////////////////////////////////////////////////////////////////j
}
void loop() {
// Поиск новой карточки / Look for new cards.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор карточки / Select one of the cards.
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера карточки.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec*256+uidDecTemp;
}
Serial.println("Serijnyj nomer karty / Card UID: ");
Serial.println(uidDec);
// начинаем сравнивать номер прочитанной корты, с записанным номером карты.
// замените! № "422455350", на номер № вашей карты.
if (uidDec == 637564577)
{digitalWrite(kalitka, HIGH);
///////////////////////////////////////////////////////////////////////////////////////melody
tone(pik, 1200, 677);
delay(200);
tone(pik, 1000, 677);
delay(200);
tone(pik, 1200, 677);
delay(200);
tone(pik, 1000, 677);
delay(200);
tone(pik, 1200, 677);
delay(200);
tone(pik, 1000, 677);
delay(200);
tone(pik, 1200, 677);
delay(200);
tone(pik, 1000, 677);
delay(200);
tone(pik, 1200, 677);
delay(200);
tone(pik, 1000, 677);
delay(200);
tone(pik, 1200, 677);
delay(200);
tone(pik, 1000, 677);
delay(200);
///////////////////////////////////////////////////////////////////////////////////////melody
digitalWrite(kalitka, LOW);
// если номер совпал включим светодиод.
// и отправим сообщение.
Serial.println("Hi ");
}
// также и с другими номерами карт.
else if (uidDec == 959884118)
{
Serial.println("Hi ");
}
else if (uidDec == 695670870)
{
Serial.println("Hi ");
}
else if (uidDec == 695670614)
{
Serial.println("Hi ");
}
else
{
// если номер карты не совпал
Serial.println("Neizvestnaja karta / unknown card");
}
Serial.println("=====================================");
}
void showCode(unsigned long receivedCode, unsigned int period) {
//Note: interrupts are disabled. You can re-enable them if needed.
//Print the received code.
Serial.print("Code: ");
Serial.print(receivedCode);
Serial.print(", period duration: ");
Serial.print(period);
Serial.println("us.");
if (receivedCode == 315198)
{
и перейти к первой метке
tone(pik, 1000, 677);}
else if (receivedCode == 315180)
{tone(pik, 600, 677)
ВТОРОЙ
;
}
else if (receivedCode == 315174)
{ Вот по этому действию надо перейти к метке мелодия
}
else if (receivedCode == 315172)
{tone(pik, 200, 677);
И ЧЕТВЕРТОЙ
}
}
и как сделать эту метку?
имеется код
И как сделать переход к метке, раньше делал через goto, но тут несколько void и я думаю что можно сделать через переменную.
Как реализовать?
Поиск выдает void в четырех местах.
Меток незаметил.
Вы злоупотребляете чтото?
Не нужны метки. Помещаешь нужные куски кода в функции и вызываешь эти функции в любом месте программы, где это нужно.
я же спросил как сделать эту метку, их тут поэтому и нету.
хорошо поставлю по другому
при выполнении действия переменная становится истинной
в другой части кода проверяестся условие
если переменная истина, то выполняется действие.
вы спросите зачем? много rfid меток+ пульт
писать под каждое действие нерационально.
вот и как это написать в коде?
болеан?
инт?
вот это то что я имел в виду,
Спасибо, очень помог
значит пишу чтото подобное
for(I=1;) код
а как сделать чтобы I =1 при выполнении действия и возвращать обратно.
Что-то у вас громозко получилось.
у меня еще пульт 433 мгц
И что? Там похожая конструкция как и кнопка
У меня серва это замок. Закрывает если дверь закрыта и истекло время. Кнопка возле двери, удаленая кнопка. Два ключа метки. В принципе можно одной , но куча дубликатов. А радио это просто обычная кнопка по программе. Только физически вместо контакта радио. И даже никаких дисплеев не надо.
значит пишу чтото подобное
for(I=1;) код
а как сделать чтобы I =1 при выполнении действия и возвращать обратно.
мрак... шуруй Си учить..
Viktor_Samsonov, не используй говнокод от qwone. В его коде баги, этот олень целочисленную арифметику не понимает.
О анитифанат появился. Выпил яд? Что еще не подействовал.
Viktor_Samsonov,
знаете, Logic Вам посоветовал С подучить, присоединюсь.
Я честно пытался понять что Вам нужно и помочь (реально чемтно пытался), внимаетльно читал то, что Вы написали, но не смог поянть. Вы неправильно используете слова (видимо, не зная, что они означают) и текст получается просто бредом.
Я действительно хочу Вам помочь, попробуйте объяснить что Вам нужно простыми словами в понимании которых Вы уверены (без void и пр). например в коде поставьте или ещё как, но пока я понять Вас не сумел.
2. ФУНКЦИИ
Функция - это именованная последовательность операций, которая находится вне других функций и может быть использована в любой другой функции. Функции позволяют разделить программу на несколько маленьких подпрограмм, которые в совокупности выполняют поставленную задачу. Также функции можно многократно использовать, что значительно сокращает размер кода программы.
Определение функции:
тип_возвращаемого_значения имя_функции (тип имя_переменной1, тип имя_переменной2)
{тело функции; }
Сама функция может принимать значение определенного типа. Этот тип указывается перед именем функции. Значение, которое принимает функция, пишется после слова return и называется возвращаемым значением. Если функция не имеет возвращаемого значения, а просто выполняет какую-либо последовательность операций, то перед именем функции указывается слово void.
Функция может иметь параметры. Это те значение, которые в ходе своего выполнения может использовать функция, и которые передаются в нее из главной функции (в нашем случае функции loop()). Параметры функции указываются в круглых скобках после имени функции. При определении функции параметры указываются с их типами. При вызове функции параметры могут указываться явно в виде значений или как переменные (без указания типа переменной), причем имена переменных при определении и вызове функции могут не совпадать.
Например: Есть два светодиода, которые подключены к 10 и 11 пинам. С использованием функции нужно поочередно зажигать светодиоды с интервалом 1000 миллисекунд.
void ledOn(int n) //создание функции с параметром n (номер светодиода)
{
if (n == 1)
{
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
}
else if (n == 2)
{
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
}
}
void setup()
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop()
{
ledOn(1); //вызов функции с параметром 1 (зажжётся первый светодиод)
delay(1000);
ledOn(2); //вызов функции с параметром 2 (зажжётся второй светодиод)
delay(1000);
}
как то так нужно?
действительльно это то что я искал, спасибо,Jeka_M