This is an old revision of the document!
/* Nimetus: Näide #1.1 Digitaalsed sisend-väljundid Kirjeldus: Programm demonstreerib nupu ja LED-i kasutamist Autor: Raivo Sell Kuupäev: 15.01.2013 */ // Konstandid const int nupp = A0; // Viik kuhu on ühendatud nupp const int LED = 13; // Viik kuhu on ühendatud nupp roheline LED // Globaalsed muutujad int NupuOlek = 0; // Nupu oleku muutuja void setup() { pinMode(LED, OUTPUT); // algväärtustame LED viigu väljundiks pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks digitalWrite(nupp, HIGH); // lülitame sisemised pullup takistid sisse } void loop(){ NupuOlek = digitalRead(nupp); // salvestame muutujasse nupu hetke väärtuse if (NupuOlek == HIGH) { // Kui nupu olek on kõrge (+5 V) digitalWrite(LED, LOW); // kustutame LED-i } else { // vastasel juhul (Maa) digitalWrite(LED, HIGH); // süütame LED-i } }
// Algus identne näitega #1.1 void loop(){ if (digitalRead(nupp) == LOW) { // Kui nupu olek on madal digitalWrite(LED, HIGH); // süütame LED-i delay(1000); // ootame 1 sekundi (1000 millisekundit) } digitalWrite(LED, LOW); // kustutame LED-i }
// Algus identne näitega #1.1 void loop(){ if (digitalRead(nupp) == LOW) { // Nupule vajutus while (digitalRead(nupp) == LOW){} // Ootame nupu lahtilaskmist digitalWrite(LED, HIGH); // süütame LED-i } }
Modifitseerida näiteprogrammi nii, et nupule vajutades vilgub LED (LCD laiendusplaadi korral võib kasutada taustavalguse LED-e) kolm korda.
Modifitseerida näiteprogrammi nii, et nupule vajutades hakkab LED konstantselt vilkuma 1 sekundilise intervalliga ja teine nupule vajutus katkestab vilkumise. 0 %).
/* Nimetus: Näide #2.1 Analoog sisend Kirjeldus: Programm demonstreerib analoogsisendi kasutamist Autor: Raivo Sell */ // määrame nivoo, millest kõrgemal väärtusel //süüdatakse LED const int nivoo = 512; int pote_sisend = A1; // määrame potentsiomeetri sisendviigu int led = A5; // määrame LED ühendusviigu int pote = 0; // muutuja potentsiomeetri väärtuse salvestamiseks void setup() { pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks } void loop() { pote = analogRead(pote_sisend); // loeme analoogsisendi väärtuse // kui väärtus on suurem nivoost, süütame LED-i if (pote>nivoo) digitalWrite(led, HIGH); else digitalWrite(led, LOW); // vastasel korral kustutame LED-i }
/* Nimetus: Näide #2.2 Analoog sisendi teisendamine ajaks Kirjeldus: Programm demonstreerib analoogsisendi kasutamist Autor: David Cuartielles Täiendused: Tom Igoe Kohandused: Raivo Sell OriginaalURL: http://arduino.cc/en/Tutorial/AnalogInput */ int pote_sisend = A1; // määrame potentsiomeetri sisendviigu int led = A5; // määrame LED ühendusviigu int pote = 0; // muutuja potentsiomeetri väärtuse salvestamiseks void setup() { pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks } void loop() { pote = analogRead(pote_sisend); // loeme anduri väärtuse digitalWrite(led, HIGH); // kustutame LED-i delay(pote); // tekitame viite <sensorValue> millisekundit digitalWrite(led, LOW); // süütame LED-i delay(pote); // tekitame viite <sensorValue> millisekundit }
Modifitseerida näiteprogrammi nii, et potentsiomeetriga määratakse LED-i heledus, kasutades selleks delay funktsioone.
/* Nimetus: Näide #3.1 LCD kasutamine Kirjeldus:Kasutab LiquidCrystal.h teeki ja ITEAD Studio 2x16 teksti laiendusplaati Autor: Tom Igoe Modifikatsioon: Raivo Sell Kuupäev: 4.06.2014 Versioon: 1.0 */ #include <LiquidCrystal.h> // Kaasame vajaliku teegi // Initsialiseerime LCD koos vastavate viikude ühendamisega LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { lcd.begin(16, 2); //Määrame LCD read ja veerud lcd.print("Tere Tallinn!"); // Trükime tervitusteksti } void loop() { lcd.setCursor(0, 1); //Viime kursori esimesele reale esimesse positsiooni (1. rida on indeksiga 0) lcd.print(millis()/1000); //Trükime loenduri väärtuse }
/* Nimetus: Näide #3.2 LCD kasutamine analoogsisendiga Kirjeldus: Kasutab LiquidCrystal.h teeki ja ITEAD Studio 2x16 teksti laiendusplaati Autor: Tom Igoe Modifikatsioon: Raivo Sell Kuupäev: 4.06.2014 Versioon: 1.0 */ #include <LiquidCrystal.h> // Kaasame vajaliku teegi // Initsialiseerime LCD koos vastavate viikude ühendamisega LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int pote_sisend = A1; // määrame potentsiomeetri sisendviigu void setup() { lcd.begin(16, 2); //Määrame LCD read ja veerud lcd.print("Potentsiomeeter"); // Trükime tervitusteksti } void loop() { lcd.setCursor(0, 1); //Viime kursori esimesele reale esimesse positsiooni (1. rida on indeksiga 0) lcd.print(analogRead(pote_sisend)); //Trükime analoogsisendi väärtuse lcd.print(" "); //Trükime tühikud, et vana väärtus ei jääks segama delay (100); }
/* Nimetus: Näide #4.1 Temperatuuri andur koos matemaatika teegiga Kirjeldus: Kasutab Steinhart-Hart termistori valemit: temperatuur kelvinites = 1 / {A + B[ln(R)] + C[ln(R)]^3} kus A = 0.001129148, B = 0.000234125 ja C = 8.76741E-08 Autor: Milan Malesevic and Zoran Stupic Modifikatsioon: Raivo Sell Kuupäev: 15.01.2013/4.06.2014 Versioon: 1.1 */ // Kaasame vajalikud teegid #include <math.h> #include <LiquidCrystal.h> // Initsialiseerime LCD koos vastavate viikude ühendamisega LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int andur = A4; // määrame potentsiomeetri sisendviigu void setup() { lcd.begin(16, 2); //Määrame LCD read ja veerud lcd.print("Temperatuur"); // Trükime tervitusteksti delay (1000); } void loop() { Termistor(analogRead(andur)); // Käivitame funktsooni delay(1000); // Ootame 1 sek. lcd.clear(); // Puhastame ekraani vanadest andmetest } void Termistor(int RawADC) { double Temp; long Takistus; // Valem: Takistus = (1024 * JaguriTakisti/ADC) - JaguriTakisti Takistus=((10240000/RawADC) - 10000); //Esimene rida lcd.setCursor(0, 0); lcd.print("AD="); lcd.print(RawADC); //Trükime analoogsisendi väärtuse lcd.setCursor(8, 0); lcd.print("U="); lcd.print(((RawADC*5.0)/1024.0),3); //Trükime pinge väärtuse //Teine rida lcd.setCursor(0, 1); lcd.print("R="); lcd.print(Takistus); //Trükime takistuse väärtuse Temp = log(((10240000/RawADC) - 10000)); Temp = 1/(0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp))* Temp); Temp = Temp - 273.15; // Konverteeri Kelvinid Celciustesse lcd.setCursor(8, 8); lcd.print("T="); lcd.print(Temp); //Trükime temperatuuri väärtuse }
// Reading analog and digital sensors void setup() { // For visualization we can use serial monitor Serial.begin(9600); } void loop() { // Read the input on analog pin 0 and digital pin 10: int AnalogSensorValue = analogRead(A0); int DigitalSensorValue = digitalRead(10); Serial.println(AnalogSensorValue); // Print out the analog value Serial.println(DigitalSensorValue); // Print out the digital value delay(500); // Delay in between readings for readability }
Modifitseerida programmi nii, et potentsiomeetriga määratakse temperatuuri nivoo, mis salvestatakse nupuga programmi mällu ja selle nivoo hilisemal ületamisel käivitatakse täiturmehhanism (milleks on LED).
Kombineerida LED-i heleduse programm ja eelnev temperatuuri juhtimise programm, kus LED-i heledus sõltub sellest, kui palju nivootemperatuuri ületati (1 kraad: heledus 25 %, 2 kraadi: heledus 50 %, 3 kraadi: heledus 75 % ja 5 kraadi: heledus 10
#include <Servo.h> Servo right_motor,left_motor; // create servo object to control a servo void setup() { right_motor.attach(11); // attaches the servo on pin 11 left_motor.attach(12); // attaches the servo on pin 12 } void loop() { // Control servo with value 0-180. 90 means that servo stands still right_motor.write(0); // 0 - Servo with maximum speed backward left_motor.write(180); // 180 - Servo with maximum speed forward }
#include <Servo.h> Servo right_motor,left_motor; // create servo object to control a servo void setup() { while (digitalRead(10)==1){}; // Question - What this row does? right_motor.attach(11); // Attaches the servo on pin 11 left_motor.attach(12); // Attaches the servo on pin 12 } void loop() { int AnalogSensorValue = analogRead(A0); // Read front sensor value // Compare it with reference if (AnalogSensorValue>500) { // If TRUE left_motor.write(0); // Reverse one motor delay(750); // Wait until turn is enough } right_motor.write(0); // Drive forward left_motor.write(180); // Drive forward }
Luua programm, mis võimaldab servomootori positsiooni muuta vastavalt nuppudega seadistatud suurusele.
Luua programm, mis servomootori baasil ehitatud radariga ja fotoanduriga leiaks ruumist kõige eredama punkti.
/* Nimetus: Näide #6.1 Jadaliides */ #include <math.h> int NTC_sisend = A2; // määrame temperatuurianduri sisendviigu void setup() { Serial.begin(9600); } void loop() { Termistor(analogRead(NTC_sisend)); // Käivita funktsoon Serial.println(""); // Tekita reavahetus delay(1000); // Oota 1 sek. } double Termistor(int RawADC) { double Temp; long Takistus; // Valem: Takistus = (1024 * JaguriTakisti/ADC) - JaguriTakisti Takistus=((10240000/RawADC) - 10000); Serial.print("ADC: "); Serial.print(RawADC); Serial.print("/1024"); // Prindi ADC tulemus Serial.print(", Pinge: "); Serial.print(((RawADC*5.0)/1024.0),3); Serial.print(" volti"); // Prindi pinge Serial.print(", Takistus: "); Serial.print(Takistus); Serial.print(" oomi"); Temp = log(((10240000/RawADC) - 10000)); Temp = 1/(0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp))* Temp); Temp = Temp - 273.15; // Konverteeri Kelvinid Celciustesse Serial.print(", Temperatuur: "); Serial.print(Temp); Serial.print(" kraadi C"); return Temp; }
Luua programm, mis jadaliidesest saadetud teksti kirjutaks LCD ekraanile. Märk „+“ vahetab rida ning märk „-“ kustutab kogu ekraani.
Luua programm, mis temperatuurinivoo ületamisel muudab õhuklapi asendit (servo mootor). Temperatuurinivoo määratakse potentsiomeetriga. Õhuklapi asend sõltub temperatuuri erinevusest. Iga temperatuuri kraad, mis ületab nivood lisab klapi nurga 25%. Lüliti katkestab igal ajahetkel süsteemi töö (hädastop) ja viib klapi algasendisse tagasi, jättes punase LED-i vilkuma. Edasijõudnud võivad kasutada katkestust.
Ventilaatori juhtimine XRF kaudu.
Luua programm, mis suudab XRF raadiomooduliga lugeda kaugmoodulilt temperatuuri ning kui temperatur ületab kohalikul kontrolleril seatud nivoo käivitatakse kaugmoodulil asetsev ventilaator. Suhtkuseks kaugmooduliga tuleb kasutada allolevat protokolli:
Protokollis tähistab „x“ kohaliku seadme numbrit, mille annab juhendaja igale tiimile erineva.