Arduino Polska Forum
Jak do tego projektu dodać klawiaturę membranową? - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Jak do tego projektu dodać klawiaturę membranową? (/watek-jak-do-tego-projektu-doda%C4%87-klawiatur%C4%99-membranow%C4%85)



Jak do tego projektu dodać klawiaturę membranową? - Atypowy - 26-03-2020

Projekt polega na tym, gdy przyłożymy(poprawną) kartę do czytnika RFID_RC522, zapala sie zielona dioda i obraca się silnik krokowy (28BYJ-48).
To akurat udało się zrobić, ale chciałbym do tego dodać klawiaturę membranową. Czyli gdy wpiszę kod ''123A" zadziało się to samo.
(Arduino MEGA 2560)

Podaje kod który jak na razie udało mi się zrobić:

#include <Wire.h>
#include <Stepper.h> 
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 53
#define RST_PIN 5
#define LED_Zielona 47  
#define LED_Czerwona  46  
#define ILOSC_KROKOW 32 
Stepper mojSilnik(ILOSC_KROKOW, 31, 35, 33, 37);


MFRC522 rfid(SS_PIN, RST_PIN); 

const byte poprawna_karta[] = {0x99, 0x67, 0xAC, 0x15};


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522
  pinMode(LED_Zielona,OUTPUT); 
  pinMode(LED_Czerwona,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;


  if (rfid.uid.uidByte[0] == poprawna_karta[0] ||
      rfid.uid.uidByte[1] == poprawna_karta[1] ||
      rfid.uid.uidByte[2] == poprawna_karta[2] ||
      rfid.uid.uidByte[3] == poprawna_karta[3] )
    {
     
          Serial.println("Poprawna karta"); 
          digitalWrite(LED_Zielona,HIGH);
          mojSilnik.setSpeed(650);
          mojSilnik.step(1024);
          delay(500
         
          );
          digitalWrite(LED_Zielona,LOW);
   
   
  }
  else
  {
          Serial.println("Niepoprawna karta!!!");
          digitalWrite(LED_Czerwona,HIGH);
          delay(2000);
          digitalWrite(LED_Czerwona,LOW);
   
  }
 
  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}


RE: Jak do tego projektu dodać klawiaturę membranową? - kaczakat - 26-03-2020

Naucz się używać millis(), timerów sprzętowych lub wykorzystywać biblioteki je oferujące, bez delay, bo inaczej zawsze dodanie elementu do programu będzie pisaniem wszystkiego od nowa, a najczęściej niewykonalne, bo jedna część będzie wpływać na inne w takim stopniu, że to nie będzie działać.
Otwórz przykład z blinkWithoutDelay z Arduino, na koniec swojego loop doklej tego blinka ale z czasem 50ms, zobacz na ile Twój program przestaje reagować. Pomyśl co byłoby gdybyś odpalił sobie Windowsa i włączył muzykę, zaczął coś pisać w Wordzie i czekał po 2-3s z wciśniętym przyciskiem by Word to zauważył. Tak na prawdę to nawet nie musiałbyś nic włączać, bo w tle działa już kilkadziesiąt programów i komputer w ogóle nie reagowałby nawet na próbę ruszenia myszką w celu odpalenia Word'a, zakładając że dotarłbyś do tego etapu bo nie musisz podać hasła do logowania.


RE: Jak do tego projektu dodać klawiaturę membranową? - Robson Kerman - 26-03-2020

Zapalaniem diody i obracaniem silnika powinna zajmować się oddzielna funkcja.
Sprawdzaniem klawiatury powinna zajmować się oddzielna funkcja.
Sprawdzaniem czytnika powinna zajmować się oddzielna funkcja.
loop() powinna wywoływać odpowiednie funkcje w określonej kolejności.
Po to Bozia dała nam C++, żeby nie brnąć w to, co Ty robisz.
Kilka linijek kodu, a powoduje frustracje i nieczytelność nabytą.