//// РИСОВАЛКА "КУРСОР"(3 режима)
#include <VGAX.h>
VGAX vga;
byte x=60;//переменные координат курсора
byte y=30;//
byte xx=x;//переменные координат предыдущего положения курсора
byte yy=y;//
byte xxx=x;// переменные координат первого конца отрезка
byte yyy=y;//
byte cvet=3;//
byte k=0;//
byte ris=1;//
int t=30;//
void setup() {
  vga.begin();
  vga.clear(0); 
 digitalWrite(A1, HIGH);// включить подтягивающий резистор (курсор вправо) комбинация клавиш вправо-влево это смена режимов курсор (не рисовать)- рисовать 
 digitalWrite(A2, HIGH);// включить подтягивающий резистор (курсор вверх)  комбинация клавиш вверх-вниз это смена цвета рисования
 digitalWrite(A3, HIGH);// включить подтягивающий резистор (курсор влево)
 digitalWrite(A4, HIGH);// включить подтягивающий резистор (курсор вниз)
 digitalWrite(A5, HIGH);// включить подтягивающий резистор (смена режимов рисовалок - пиксели,отрезки,полосы)
 
}
void loop() {
 if(!digitalRead(A5)){ris++;k=0;if(ris>3){ris=1;}if(ris==2){xxx=x;yyy=y;}vga.delay(10*t);}//смена режимов рисовалок 
 vga.fillrect(0,0,2,4,cvet);//маркер режима цвета
 vga.fillrect(3,0,2,4,ris);//маркер режима рисования пикселями,отрезками,полосой
 vga.fillrect(6,0,2,4,k);//маркер режима рисовать-не рисовать   
/////  
 if(ris==1){ kursor_1();}
 if(ris==2){ kursor_2();}
 if(ris==3){ kursor_3();}
}
/////////////////////////////////////////////////////////
/////// базовая функция рисования точками по следу курсора 
void kursor_1()//
{
xx=x;yy=y;
if(!digitalRead(A1)&&!digitalRead(A3)){k=!k;vga.delay(10*t);}// смена режимов курсор (не рисовать)-рисовать 
if(!digitalRead(A2)&&!digitalRead(A4)){cvet++;if(cvet>3){cvet=1;}if(cvet<1){cvet=3;}vga.delay(10*t);}// смена цвета рисования
//////   
if(!digitalRead(A1)&&x!=119){x++;}
if(!digitalRead(A3)&&x!=0){x--;}
vga.delay(t); 
if(!digitalRead(A2)&&y!=0){y--;}
if(!digitalRead(A4)&&y!=59){y++;}
vga.delay(t); 
if(xx!=x||yy!=y){vga.putpixel(xx,yy,k*cvet);}
vga.putpixel(x,y,3);
vga.delay(t);
}
///////////////////////////////////////////////////////////
/////// базовая функция рисования отрезками
void kursor_2()//
{
xx=x;yy=y;
if(!digitalRead(A1)&&!digitalRead(A3)){line_(x,y,xxx,yyy,cvet);xxx=x;yyy=y;vga.delay(10*t);}// рисование нового отрезка от конца предыдущего до точки курсора 
if(!digitalRead(A2)&&!digitalRead(A4)){cvet++;if(cvet>3){cvet=1;}if(cvet<1){cvet=3;}vga.delay(10*t);}// смена цвета рисования
//////   
if(!digitalRead(A1)&&x!=119){x++;}
if(!digitalRead(A3)&&x!=0){x--;}
vga.delay(t); 
if(!digitalRead(A2)&&y!=0){y--;}
if(!digitalRead(A4)&&y!=59){y++;}
vga.delay(t); 
if(xx!=x||yy!=y){vga.putpixel(xx,yy,0);}
vga.putpixel(x,y,3);
vga.delay(t);
}
///////////////////////////////////////////////////////////
/////// базовая функция рисования отрезка по координатам концов заданным цветом
void line_(float x1, float y1, float x2, float y2, int c){
  int divisions = int(1.1*1*sqrt(pow((y2 - y1),2) + pow((x2 - x1),2))); 
  for (int i = 0; i <= divisions; i++){
    int x = int(x1 + i*(x2 - x1)/divisions);
    int y = int(y1 + i*(y2 - y1)/divisions);
    if(x > 0 && x < VGAX_WIDTH && y > 0 && y < VGAX_HEIGHT){
      vga.putpixel(x, y, c); 
    }
  }
}
///////////////////////////////////////////////////////////
/////// базовая функция рисования набором точек по следу курсора 
void kursor_3()//
{
xx=x;yy=y;
if(!digitalRead(A1)&&!digitalRead(A3)){k=!k;vga.delay(10*t);}// смена режимов курсор (не рисовать)-рисовать 
if(!digitalRead(A2)&&!digitalRead(A4)){cvet++;if(cvet>3){cvet=1;}if(cvet<1){cvet=3;}vga.delay(10*t);}// смена цвета рисования
//////   
if(!digitalRead(A1)&&x!=119){x++;}
if(!digitalRead(A3)&&x!=0){x--;}
vga.delay(t); 
if(!digitalRead(A2)&&y!=0){y--;}
if(!digitalRead(A4)&&y!=59){y++;}
vga.delay(t); 
if(xx!=x||yy!=y)
{
//vga.putpixel(xx,yy,k*cvet);
vga.fillrect(xx,yy,4,4,k*cvet); 
}
vga.putpixel(x,y,3);

vga.delay(t);
}
///////////////////////////////////////////////////////////

