Arduino schéma - arduino.sk

Arduino Stopky pre požiarnikov

Kompletné projekty s návodom a zdrojovým kódom
Príspevky: 3
Registrovaný: Štv 16. Apr 2015 21:49:11

Arduino Stopky pre požiarnikov

Poslaťod Plasto13 » Štv 16. Apr 2015 22:18:49

Prihodim sem aj jeden moj projekt :) Som programátor samouk :D tak za pripadne chyby v code sa ospravedlňujem
Funkcia :Stopky merajúce dva časi. Štart je spoločný pre oba a Stop ma každý zvlášť. Štart, Stop a Reset je mozné ovládať buď cez Touch, alebo cez vstupy.

Použité knižnice :

UTFT Library
UTouch Library
StopWatch class
Button

Obrázok

Kód: Vybrať všetko
#include <UTFT.h>
#include <UTouch.h>
#include <StopWatch.h>
#include <Button.h>

// Initialize Input
Button Stop1(8, BUTTON_PULLDOWN);
Button Stop2(9, BUTTON_PULLDOWN);
Button Start(10, BUTTON_PULLDOWN);
Button Reset(11, BUTTON_PULLDOWN);

// Initialize display

UTFT    myGLCD(ITDB32S,38,39,40,41);

// Initialize touchscreen
// ----------------------
// Set the pins to the correct ones for your development board
// -----------------------------------------------------------
// Standard Arduino Uno/2009 Shield            : 15,10,14, 9, 8
// Standard Arduino Mega/Due shield            :  6, 5, 4, 3, 2
// CTE TFT LCD/SD Shield for Arduino Due       :  6, 5, 4, 3, 2
// Teensy 3.x TFT Test Board                   : 26,31,27,28,29
// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30
//
UTouch  myTouch( 6, 5, 4, 3, 2);

// Declare which fonts we will be using
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
extern uint8_t SmallFont[];

int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";

/*************************
   Initialize StopWatch
*************************/
StopWatch Stopky0;
StopWatch Stopky1;
uint32_t cas = 0;
int stat =2;// 1 Start , 2 Reset, 3 Stop1 ,4 Stop2

/*************************
**   Custom functions   **
*************************/
void drawLayout(){
   myGLCD.setFont(SmallFont);
   myGLCD.print("Stopwatch Created By Plasto13",CENTER,3);
   myGLCD.print("Cas:", 10, 200);
}

void drawButtons()
{
   myGLCD.setFont(BigFont);

  myGLCD.setColor(0, 0, 212);
  myGLCD.fillRoundRect(5, 30, 95, 65);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (5, 30, 95, 65);
  myGLCD.print("Start", 10, 40);
  myGLCD.setColor(0, 0, 212);

  myGLCD.fillRoundRect(105, 30, 205, 65);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (105, 30, 205, 65);
  myGLCD.print("Stop 1", 107, 40);
  myGLCD.setBackColor (0, 0, 212);
  myGLCD.setColor(0, 0, 212);

  myGLCD.fillRoundRect(210, 30, 315, 65);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect(210, 30, 315, 65);
  myGLCD.print("Stop 2", 215, 40);
  myGLCD.setBackColor(0, 0, 212);
  myGLCD.setColor(0, 0, 212);

  myGLCD.fillRoundRect(240, 75, 310, 200);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect(240, 75, 310, 200);
  myGLCD.print("Reset", 285, 100,90);
}

void dravTime(uint32_t t, int x, int y){

   int micro;
   int sec;
   int min;
   int ofset = 0;

   myGLCD.setFont(SevenSegNumFont);
   myGLCD.setColor(255, 255, 255);

   min = t / 60000UL;
   if (min < 10){
      myGLCD.printNumI(0, x, y);
      ofset += 30;
   }
   myGLCD.printNumI(min, x + ofset, y);
   


   ofset = 75;
   myGLCD.setFont(BigFont);
   myGLCD.print(":", x + ofset - 14, y + 16);

   t -= min * 60000UL;
   sec = t / 1000UL;
   myGLCD.setFont(SevenSegNumFont);
   if (sec < 10){
      myGLCD.printNumI(0, x + ofset, y);
      ofset += 30;
   }
   myGLCD.printNumI(sec, x + ofset, y);

   ofset = 150;
   myGLCD.setFont(BigFont);
   myGLCD.print(":", x + ofset - 14, y + 16);
   myGLCD.setFont(SevenSegNumFont);
   t -= sec * 1000UL;

   if (stat ==2 ){
      myGLCD.printNumI(0, x + ofset, y);
      ofset += 30;
   }
   micro = (t + 5)/ 10L;
   myGLCD.printNumI(micro, x + ofset, y);
}

void dravSmallTime(uint32_t t, int x, int y){// Vykresli male stopky
   int micro;
   int sec;
   int min;
   int ofset = 0;

   myGLCD.setFont(SmallFont);
   myGLCD.setColor(255, 255, 255);
   //myGLCD.printNumI(t, x, y);

   min = t / 60000UL;
   if (min < 10){
      myGLCD.printNumI(0, x, y);
      ofset += 8;
   }
   myGLCD.printNumI(min, x + ofset, y);



   ofset = 20;
   myGLCD.print(":", x + ofset - 6, y-1);

   t -= min * 60000UL;
   sec = t / 1000UL;
   if (sec < 10){
      myGLCD.printNumI(0, x + ofset, y);
      ofset += 8;
   }
   myGLCD.printNumI(sec, x + ofset, y);
   /*
   ofset = 40;
   myGLCD.print(":", x + ofset - 6, y - 1);
   t -= sec * 1000UL;
   if (stat == 2){
      myGLCD.printNumI(0, x + ofset, y);
      ofset += 8;
   }
   micro = (t + 5) / 10L;
   myGLCD.printNumI(micro, x + ofset, y);
   */
}
// Draw a collor frame while a button is touched

void chackButtonPressed(){

   //LCD
   if (myTouch.dataAvailable()){// Kontorola ci je dotik
      myTouch.read();//Nacitanie polohy dotiku
      x = myTouch.getX();
      y = myTouch.getY();
      //
      if ((y >= 30) && (y <= 65)){//Kontorla ci sa nachadza v spodnej rade tlacitiek.
         if ((x >= 5) && (x <= 95)){// tlacidlo start
            Serial.println("Start");
            stat = 1;
         }
         if ((x >= 105) && (x <= 205)){ // Kontrola Stop tlacitka
            Serial.println("Stop");
            stat = 3;
         }
         if ((x >= 210) && (x <= 315)){
            Serial.println("Stop 2");
            stat = 4;
         }
      }
      if ((y >= 75) && (y <= 200)){// kontrola ci sa je v prvom rade
         if ((x >= 240) && (x <= 310)){// tlacidlo reset
            Serial.println("Reset");
            stat = 2;
         }
      }

   }
}

/*************************
**  Required functions  **
*************************/

void setup()
{
   // Initial setup
   myGLCD.InitLCD();
   myGLCD.clrScr();
   myGLCD.fillScr(0, 0, 212);

   myTouch.InitTouch();
   myTouch.setPrecision(PREC_MEDIUM);
   myGLCD.setFont(BigFont);

   myGLCD.setBackColor(0, 0, 212);
   Serial.begin(9600);
   drawLayout();
   drawButtons();

}

void loop()
{
   //LCD Button
   chackButtonPressed();
   //Hardware button
   if (Stop1.isPressed() == true){
      stat = 3;
   }
   if (Stop2.isPressed() == true){
      stat = 4;
      Serial.println("Stop2 button");
   }
   if (Start.isPressed() == true){
      stat = 1;
      Serial.println("Start button");
   }
   if (Reset.isPressed() == true){
      stat = 2;
      Serial.println("Reset button");
   }

   switch (stat)
   {
   case 1: Stopky0.start();
      Stopky1.start();
      break;
   case 2: Stopky0.reset();
      Stopky1.reset();
      dravTime(Stopky0.elapsed(), 10, 90);
      dravTime(Stopky1.elapsed(), 10, 140);
      break;
   case 3: Stopky0.stop();
      dravTime(Stopky0.elapsed(), 10, 90);
      break;
   case 4: Stopky1.stop();
      dravTime(Stopky1.elapsed(), 10, 140);
      break;
   default:
      break;
   }
   
   if (Stopky1.state() == 1){
      cas = Stopky1.elapsed();
   }
   if ((Stopky0.state() == 1) || (Stopky0.state() == 0)) {
      cas = Stopky0.elapsed();
   }
   dravSmallTime(cas, 45, 200);
   // debug
   Serial.print("x:");
   Serial.println(myTouch.getX());
   Serial.print("y:");
   Serial.println(myTouch.getY());
}


video na mojom www http://ard.890m.com/index.php/arduino/item/1-stopky-pre-poziarnikov

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Arduino Stopky pre požiarnikov

Poslaťod kosice4 » Pia 17. Apr 2015 21:44:28

Projekt super, určite sa zíde a kopec vecí mi z toho pomôže.
Mám otázky :
- prečo časy neukazujú koľko prešlo priebežne až keď sa zastaví ?
Všimol som si, že dole ukazuje malým písmom, ale tie veľké stoja.
- ktorý radič má displej ?
Akurát sa chystám zvládnuť TFT displej s dotykom, takže za mňa ďakujem :)
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 3
Registrovaný: Štv 16. Apr 2015 21:49:11

