Kapitán Spiccato a Major Espressivo

Zo stránky Robotický krúžok
Verzia z 17:11, 6. december 2024, ktorú vytvoril Palo (diskusia | príspevky)
Skočit na navigaci Skočit na vyhledávání

Dron program.png

15. nov. 2024

Arduino a displej 8x8:

rozsvietenie rámčeka:

#include "MaxLedControl.h"

LedControl lc=LedControl(11,13,7,1);

void setup() {
   lc.shutdown(0,false);
   lc.setIntensity(0,8);
   lc.clearDisplay(0);
}

void loop() {
  int r, c, stav;
  
  for (stav = 1; stav >= 0; stav--)
  {
    for (r = 0; r < 8; r++)
    {
      lc.setLed(0,r,0,stav);
      delay(300);
    }
    
    for (c = 1; c < 8; c++)
    {
      lc.setLed(0,7,c,stav);
      delay(300);
    }

   for (r = 6; r >= 0; r--)
    {
      lc.setLed(0,r,7,stav);
      delay(300);
    }
    
    for (c = 6; c > 0; c--)
    {
      lc.setLed(0,0,c,stav);
      delay(300);
    }
  }
}


Riadenie LED pomocou joysticku:

Displej arduino.jpg

#include "MaxLedControl.h"

LedControl lc=LedControl(11,13,7,1);

int x = 3;
int y = 3;

void setup() {
   Serial.begin(9600);
   lc.shutdown(0,false);
   lc.setIntensity(0,8);
   lc.clearDisplay(0);
   pinMode(5, OUTPUT);
   digitalWrite(5, 1);
   lc.setLed(0,x,y,1);
}

void loop() {
  if (digitalRead(14))
  {
    Serial.println("click");
  }
  int osx = analogRead(1);
  int osy = analogRead(2);
  Serial.print(osx);
  Serial.print(" ");
  Serial.println(osy);
  if ((osx < 400) && (x > 0)) 
  { 
    lc.setLed(0,x,y,0);
    x--;
    lc.setLed(0,x,y,1);
    delay(500);
  }
  if ((osx > 630) && (x < 7)) 
  { 
    lc.setLed(0,x,y,0);
    x++;
    lc.setLed(0,x,y,1);
    delay(500);
  }  
  if ((osy < 400) && (y > 0)) 
  { 
    lc.setLed(0,x,y,0);
    y--;
    lc.setLed(0,x,y,1);
    delay(500);
  }
  if ((osy > 630) && (y < 7)) 
  { 
    lc.setLed(0,x,y,0);
    y++;
    lc.setLed(0,x,y,1);
    delay(500);
  }
}


Prvé misie:

Prve misie.png

prve_misie.zip

Prve misie.jpg

Nová verzia hry:

#include "MaxLedControl.h"

LedControl lc=LedControl(11,13,7,1);

int x = 3;
int y = 3;
int cielx, ciely;
int uroven;
long rychlost_prisery;
int cas_kroku;

int px, py;

int pocitadlo, zasviet, najviac;
unsigned long odblokovany_cas = 0;
int ppoc, pvid;

void start_hry()
{
   x = 3;
   y = 3;

  lc.clearDisplay(0);
 
  do {
     cielx = rand() % 8;
     ciely = rand() % 8;
   } while ((cielx == x) && (ciely == y));
  
   px = 7;
   py = 7;
   
   zobraz_uroven();
   lc.clearDisplay(0);
   lc.setLed(0,x,y,1);

}

void setup() {
   Serial.begin(9600);
   lc.shutdown(0,false);
   lc.setIntensity(0,8);
   pinMode(5, OUTPUT);
   digitalWrite(5, 1);
   srand(analogRead(6));
   najviac = 100;
   zasviet = 90 ;
   pocitadlo = 0;
   uroven = 1;
   cas_kroku = 250;

   ppoc = 0;
   pvid = 1;
   rychlost_prisery = 1000;

   start_hry();   
}

void prehral()
{
  for (int i = 0; i < 8; i++)
    {
      for (int r = 0; r < 8; r++)
        for (int s = 0; s < 8; s++)
          if ((abs(r-y) <= i) && (abs(s - x) <= i))
            lc.setLed(0,s,r,1);
      delay(250);
    }
}

void zobraz_uroven()
{
  for (int i = 0; i < uroven; i++)
  {
    lc.setLed(0,i % 8,i / 8,1);
    delay(200);
  }
  delay(300);
}


void smajl()
{
  lc.clearDisplay(0);
  lc.setLed(0,1,1,1);
  lc.setLed(0,2,1,1);

  lc.setLed(0,6,1,1);
  lc.setLed(0,5,1,1);
  
  lc.setLed(0,3,3,1);
  lc.setLed(0,4,4,1);
  lc.setLed(0,3,4,1);
  lc.setLed(0,4,3,1);

  lc.setLed(0,2,7,1);
  lc.setLed(0,3,7,1);
  lc.setLed(0,4,7,1);
  lc.setLed(0,5,7,1);

  lc.setLed(0,1,6,1);
  lc.setLed(0,6,6,1);

  uroven++;  
  cas_kroku = cas_kroku * 7 / 8;
  rychlost_prisery = rychlost_prisery * 7 / 8;
  ppoc = 0;
}
void loop() {
  
  ppoc++;
  if (ppoc == rychlost_prisery) ppoc = 0;
  if (ppoc == rychlost_prisery / 2)
  {
    lc.setLed(0,px,py,0);

   if (pvid) do {
      if (uroven > 1)  // pri vyssich urovniach sa prisera hybe niekedy smerom k hracovi
      {
        if (rand() % uroven > 0)    // v polovici pripadov sa pohne k hracovi
        {
            if (rand() & 1)    // nahodne sa pohne bud po riadku alebo po stlpci
            {
              if (px > x) px--;    // pohyb v stlpci smerom k hracovi
              else if (px < x) px++;  
            }
            else
            {
              if (py > y) py--;   //  pohyb v riadku smerom k hracovi
              else if (py < y) py++;  
            }
            break;  // ak sme sa uz pohli k hracovi, nehybeme sa nahodne
        }
      }
      // ak je uroven = 1, alebo je nahodna polovica, tak sa pohne iba nahodne
      px += rand() % 3 - 1;
      if (px > 7) px = 7;
      if (px < 0) px = 0;
      py += rand() % 3 - 1;
      if (py > 7) py = 7;
      if (py < 0) py = 0;
    } while (0);

    if (pvid) lc.setLed(0,px,py,1);
    else lc.setLed(0,px,py,0);
    pvid = 1 - pvid;    
  }

  pocitadlo++;
  if (pocitadlo == najviac) { 
    pocitadlo = 0; 
    lc.setLed(0,cielx,ciely,0);
  }
  if (pocitadlo == zasviet) lc.setLed(0,cielx,ciely,1);
  
  if (digitalRead(14))
  {
    Serial.println("click");
  }
  int osy = analogRead(1);
  int osx = analogRead(2);

  if ((x==px) && (y==py))
  {
    prehral();
    delay(1000);
    start_hry();
  }

  if (millis() < odblokovany_cas) return;
  if ((osy < 400) && (y > 0)) //pohyb svetielka
  { 
    lc.setLed(0,x,y,0);
    y--;
    lc.setLed(0,x,y,1);
    odblokovany_cas = millis() + cas_kroku;
  }
  if ((osy > 630) && (y < 7)) // dolu
  { 
    lc.setLed(0,x,y,0);
    y++;
    lc.setLed(0,x,y,1);
    odblokovany_cas = millis() + cas_kroku;
  }  
  if ((osx < 400) && (x > 0)) 
  { 
    lc.setLed(0,x,y,0);
    x--;
    lc.setLed(0,x,y,1);
    odblokovany_cas = millis() + cas_kroku;
  }
  if ((osx > 630) && (x < 7)) 
  { 
    lc.setLed(0,x,y,0);
    x++;
    lc.setLed(0,x,y,1);
    odblokovany_cas = millis() + cas_kroku;
  }

  if ((x==cielx) && (y == ciely))
  {    
    smajl();
    delay(1000);
    start_hry();
  }
}