Ви не увійшли.
Сторінки 1
нет не прошил ,, а какое имеет это зачение?
Здравстуйте.
Есть простой скетч.Загружаю в Ардуино Уно четко работает,но когда тот же самый скетч прошиваю в Атмега328 (используя Ардуино как программатор) работает некорректно.
И плюс всему этому, снимаю с Ардуино процессор - работает.
Откликните пожалуйста.
вот уже получилось. очень спосибо renoshnik и Вячеслав Азаров.
int BUTTON1_PIN = 9;
int BUTTON2_PIN = 10;
int LED_PIN = 11;
unsigned long timer;
bool button1; //переменный состояний кнопок и леда
bool button2;
bool led;
bool button1_on; //флаг нажатия кнопки 1
void setup(){
pinMode(BUTTON1_PIN, INPUT);
pinMode(BUTTON2_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
button1 = digitalRead(BUTTON1_PIN); //считываются состояния кнопок и лампочки
button2 = digitalRead(BUTTON2_PIN);
led = digitalRead(LED_PIN);
if(button1 && !button1_on) { //если кнопка1 нажата, но флаг что она была нажата не стоит
button1_on = 1; //ставим флаг что кнопка нажата
delay(20); //ждем 20мс чтоб дребезг ушел
button1 = digitalRead(BUTTON1_PIN); //проверяем нажата ли кнопка все еще
if(button1){ //если таки нажата
timer = millis(); //засекаем текущее время, т.к. в изначальном условии есть флаг -
//оно засечется только в момент нажатия на кнопку
if(!led){digitalWrite(LED_PIN,HIGH);} //если лампочка не горит, то зажигаем ее
}}
if(!button1 && button1_on) {button1_on=0;
digitalWrite(LED_PIN,LOW);} // если кнопка отжата - снимаем флаг нажатия кнопки
//и отключаем лампочку
if(button2 && led){ //а тут тупо каждый цикл пока зажата кнопка 2 при горящем леде
timer = millis(); //будет обновляться время в таймере
}
if(button2 && button1 && !led){ //если кнупку2 нажали при удерживаемой 1 и потухшем леде
delay(20); //типа дребезг
button2 = digitalRead(BUTTON1_PIN); //проверяем кнопку2
if(button2){ //если нажата
digitalWrite(LED_PIN,HIGH);
timer = millis(); //подрубаем светодиод и засекаем время
}}
if(led && millis()-timer>10000){ // если лампочка горит и время не обновлялось более 10с
digitalWrite(LED_PIN,LOW); //выключаем лампочку
}
}
Есть у меня две кнопки и нужно после обнуления таймера выключить светодиод.
0 0 - отжаты: светодиод выключен, 10 сек таймер обнулен
1 0 - кнопка1 нажата: включить светодиод и запустить 10 сек таймер.
Если 1 0 состояние менее 10сек - светодиод горит и таймер запущен.
Если 1 0 состояние более 10сек - светодиод отключается и таймер обнуляется.
Если 1 0 состояние стало 1 1 до 10сек - светодиод оставается вкл и таймер обнуляется (горит столько сколько обе нажаты).
Если 1 0 состояние стало 1 1 после 10сек - светодиод включается а таймер оставается обнуленным.
1 1 - кнопка1 и кнопка2 нажаты: светодиод горит и таймер обнулен.
Если 1 1 состояние стало 1 0 - таймер включается и после 10сек светодиод выключается.
Если 1 1 состояние стало 0 1 - светодиод отключается и таймер обнуляется.
0 1 - светодиод выключен, 10 сек таймер обнулен.
Если 0 1 состояние стало 0 0 - светодиод выключен, 10 сек таймер обнулен(тоест ничего не делать).
Если 0 1 состояние стало 1 1 - светодиод включается а таймер оставается обнуленным.
Алгоритм:
1. Если кнопка 1 нажата - включить светодиод;
2. Если кнопка 1 нажата 10 секунд, и при этом кнопка 2 не нажата - выключить светодиод;
3. Если нажаты обе кнопки - включить светодиод, выключить его через 10 секунд после того, как кнопка 2 становится не нажатой.
Не могу дописать скетч.
int switchPin1 = 9;
int switchPin2 = 10;
int ledPin = 11;
int interval;
void setup()
{
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop(){
if (digitalRead(switchPin1) == HIGH){
interval = millis();
digitalWrite(ledPin,HIGH);
if (interval - millis()<10000)
digitalWrite(ledPin,LOW);
здравствуйте друзья ,, я прочел в интернете что для RFID-RC522 модуля соответсвуют следующие :
Mifare S50, Mifare S70, Mifare UltraLight, Mifare Pro, Mifare DESfire,Mifare Classic(1K).
В пакете обычно с модулем бывают метки Mifare 1K ,,
можно ли копировать эти метки и обманывать модуля?
вот весь мой код ,,, вот например посматрите на функцию tas(); ,, что эта функция делает ,, при каждом появлении импульса Status -у прибавляет 1 и когда Status == 10 выполняет действие ,,,,, мне надо чтоб Ардуино подождал всех импульсов и только тогда выполнять действие ,, приблизительно должен быть так но реализовать не получается
switch(Status) {
case 10:
//действие
break;
case 20:
//действие
break;
}
вот и код
#include <SPI.h>
#include <MFRC522.h>
MFRC522 rfid(10, 9); // пины SDA, RST
unsigned long Key, KeyTemp; // для храниения № ключа
const int buttonPin = 4; // номер входа, подключенный к кнопке
const int ledPin = 5; // номер выхода светодиода
boolean lastButten = LOW; // предыдущее состояние кнопки
boolean currentButten = LOW; // текущее состояние кнопки
int status = 0; // текущий статус
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // скорость порта
SPI.begin(); // инициализация SPI
rfid.PCD_Init();} // инициализация rfid модуля
boolean debvance (boolean last) //убираем дребизг
{
boolean current = digitalRead (buttonPin); // считываем данные с кнопки
if (last != current) // Если текущее состояни еотличететься от предыдущего
{
delay (5); // Ждем 5 милисек.
current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
return current;
}
}
void in(){
currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
{
status = ++status; // инвертируем Статус
}
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
if (status == 10) //если статус 5
{
for (int i=0; i<10; i++){
digitalWrite(ledPin,HIGH);
delay(10);
digitalWrite(ledPin,LOW);
delay(50);
}
status = 0;
}
}
void tas(){
currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
{
status = ++status; // инвертируем Статус
}
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
if (status == 10) //если статус 5
{
for (int i=0; i<11; i++){
digitalWrite(ledPin,HIGH);
delay(10);
digitalWrite(ledPin,LOW);
delay(50);
}
status = 0;
}
}
void qsan(){
currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
{
status = ++status; // инвертируем Статус
}
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
if (status == 10) //если статус 5
{
for (int i=0; i<2; i++){
digitalWrite(ledPin,HIGH);
delay(50);
digitalWrite(ledPin,LOW);
delay(50);
}
status = 0;
}
}
void loop() {
static uint32_t past = 0;
if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
past = millis();
Key = 0;
for (byte i = 0; i < rfid.uid.size; i++) { // Выдача серийного № ключа
KeyTemp = rfid.uid.uidByte[i];
Key = Key * 256 + KeyTemp;
}
Serial.println();
Serial.print("Card №: ");
Serial.print(Key); // Выводим № ключа в консоль
if (Key == 515280555) tas();
if (Key == 1459297918) qsan();
}
if (millis() - past >= 50) {
Serial.println();
Serial.print("0"); // Поиск нового ключа
if (Key == 0) in();
}
}
Сначала скетч ждёт первый импульс.
Захватывает текущее время и считает импульсы, пока время меньше 3 сек.
Через 3 сек проверяет сколько импульсов пришло.
Если пришло 10 импульсов - мигает 14 раз.
Если пришло 20 импульсов - мигает 10 раз.
помогите в скетче пожалуйста друзья
Сторінки 1