﻿
// Programy ETC22  2024_12_16_1 STM32Duino,  pro ETC22

// PROGRAM 11
/*  STM32G030J6 v SO8, kopirovani TL stisk LED1 na PA0 sviti,
nestisknute tlcitko LED1 nesviti */

# define LED1  PA0 // pin č. 1, PB5 SO8 STM32G030J6
# define TL  PB7 // Tlacitko k GND pin č. 7,  PB7 SO8 STM32G030J6

int tlacit=0; // promenna "tlacit" pro ulozeni stavu tlacitka
void setup() {

  pinMode(LED1, OUTPUT); 
  pinMode(TL, INPUT_PULLUP); /* tlacitko  a int. pull up rezistor */
}


void loop() {
  tlacit= ! digitalRead(TL);  /* ulozit negovany stav na pinu TL  do promenne " tlacit" */
  digitalWrite (LED1, tlacit); /*  nastavil LED  ON , kdyz tlacitko je  LOW */
  delay(100);
}


xxxxxxxxxxxxxxx
// PROGRAM 12

/*  STM32G030J6 v SO8, kopirovani TL stisk, pak  LED1 na PA0 sviti 
a vypisuje na Terminal, stisk  tlac = 1, nestisknute tlac = 0) */

# define LED1  PA0 // pin č. 1, PB5 SO8 STM32G030J6
# define TL  PB7 // Tlacitko k GND pin č. 7,  PB7 SO8 STM32G030J6

HardwareSerial Serial1 (PA10_R, PA9_R);// UART na remap. pinech č. 5 a 6

int tlacit=0; // promenna pro ulozeni stavu tlacitka

void setup() {
  Serial1.begin(9600);
  pinMode(LED1, OUTPUT); 
  pinMode(TL, INPUT_PULLUP); /* tlacitko na PB7 s int. Pull UP rezistorem */
}


void loop() {
  tlacit= ! digitalRead(TL); // ulozit negovany stav na pinu TL
  digitalWrite (LED1, tlacit); 
  delay(500);
    Serial1.print("tlacitko = "); 
  Serial1.println(tlacit); 
}

xxxxxxxxxxxxxxxxxxxxx
//PROGRAM 13   " prek OK"

// testuje tlacitko a vypisuje stav textove na terminal

/*  STM32G030J6 v SO8, kopirovani TL stisk LED1 na PA0 svit 
a vypisuje na Terminal, stisk  tlac = 1, nestisknute tlac = 0) */

# define LED1  PA0 // pin č. 1, PB5 SO8 STM32G030J6
# define TL  PB7 // Tlacitko k GND pin č. 7,  PB7 SO8 STM32G030J6

HardwareSerial Serial1 (PA10_R, PA9_R);// UART na remap. pinech č. 5 a 6

int tlacit=0; // promenna pro ulozeni stavu tlacitka

void setup() {
  Serial1.begin(9600);
  pinMode(LED1, OUTPUT); 
  pinMode(TL, INPUT_PULLUP);
}

void loop() {
  tlacit= ! digitalRead(TL); // ulozit negovany stav na pinu TL
  digitalWrite (LED1, tlacit); 
  delay(500);
  Serial1.print("tlacitko "); 
  if (tlacit == 1)    {Serial1.println ("stisknuto ");  }
  else   { Serial1.println ("uvolneno "); } 
}

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

// PROGRAM 14   "prek OK"

/*  STM32G030J6 v SO8, kopirovani TL stisk LED1 na PA0 svit 
a vypisuje na Terminal, stisk  tlac = 1, nestisknute tlac = 0) */
# define LED1  PA0 // pin č. 1, PB5 SO8 STM32G030J6
# define TL  PB7 // Tlacitko k GND pin č. 7,  PB7 SO8 STM32G030J6
HardwareSerial Serial1 (PA10_R, PA9_R);// UART na remap. pinech č. 5 a 6
int tlacit=0; // promenna pro ulozeni stavu tlacitka
int pocet =0;

void setup() {
  Serial1.begin(9600);
  pinMode(LED1, OUTPUT); /* modra LED na pinu č. 4 PA0 */
  pinMode(TL, INPUT_PULLUP); /*pin c.7, PB7  jako vstup a interni PULL - UP rezistor */
}

void loop() {
  tlacit= ! digitalRead(TL); // ulozit negovany stav na pinu TL
  digitalWrite (LED1, tlacit); 
  delay(500);
  pocet++;
  
  Serial1.print(" test tlacitka cislo = "); 
  Serial1.print (pocet); 
  if (tlacit == 1)    {Serial1.println ("  stisknuto ");  }
  else   { Serial1.println ("  uvolneno "); } 
}

xxxxxxxxxxxxxxxx

//PROGRAM 15 "prek OK"

/*Testuje tlacitko, vypisuje dobu a počet testu ve formě

 test tlacitka cislo = 36  cas = 18000  uvolneno 
 test tlacitka cislo = 37  cas = 18500  uvolneno 
 test tlacitka cislo = 38  cas = 19000  uvolneno 
 test tlacitka cislo = 39  cas = 19500  uvolneno */