Re: Arduino Stopky pre požiarnikov

Poslaťod Plasto13 » Sob 18. Apr 2015 1:53:39

kosice4 píše:Projekt super, určite sa zíde a kopec vecí mi z toho pomôže.
Mám otázky :
- prečo časy neukazujú koľko prešlo priebežne až keď sa zastaví ?
Všimol som si, že dole ukazuje malým písmom, ale tie veľké stoja.
- ktorý radič má displej ?
Akurát sa chystám zvládnuť TFT displej s dotykom, takže za mňa ďakujem :)


čas ide malým písmom lebo keď šli oba veľké tak vo vykresľovaní bol posun cca 700ms ale inač čas v arduine bežal korektne. len to bolo trocha metúce keďže tam bol ten posun. Vyriešil som to malým časom bez milisekúnd. Radič už nemám ako zistiť lebo už to nemám doma a pani požiarnici to už používajú. už stihli aj LCD aj prasknúť tak ak budem objednávať novy dopíšem.

ešte doplním že vstupy sú použite na štartovaciu pištoľ a stop 1 a 2 sú z tercov. Reset je priamo na krabičke ak náhodou úplne zlyhá touch

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Arduino Stopky pre požiarnikov

Poslaťod posjirka » Sob 18. Apr 2015 20:46:16

Uz nekolikrat jsem uvazoval o podobnem projektu i kdyz nasi hasici maji koupeny panel se stopkami nema ovsem moznost rozsireni o dalsi displaye. Tenhle projektik vypada moc hezky jen me zajima v jake krabici ho mas resp jak vypada vysledek. S tim zobrazenim casu jednotlivych tercu bych to jen pro estetiku nahradil 00:00:00 za --:--:--
Dotykova vrstva je bohuzel pro polni podminky v trochu nestastna a asi bych ji nahradil tlacitky zapustenymi do panelu. Jinak pokud bys delal verzi 2 doporucuji prepinac na 1 nebo 2 terce. Bude pak mit vyuziti i mimo pozarniho utoku treba na zavody. Tak me jeste napada : jak mas vyresenou signalizaci zasazeneho terce? Za napad, zapojeni a program mas u me palec nahoru. Spousta lidi co vidi arduino poprve se me tak kde by to asi mohli pouzit jsem rad ze muzu pridat dalsi polozkz na seznam projektu s arduinem.

Príspevky: 3
Registrovaný: Štv 16. Apr 2015 21:49:11

Re: Arduino Stopky pre požiarnikov

Poslaťod Plasto13 » Uto 21. Apr 2015 13:04:27

posjirka píše:Uz nekolikrat jsem uvazoval o podobnem projektu i kdyz nasi hasici maji koupeny panel se stopkami nema ovsem moznost rozsireni o dalsi displaye. Tenhle projektik vypada moc hezky jen me zajima v jake krabici ho mas resp jak vypada vysledek. S tim zobrazenim casu jednotlivych tercu bych to jen pro estetiku nahradil 00:00:00 za --:--:--
Dotykova vrstva je bohuzel pro polni podminky v trochu nestastna a asi bych ji nahradil tlacitky zapustenymi do panelu. Jinak pokud bys delal verzi 2 doporucuji prepinac na 1 nebo 2 terce. Bude pak mit vyuziti i mimo pozarniho utoku treba na zavody. Tak me jeste napada : jak mas vyresenou signalizaci zasazeneho terce? Za napad, zapojeni a program mas u me palec nahoru. Spousta lidi co vidi arduino poprve se me tak kde by to asi mohli pouzit jsem rad ze muzu pridat dalsi polozkz na seznam projektu s arduinem.


Mam už iba jedno foto ešte z doby keď som prehadzoval tlačítka na vrch kvôli prasknutému display u. je to aj v krabicke. Konektory sú z boku. display praskol bohužiaľ pri montáži do tejto krabicky. ak bude ďalšia verzia tak už jednoznačné vo väčšej krabicke. projekt som robil podľa zadania , nie som aktívny Hasič ale za nápad ďakujem. skúsim navrhnúť a ak sa to ku mne dostane na úpravu pofotím.
Foto dohodím na svoj web

Príspevky: 7
Registrovaný: Štv 02. Júl 2015 23:25:43

Re: Arduino Stopky pre požiarnikov

Poslaťod yesso » Ned 13. Dec 2015 20:31:31

zdar.. pekne spravené
ja som riešil niečo podobné, veľký 7segm display, štart na fotobunku, dva terče...
len ešte otázka, rozmýšľal si nad nejakým zobrazením na veľký DSP?

Späť na Hotové projekty