#include <Arduino.h>
const int data = 2;
const int latch = 3;
const int clock = 4;
const int TICK = 12;
bool up1=true;
bool up2=true;
bool mode=false; // переключатель конфигурации джойстика
void init_joystick(int data, int latch, int clock)
{
pinMode(data, INPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(5, OUTPUT); // D4 кнопка А
pinMode(6, OUTPUT); // D5 кнопка B
pinMode(7, OUTPUT); // D6 кнопка C
pinMode(8, OUTPUT); // D7 кнопка START
pinMode(9, OUTPUT); // D3 кнопка вверх
pinMode(10, OUTPUT); // D2 кнопка вниз
pinMode(11, OUTPUT); // D1 кнопка влево
pinMode(12, OUTPUT); // D0 кнопка вправо
digitalWrite(clock, HIGH);
}
int get_keys_state_joystick(int data, int latch, int clock)
{
digitalWrite(latch, LOW);
digitalWrite(clock, LOW);
digitalWrite(latch, HIGH);
delayMicroseconds(TICK);
digitalWrite(latch, LOW);
int keys_state = 0;
for (int i = 0; i < 8; ++i) {
keys_state += digitalRead(data) * (1 << i);
digitalWrite(clock, HIGH);
delayMicroseconds(TICK);
digitalWrite(clock, LOW);
delayMicroseconds(TICK);
}
delayMicroseconds(10000);
return keys_state;
}
void setup()
{
init_joystick(data, latch, clock);
}
void loop()
{
int bit_STATE = get_keys_state_joystick(data, latch, clock);
if ( bitRead((bit_STATE), 4)!=true & bitRead((bit_STATE), 3)!=true)
{
mode= true;
}
if ( bitRead((bit_STATE), 3)!=true & bitRead((bit_STATE), 5)!=true)
{
mode= false;
}
// кнопка A огонь
if( bitRead((bit_STATE), 0))
{
if ( mode)
{
digitalWrite(8, HIGH);
}
else
{
digitalWrite(5, HIGH);
}
}
else
{
if ( mode)
{
digitalWrite(8, LOW);
}
else
{
digitalWrite(5, LOW);
}
}
//кнопка B прыжок c дублированием кнопки вверх если mode не активен
if( bitRead((bit_STATE), 1))
{
if(mode)
{
digitalWrite(5, HIGH);
}
else
{
up2=true;
}
}
else
{
if(mode)
{
digitalWrite(5, LOW);
}
else
{
up2 = false;
}
}
//кнопка С смена костюма
if( bitRead((bit_STATE), 2))
{
digitalWrite(6, HIGH);
}
else
{
digitalWrite(6, LOW);
}
// кнопка START пауза/ выход
if( bitRead((bit_STATE), 3))
{
digitalWrite(7, HIGH);
}
else
{
digitalWrite(7, LOW);
}
// кнопка вверх
if( bitRead((bit_STATE), 4))
{
up1=true;
}
else
{
up1=false;
}
if((mode&up1!=true)|(mode!=true&up1!=true|up2!=true ))
{
digitalWrite(9, LOW);
}
else
{
digitalWrite(9, HIGH);
}
// кнопка вниз
if( bitRead((bit_STATE), 5))
{
digitalWrite(10, HIGH);
}
else
{
digitalWrite(10, LOW);
}
//кнопка влево
if( bitRead((bit_STATE), 6))
{
digitalWrite(11, HIGH);
}
else
{
digitalWrite(11, LOW);
}
//кнопка вправо
if( bitRead((bit_STATE), 7))
{
digitalWrite(12, HIGH);
}
else
{
digitalWrite(12, LOW);
}
}
[свернуть]