/*  STM32G030J6 v SO8, kopirovani TL stisk LED1 na PA0 svit 
a vypisuje na Terminal, stisk  tlac = 1, nestisknute tlac = 0) */
# define LED1  PA0 // pin č. 1, PB5 SO8 STM32G030J6
# define TL  PB7 // Tlacitko k GND pin č. 7,  PB7 SO8 STM32G030J6
HardwareSerial Serial1 (PA10_R, PA9_R);// UART na remap. pinech č. 5 a 6
int tlacit=0; // promenna pro ulozeni stavu tlacitka
int pocet =0;
unsigned long cas =0;

void setup() {
  Serial1.begin(9600);
  pinMode(LED1, OUTPUT); 
  pinMode(TL, INPUT_PULLUP);
}

void loop() {
  tlacit= ! digitalRead(TL); // ulozit negovany stav na pinu TL
  digitalWrite (LED1, tlacit); 
  delay(500);
  pocet++;
  cas = millis(); 
  Serial1.print(" test tlacitka cislo = "); 
  Serial1.print (pocet); 
  Serial1.print("  cas = "); 
  Serial1.print (cas); 
  if (tlacit == 1)    {Serial1.println ("  stisknuto ");  }
  else   { Serial1.println ("  uvolneno "); } 
}

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//Program 17  "prek OK"

/*tester reakce LED 
na zacatku cervena LED zablika, pak stisknout TL ,
 rozsviti se modra LED1, cekat az zhasne modra LED1 a pak hned uvolnit lacitko.
 Doba reakce je čas od zhasnuti LED1 do uvolneni tlacitka

neni osetreno predcasne uvolneni tlacitka a dalsi stavy
Namety pro praci studentu.
osetrit predcasne uvoleni tracitka pred zhasnutim LED
je konstantni doba, za jak dloho LED1 zhasne, zkusit  modifikovat, 
aby se doba, kdyz LED1 zhasne menila 
pridat zvukovy vystup podle rychlosti rekace, 
 doplnit limit  času reakce 
 Aby se menil jas LED ( cervene), musi s epak odstranit rezistor pro BOOT,
  ktery je mezi pinem c.8 OOt a napejenim VDD= +3,3 V */


/* tester reakce,  STM32G030J6 v SO8,
zablika cervena LED na pinu c. 8 pak prejde na nizky jas , 
stiknou tlacitko, rozsviti modra  LED 1 , az zhasne , uvolnit tlacitko
podle reakcni doby - OK zablika 2x pomalu a pipne kratce , 
pomala reakce - zablika 8x rychle  a pipne dlouze 
vypise na terminal reakcni dobu

pridat Buzzer, akustickou signalizaci, upravi na kontrolu predcasneho
 uvolnneni tlacitka,vypsat pripadne i predcasne uvolněni
 dat modifikaci casu , za jak dlouho LED zhasne
  tak ek je treba optimlizovt frekevenci podle pouziteho buzzeru, aby to bylo slyset

 */

# define LED1  PA0 // pin č. 4, PB5 SO8 STM32G030J6
# define LED  PB5 // pin č. 8  PB5
# define TL  PB7 // Tlacitko k GND pin č. 7,  PB7 SO8 STM32G030J6
# define BUZ  PA13 // pin č. 7, PA13 SO8 STM32G030J6
HardwareSerial Serial1 (PA10_R, PA9_R);// UART na remap. pinech č. 5 a 6

int tlacit=0; // promenna pro ulozeni stavu tlacitka
int pocet =0;
unsigned long cas =0;
unsigned long mezicas =0;
unsigned long timeout =0;

unsigned long reakce =0;
unsigned long reakce1 = 1000;
unsigned long reakcemax = 500;



void setup() {
  Serial1.begin(9600);
  pinMode(LED, OUTPUT); 
  pinMode(LED1, OUTPUT); 
  pinMode(BUZ, OUTPUT); 
  pinMode(TL, INPUT_PULLUP);
  tone(BUZ, 3000, 500);  /* Buzzer pipne 2000 Hz , 500 ms dlouho */
}

void loop() {


zablikej (LED, 5 , 200) ; // červena LED zablika
analogWrite (LED, 20); // červena LED snizi jas 

while (! digitalRead(TL)==0) /* dokud neni stisknute tlacitko, nedelej nic */
{   // tady je to nic nedelani
 
}

digitalWrite (LED1, HIGH); // Modra LED ON
delay (2000);
/* pro kontrolu predcasneho uvolneni tlacitka by se sem dala kontrola
 a hlaeni chyby, studenti zkui doplnit */
digitalWrite (LED1, LOW); // Modra LED OFF
mezicas = millis();
while (! digitalRead(TL)==1)
{
}
cas= millis();
reakce = cas - mezicas ; //
  Serial1.print(" reakce = "); 
  Serial1.print (reakce); 
  Serial1.println ("  milisekund "); 
delay (1000);
if (reakce <= 350)
{ tone(BUZ, 3500, 400);  // rychla reakce- kratke pipnuti
  zablikej (LED1, 2 , 600) ;
 
}

else {zablikej (LED1, 8 , 100) ;
tone(BUZ, 4000, 2000); // pomala reakce -dlouhe pipnuti 
}
}


void zablikej (int ledka, int kolikrat, int doba)  {  // nase funkce pro zablikani
while ((kolikrat) >0) {
pinMode(ledka, OUTPUT);/* znovu definujeme vystupni mod pro zrušení " analogoveho" modu */
digitalWrite (ledka, HIGH); // blikni LED
delay(doba);
digitalWrite (ledka, LOW); // zhasni LED
delay(doba);
kolikrat --;
    }
  }


xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx