/*
 * viring 
 * right joystick x = A6
 *                y = A7
 *                sw = A10
 * left joystick x = A9
 *               y = A8
 *               sw = A11
 * Nrf24-l01 Ce = 22
 *           CSN = 24
 */ 


#include <SPI.h>
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include "Adafruit_GFX.h"// Hardware-specific library
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define modra   0x033F
#define slabomodra 0x859F
#define maslova 0xEF34
#define slabosiva 0xC635
#define siva    0xA514
RF24 radio(22,24);
struct dataStruct {
  int Vrp;
  int Vrl;
  bool autopilot;
} odoslat;
struct datastruct {
  int d;
  int dp;
  int dl;
}prijat;
struct data_struct {
  int Vrp;
  int Vrl;
  int d;
  int dp;
  int dl;
} pred; 
int sw;
bool predsw;

byte adresy[][6] = {"1Node", "2Node"};
void setup() {
  tft.begin(0x9341);
  tft.setRotation(1);
  radio.begin();
  radio.setChannel(103);
  radio.setPayloadSize(32);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.openWritingPipe( adresy[0]);
  radio.openReadingPipe(1, adresy[1]);
  radio.startListening();
  tft.fillScreen(maslova);
  tft.setTextSize(2);
  tft.fillRect(0, 0, 320, 24, modra);
  tft.fillRect(0, 25, 320, 2, slabomodra);
  tft.fillRect(50, 87, 40, 20, BLACK);
  tft.fillRect(140, 87, 40, 20, BLACK);
  tft.fillRect(230, 87, 40, 20, BLACK);
  tft.drawFastHLine(0, 145, 320, slabosiva);
  tft.drawFastHLine(0, 146, 320, siva);
  tft.drawFastHLine(0, 147, 320, slabosiva);
  tft.drawFastVLine(159, 147, 80, slabosiva);
  tft.drawFastVLine(160, 147, 80, siva);
  tft.drawFastVLine(161, 147, 80, slabosiva);
  tft.fillRect(0, 214, 320, 2, slabomodra);
  tft.fillRect(0, 216, 320, 24, modra);
  tft.setTextColor(WHITE);
  tft.setCursor(65, 5);
  tft.print("Transmitter V1.6");
  tft.setCursor(60, 220);
  tft.print("Autopilot-");
  tft.setTextColor(BLACK);
  tft.setCursor(37, 68);
  tft.print("Left");
  tft.setCursor(126, 68);
  tft.print("Front");
  tft.setCursor(224, 68);
  tft.print("Right");
}

void loop() {
 
  radio.stopListening();
  odoslat.Vrp = analogRead(A7);
  odoslat.Vrl = analogRead(A8);
  sw = analogRead(A10);
  if (sw < 100) {
    delay(500);
    odoslat.autopilot = !odoslat.autopilot;
  }
  radio.write(&odoslat, sizeof(odoslat));
  radio.startListening();
  if (radio.available()) {
    tft.fillCircle(308, 12, 10, GREEN);
    while (radio.available()) {
      radio.read(&prijat, sizeof(prijat));
    }

  }
  else {
    tft.fillCircle(308, 12, 10, RED);
    
  }
  tft.setTextColor(modra);
  tft.setCursor(180, 220);
  if (predsw != odoslat.autopilot) {
    tft.fillRect(180, 220, 140, 20, modra);

  }
  tft.setTextColor(WHITE);
  if(odoslat.autopilot == true) tft.print("Active");
  if(odoslat.autopilot == false) tft.print("Inactive");
  tft.setTextColor(maslova);
  if (pred.Vrl != odoslat.Vrl) {
    tft.setCursor(65, 172);
    tft.print(pred.Vrl);
  }
  if (pred.Vrp != odoslat.Vrl) {
    tft.setCursor(225, 172);
    tft.print(pred.Vrp);
  }
  tft.setTextColor(BLACK);
  if (pred.dl != prijat.dl) {
    tft.setCursor(55, 89);
    tft.print(pred.dl);
  }
  if (pred.d != prijat.d) {
    tft.setCursor(145, 89);
    tft.print(pred.d);
  }
  if (pred.dp != prijat.dp) {
    tft.setCursor(235, 89);
    tft.print(pred.dp);
  }
  tft.setTextColor(GREEN);
  tft.setCursor(55, 89);
  tft.print(prijat.dl);
  tft.setCursor(145, 89);
  tft.print(prijat.d);
  tft.setCursor(235, 89);
  tft.print(prijat.dp);
  tft.setTextColor(BLACK);
  tft.setCursor(65, 172);
  tft.print(odoslat.Vrl);
  tft.setCursor(225, 172);
  tft.print(odoslat.Vrp);
  delay(100);
  
  pred.Vrl = odoslat.Vrl;
  pred.Vrp = odoslat.Vrp;
  pred.d = prijat.d;
  pred.dl = prijat.dl;
  pred.dp = prijat.dp;
  predsw = odoslat.autopilot;
}
