13-07-2021, 10:30
Lekcje już trochę nadrobione, kod wygląda już inaczej. Lecz pytanie do was czy należało by coś jeszcze poprawić?
Średnio jest to póki co opisane, po za tym jest też tylko dla jednego przycisku ale to tylko do testów więc póki co tyle wystarczy
Kod:
#include <PCF8574.h>
#include <Arduino.h>
#include <Wire.h>
#include <Joystick.h>
PCF8574 pcf8574(0x20);
Joystick_ Joystick;
//Definicje pinów do których podłączam ledy
const int dioda1 = P0; //Pauza Czas
const int przycisk1 = 1; //Pauza Czas
int stan_dioda1 = HIGH;
int stan_przycisk1;
int ostatni_stan_przycisk1 = HIGH;
long lastDebounceTime = 0; // Zmienna potrzebna do przechowynia mierzeonego w milisekundach czasu
long czas_drgania = 100; // Czas na drganie styków
void setup() {
// Ledy
pcf8574.pinMode(dioda1, OUTPUT);
pcf8574.digitalWrite(dioda1, stan_dioda1);
pinMode(przycisk1, INPUT_PULLUP);
pcf8574.begin();
// Initialize Joystick Library
Joystick.begin();
}
// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 1;
// Last state of the button
int lastButtonState[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
void loop() {
// Read pin values
for (int index = 0; index < 4; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}
delay(50);
//Pauza - przycisk1, dioda1
int odczyt1 = digitalRead(przycisk1); //Odczyt stanu przycisku do zmiennej lokalnej
// W tym miejscu rozpoczyna się procedura chroniąca nasz układ przed drganiem styków
//Jeśli aktualnie odczytany stan przycisku jest różny od zmiennej ostatni_stan_przycisku
//Uruchamia się funkcja millis() odliczająca milisekundy
if (odczyt1 != ostatni_stan_przycisk1) {
lastDebounceTime = millis();
}
//Jeśli ostatni czas zmiany stanu przycisku był większa od zmiennej czas_drgania
if ((millis() - lastDebounceTime) > czas_drgania) {
//Jeśli aktualnie odczytany stan przycisku jest nadal różny od zminnej stan_przycisku, przypisuje odczytaną wartość do stan_przycisku
if (odczyt1 != stan_przycisk1) {
stan_przycisk1 = odczyt1;
if (stan_przycisk1 == LOW) { // Jeśli przycisk jest wciśniety (stan wysoki)
stan_dioda1 = !stan_dioda1;//Wyłączenie diody (negacja zmiennej stan_diody przechowującej wartość HiGH)
}
}
}
pcf8574.digitalWrite(dioda1, stan_dioda1); //Ustawienie bierzącego stanu diody na pinie wyjściowym (stan wysoki, lub niski)
ostatni_stan_przycisk1 = odczyt1; //Zapisanie ostatniego stanu przycisku
}
}