#2 Апаратні питання » Arduino as programmer Atmega328 » 2017-10-25 14:15:32

Suro
відповідей: 3

Здравстуйте.

Есть простой скетч.Загружаю в Ардуино Уно четко работает,но когда тот же самый скетч прошиваю в Атмега328 (используя Ардуино как программатор) работает некорректно.

И плюс всему этому, снимаю с Ардуино процессор  - работает.

Откликните пожалуйста.

#3 Re: Програмування Arduino » Трудная задача. Светодиод и кнопки) » 2017-10-25 14:10:14

вот уже получилось. очень спосибо 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); //выключаем лампочку
      }

}

#4 Програмування Arduino » Трудная задача. Светодиод и кнопки) » 2017-10-21 14:58:49

Suro
відповідей: 3

Есть у меня две кнопки и нужно после обнуления таймера выключить светодиод.

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 - светодиод включается а таймер оставается обнуленным.

#5 Програмування Arduino » Снова светодиод и кнопка) » 2017-10-20 14:44:18

Suro
відповідей: 0

Алгоритм:

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);

#6 Апаратні питання » Обманывать модуля RFID-RC522 ? » 2017-07-16 18:45:09

Suro
відповідей: 1

здравствуйте друзья ,, я прочел в интернете что для RFID-RC522 модуля соответсвуют следующие :
Mifare S50, Mifare S70, Mifare UltraLight, Mifare Pro, Mifare DESfire,Mifare Classic(1K).

В пакете обычно с модулем бывают метки Mifare 1K ,,

можно ли копировать эти метки и обманывать модуля?

#7 Re: Програмування Arduino » ожидание всех импульсов » 2017-07-08 20:14:57

вот весь мой код ,,, вот например посматрите на функцию 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();
  }
  
}

#8 Програмування Arduino » ожидание всех импульсов » 2017-07-05 15:13:18

Suro
відповідей: 3

Сначала скетч ждёт первый импульс.
Захватывает текущее время и считает импульсы, пока время меньше 3 сек.
Через 3 сек проверяет сколько импульсов пришло.
Если пришло 10 импульсов - мигает 14 раз.
Если пришло 20 импульсов - мигает 10 раз.

помогите в скетче пожалуйста друзья

Підвал форуму