Arduino - Jednoduchá aplikace

Z MediaWiki SPŠ a VOŠ Písek
Přejít na: navigace, hledání
/*
* Robot Pepík - učebna D10
* Tento program zobrazuje čas, který uběhl od spuštění programu   
* - při každé 0té sekundě popojede dopředu   
* - při každé první sekundě se zastaví     
* - při každé desáté sekundě popojede zpět   
* - při každé jedenácté sekundě se zastaví      
*/   
 
// přiložení knihovny pro práci s LCD  
#include <LiquidCrystal.h>   
 
// inicializace LCD - nastavení používaných pinů 
LiquidCrystal lcd(11, 9, 5, 4, 3, 2);    
 
//inicializace portů DC Motorů  
int motor_left[] = {6, 7};   
// pole obsahující ovládací piny levého motoru  
int motor_right[] = {8, 10}; // pole obsahující ovládací piny pravého motoru   void setup() {   //DC motory - počáteční nastavení    
 
int i;  for(i = 0; i < 2; i++){
  pinMode(motor_left[i], OUTPUT);  
  pinMode(motor_right[i], OUTPUT);
  }     
 
lcd.begin(16, 2);   // nastavení rozsahu LCD monitoru  
 
lcd.setCursor(0, 0);   // nastavení kurzoru na LCD na pozici 0:0    
lcd.print("Minuty:");  // vytiskne text na LCD    
 
lcd.setCursor(0, 1);   // nastavení kurzoru na LCD na pozici 0:0    
lcd.print("Sekundy:"); // vytiskne text na LCD    
}    
 
void loop() {  // tato funkce se neustále opakuje   
  int sekundy = (millis()/1000);  // zjištění a výpočet doby, od spuštění programu - v sekundách
  int minuty = millis()/1000/60;  // zjištění a výpočet doby, od spuštění programu - v minutách
  sekundy -= minuty*60;  // korekce času - po 60ti sekundách se sekundy vynulují   
  if(sekundy == 0)  // když se sekundy rovnají 0, display se vymaže
    {  
    lcd.setCursor(10, 0);
    lcd.print("     ");
 
    lcd.setCursor(10, 1);
    lcd.print("     ");
 
    drive_forward(); // v nulté sekundě se motor vždy rozjede dopředu
    }
 
  lcd.setCursor(10, 0);  // nastaví pozici kurzoru na LCD
  lcd.print(minuty);     // vytiskne čas, který uběhl od spuštění programu v minutách
 
  if(sekundy==1)  // v první sekundě se motor vždy zastavý 
    {
    motor_stop();
    }
  if(sekundy == 10) // v desáté sekundě se motor vždy rozjede dozadu
    {
    drive_backward();
    }
  if(sekundy == 11) // v jedenácté sekundě se motor vždy zastavý
    {
    motor_stop();
    }
 
    lcd.setCursor(10, 1);
    lcd.print(sekundy);    // vytiskne čas, který uběhl od spuštění programu v sekundách
    }
 
  void motor_stop(){       //zastaví DC motory
   digitalWrite(motor_left[0], LOW);
   digitalWrite(motor_left[1], LOW);
 
   digitalWrite(motor_right[0], LOW);
   digitalWrite(motor_right[1], LOW);
   delay(25);
   }    
 
  void drive_forward(){    //zapne DC motory směrem dopředu
   digitalWrite(motor_left[0], HIGH);
   digitalWrite(motor_left[1], LOW);
 
   digitalWrite(motor_right[0], HIGH);
   digitalWrite(motor_right[1], LOW);
   }
 
  void drive_backward(){    //zapne DC motory směrem vzad
   digitalWrite(motor_left[0], LOW);
   digitalWrite(motor_left[1], HIGH);
 
   digitalWrite(motor_right[0], LOW);
   digitalWrite(motor_right[1], HIGH);
   }
 
  void turn_left(){    //zapne DC motory a zatočí vlevo
   digitalWrite(motor_left[0], LOW);
   digitalWrite(motor_left[1], HIGH);
 
   digitalWrite(motor_right[0], HIGH);
   digitalWrite(motor_right[1], LOW);
   }
 
  void turn_right(){    //zapne DC motory a zatočí vpravo
   digitalWrite(motor_left[0], HIGH);
   digitalWrite(motor_left[1], LOW);
 
   digitalWrite(motor_right[0], LOW);
   digitalWrite(motor_right[1], HIGH);
   }
Osobní nástroje
Jmenné prostory
Varianty
Akce
Rychlá navigace
NEJ aktivity
Nejlepší předměty
Nejlepší MCU
SW-HW
Ostatní
Utility
Nástroje
Tisk/export