Arduino: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
Bez shrnutí editace |
||
Řádek 37: | Řádek 37: | ||
delay(1000); // pauza 1s | delay(1000); // pauza 1s | ||
} | } | ||
</source> | |||
===jednoduchá aplikace pro Arduino:=== | |||
<source lang"C"> | |||
/* | |||
* 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); | |||
} | |||
</source> | </source> | ||
Verze z 30. 1. 2012, 10:32
Arduino
- Mikrokontrolér: ATmega168 / ATmega328
- Takt procesoru: 16 MHz
- Pracovní napětí: 5V (Vstupní napětí (doporučené): 7 až 12V)
- 14 digitálních vstupně-výstupních pinů (z toho 6 s podporou PWM)
- 6 analogových vstupů
- Proudové zatížení I/O pinu: 40mA
- Flash paměť: 16 KB (ATmega168) nebo 32 KB (ATmega328), z toho 2 KB zabírá bootloader
- SRAM: 1 KB (ATmega168) nebo 2 KB (ATmega328)
- EEPROM: 512 bytů (ATmega168) nebo 1 KB (ATmega328)
Vývoj MIT aplikace s Arduino:
/*
* Blink
* http://www.arduino.cc/en/Tutorial/Blink
*/
int ledPin = 13; // LED je připojena na pin 13
void setup() // tato část proběhne jednou po startu
{
pinMode(ledPin, OUTPUT); // nastaví pin jako výstupní
}
void loop() // tato část probíhá stále dokola
{
digitalWrite(ledPin, HIGH); // rozsvícení LED
delay(1000); // pauza 1s
digitalWrite(ledPin, LOW); // zhasnutí LED
delay(1000); // pauza 1s
}
jednoduchá aplikace pro Arduino:
/*
* 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);
}