Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
en:arduino [2015/12/10 09:27] – created raivo.sellen:arduino [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 12: Line 12:
 */ */
  
-====== Reading analog and digital sensors ====== 
-<code c> 
-// 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 
- 
  
-</code> +====== References ======
-====== Controlling servo motors ====== +
-<code c> +
-#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 +
-+
  
-</code>+[[http://itead-europe.com/pm/platform/shield/1602%20lcd%20shield/SCH_IM120417018_Arduino1602LCDShield.pdf|LCD Shield datasheet]]\\ 
 +[[http://www.sharpsma.com/webfm_send/1489|sharp 10-80cm analog distance sensor]]
  
-====== IF statement with sensor and motor ====== +====== Example 1 Digital I/O ======
-<code c> +
-#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+
  
-+===== Example 1.1 Push down button to light up LED =====
  
-</code>+<code c>
  
-====== Näide 1 Digitaalsed sisend/väljundid ====== +// Constants
- +
-===== Näide 1.1 Nupule vajutades süttib LED ===== +
- +
-<code c> +
-/+
-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 nupp = A0; // Viik kuhu on ühendatud nupp
 const int LED = 13; // Viik kuhu on ühendatud nupp roheline LED  const int LED = 13; // Viik kuhu on ühendatud nupp roheline LED 
-// Globaalsed muutujad +// Global variables 
-int NupuOlek = 0; // Nupu oleku muutuja+int NupuOlek = 0; // Button state 
  
 void setup() {  void setup() { 
-  pinMode(LED, OUTPUT); // algväärtustame LED viigu väljundiks  +  pinMode(LED, OUTPUT); // define LED pin as output 
-  pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks  +  pinMode(nupp, INPUT); // define button pin as input 
-  digitalWrite(nupp, HIGH); // lülitame sisemised pullup takistid sisse+  digitalWrite(nupp, HIGH); // turn on internal pull-up resistor on button pin
 } }
  
 void loop(){ void loop(){
-  NupuOlek = digitalRead(nupp); // salvestame muutujasse nupu hetke väärtuse +  NupuOlek = digitalRead(nupp); // read current button state to variable 
-  if (NupuOlek == HIGH) { // Kui nupu olek on kõrge (+5 V)  +  if (NupuOlek == HIGH) { // if button state is high (+5 V)  
-    digitalWrite(LED, LOW); // kustutame LED-i +    digitalWrite(LED, LOW); // turn LED off
   }    } 
-  else { // vastasel juhul (Maa)  +  else { // if button state is not high (GND)  
-    digitalWrite(LED, HIGH); // süütame LED-i +    digitalWrite(LED, HIGH); // turn led on
   }   }
 } }
 </code> </code>
  
-===== Näide 1.2 Nupule vajutades süttib LED 1 sekundiks =====+===== Example 1.2 On button push LED turns of for second =====
 <code c> <code c>
-// Algus identne näitega #1.1+// First part of code copy from example #1.1
 void loop(){ void loop(){
-  if (digitalRead(nupp) == LOW) { // Kui nupu olek on madal  +  if (digitalRead(nupp) == LOW) { // if button state is high (+5V) 
-    digitalWrite(LED, HIGH); // süütame LED-i  +    digitalWrite(LED, HIGH); // turn on LED  
-    delay(1000); // ootame sekundi (1000 millisekundit)+    delay(1000); // wait second (1000 milliseconds)
   }    } 
-  digitalWrite(LED, LOW); // kustutame LED-i +  digitalWrite(LED, LOW); // turn LED off
 } }
 </code> </code>
  
-===== Näide 1.3 LED süttib nupu vabastamisel =====+===== Example 1.3 LED turns on on button release =====
 <code c> <code c>
-// Algus identne näitega #1.1+// First part of code copy from example #1.1
 void loop(){ void loop(){
-  if (digitalRead(nupp) == LOW) { // Nupule vajutus  +  if (digitalRead(nupp) == LOW) { // if button pressed  
-    while (digitalRead(nupp) == LOW){} // Ootame nupu lahtilaskmist +    while (digitalRead(nupp) == LOW){} // wait for button release 
-    digitalWrite(LED, HIGH); // süütame LED-i +    digitalWrite(LED, HIGH); // turn on LED
   }    } 
 } }
 </code> </code>
  
 +===== Task #1.1 =====
 +
 +Modify example program so that LED blinks three times.
 +/*Modifitseerida näiteprogrammi nii, et nupule vajutades vilgub LED (LCD laiendusplaadi korral võib kasutada taustavalguse LED-e) kolm korda.*/
 +===== Task #1.2 =====
  
 +Modify example program so that on button press LED starts to blink with 1 second intervals. On second button press led stops blinking.
 +/*Modifitseerida näiteprogrammi nii, et nupule vajutades hakkab LED konstantselt vilkuma 1 sekundilise intervalliga ja teine nupule vajutus katkestab vilkumise.
 +0 %).*/
  
-====== Näide #2 Analoog sisendid ======+====== Example #2 Analog inputs ======
  
-===== Näide #2.1 Potentsiomeetri  max nivoo ületamisel süttib LED =====+===== Example #2.1 When exceeding potentiometer threshold value the LED turns on =====
  
  
 <code c> <code c>
-/* 
-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+// Set threshold value at which the LED turns on
 const int nivoo = 512;  const int nivoo = 512; 
  
-int pote_sisend = A1; // määrame potentsiomeetri sisendviigu +int pote_sisend = A0; // set potentiometer input pin 
-int led = A5; // määrame LED ühendusviigu +int led = 13; // set LED pin 
-int pote = 0; // muutuja potentsiomeetri väärtuse salvestamiseks+int pote = 0; // integer variable to hold potentiometer value
  
 void setup() { void setup() {
-  pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks +  pinMode(led, OUTPUT); // set LED pin to output
 } }
  
 void loop() { void loop() {
-  pote = analogRead(pote_sisend); // loeme analoogsisendi väärtuse +  pote = analogRead(pote_sisend); // read Analog input value 
-  // kui väärtus on suurem nivoost, süütame LED-i +  // if value is greater than threshold then turn on LED
   if (pote>nivoo) digitalWrite(led, HIGH);   if (pote>nivoo) digitalWrite(led, HIGH);
-  else digitalWrite(led, LOW); // vastasel korral kustutame LED-i+  else digitalWrite(led, LOW); // other cases turn LED off
 } }
 </code> </code>
  
-===== Näide #2.2 LED-i vilkumise sagedus sõltub potentsiomeetri sisendist =====+===== Example #2.2 LED blinking speed depends on potentiometer value =====
  
  
 <code c> <code c>
-/* 
-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 pote_sisend = A0; // set potentiometer pin 
-int led = A5; // määrame LED ühendusviigu  +int led = 13; // set LED pin 
-int pote = 0; // muutuja potentsiomeetri väärtuse salvestamiseks+int pote = 0; // integer variable to hold potentiometer value
  
 void setup() { void setup() {
-  pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks+  pinMode(led, OUTPUT); // define LED pin as output
 } }
 void loop() { void loop() {
-  pote = analogRead(pote_sisend); // loeme anduri väärtuse  +  pote = analogRead(pote_sisend); // read potentiometer value and write into variable 
-  digitalWrite(led, HIGH); // kustutame LED-i  +  digitalWrite(led, HIGH); // turn off LED 
-  delay(pote); // tekitame viite <sensorValue> millisekundit  +  delay(pote); // generate delay <sensorValue> milliseconds  
-  digitalWrite(led, LOW); // süütame LED-i  +  digitalWrite(led, LOW); // turn on LED 
-  delay(pote); // tekitame viite <sensorValue> millisekundit+  delay(pote); // generate delay <sensorValue> milliseconds
 } }
 </code> </code>
  
-====== Näide #3 LCD ======+===== Task #=====
  
-===== Näide #3.1 LCD kasutamine =====+Modify example program so that its possible to change LED brifgtness with potentiometer. Use delay functions. 
 +/*Modifitseerida näiteprogrammi nii, et potentsiomeetriga määratakse LED-i heledus, kasutades selleks delay funktsioone.*/ 
 + 
 +====== Example #3 LCD ====== 
 + 
 +Connect LCD shield to Arduino board. Before attaching remove all connections from the board. 
 + 
 +===== Example #3.1 LCD using =====
  
  
 <code c> <code c>
-/* 
-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+#include <LiquidCrystal.h> // include needed libraries
  
-// Initsialiseerime LCD koos vastavate viikude ühendamisega+// Initialize LCD
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  
 void setup() { void setup() {
-  lcd.begin(16, 2); //Määrame LCD read ja veerud +  lcd.begin(16, 2); // set LCD cursor column and row 
-  lcd.print("Tere Tallinn!"); // Trükime tervitusteksti+  lcd.print("Tere Tallinn!"); // Print text on LCD
 } }
  
 void loop() { void loop() {
      
-  lcd.setCursor(0, 1); //Viime kursori esimesele reale esimesse positsiooni (1. rida on indeksiga 0)+  lcd.setCursor(0, 1); //set cursor position to first row and column 0 (1. rida on indeksiga 0)
      
-  lcd.print(millis()/1000); //Trükime loenduri väärtuse+  lcd.print(millis()/1000); // Print sensor value to LCD
      
 } }
 </code> </code>
  
-===== Näide #3.2 LCD kasutamine analoogsisendiga =====+===== Example #3.2 LCD and analog inputs =====
  
 <code c> <code c>
-/* 
-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+#include <LiquidCrystal.h> // include needed library
  
-// Initsialiseerime LCD koos vastavate viikude ühendamisega+// Initialize LCD
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
-int pote_sisend = A1; // määrame potentsiomeetri sisendviigu+int pote_sisend = A1; // set potentiometer pin
  
 void setup() { void setup() {
-  lcd.begin(16, 2); //Määrame LCD read ja veerud +  lcd.begin(16, 2); // set LCD column and row 
-  lcd.print("Potentsiomeeter"); // Trükime tervitusteksti+  lcd.print("Potentsiomeeter"); // Print out sensor name on LCD
 } }
  
 void loop() { void loop() {
      
-  lcd.setCursor(0, 1); //Viime kursori esimesele reale esimesse positsiooni (1. rida on indeksiga 0) +  lcd.setCursor(0, 1); //set cursor position first row and column 0 (1. rida on indeksiga 0) 
-  lcd.print(analogRead(pote_sisend)); //Trükime analoogsisendi väärtuse +  lcd.print(analogRead(pote_sisend)); //Print out potentiometer value to LCD 
-  lcd.print("    "); //Trükime tühikud, et vana väärtus ei jääks segama+  lcd.print("    "); //Print out empty spaces 
   delay (100);     delay (100);  
 } }
Line 269: Line 185:
  
 </code> </code>
 +
 +===== Task #3.1 =====
 +
 +Make a program that on button press changes LCD row. Potentiometer value has to be printed only on the new row. 
 +/*Koostada programm, mis võimaldab nupuvajutusega vahetada LCD rida, kuhu trükitakse potentsiomeetri väärtus.*/
 +
  
  
-<note> Futher text needs translation </note> +====== Example Sensors and LCD ======
-====== Näide Andurid ja LCD ======+
  
-===== Näide #4.1 Temperatuuri andur koos matemaatika teegiga =====+===== Example #4.1 Temperature sensor with math library =====
  
  
Line 299: Line 220:
 // Initsialiseerime LCD koos vastavate viikude ühendamisega // Initsialiseerime LCD koos vastavate viikude ühendamisega
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
-int andur = A4; // määrame potentsiomeetri sisendviigu+int andur = A1; // set thermistor input pin
  
 void setup() { void setup() {
Line 348: Line 269:
 ===== Näide #4.2 Kaugusandurid ===== ===== Näide #4.2 Kaugusandurid =====
  
 +<code c>
 +// 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 2 and 3
 +  int AnalogSensorValue = analogRead(A2);
 +  int DigitalSensorValue = digitalRead(A3);
 +  
 +  Serial.println(AnalogSensorValue); // Print out the analog value
 +  Serial.println(DigitalSensorValue); // Print out the digital value
 +  
 +  delay(500); // Delay in between readings for readability
 +
  
 +</code>
  
-====== Näide 5 Mootorid ======+===== Harjutus #4.1 ===== 
 +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). 
 +**Extra:** 
 +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
  
 +===== Harjutus #4.2 =====
 +Modify distance sensor example so that it would print values on the LCD in centimeters (+-5cm accuracy). If no measureing tool is available then use the sensor datasheet graph.
  
 +====== Näide #5 Mootor ======
  
 +Disconnect the LCD shield before using motors. Before disconnecting remove all connections from shield and Arduino board. 
 +
 +===== Näide #5.1 Servomootor =====
 +
 +<code c>
 +#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
 +
 +
 +</code>
 +
 +===== Näide #5.2 Potentsiomeetriga juhitav servomootor =====
 +
 +<code c>
 +#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
 +
 +
 +
 +</code>
 +
 +===== Harjutus #5.1 =====
 +Luua programm, mis võimaldab servomootori positsiooni muuta vastavalt analoog kaugusanduri väärtusele (kasutada map funktsiooni).
 +
 +===== Harjutus #5.2 =====
 +Luua programm, mis servomootori baasil ehitatud radariga ja analoog kaugusanduriga leiaks ruumist lähima punkti (objekti otsimine tühjast ruumist).
  
 ====== Näide 6 Kommunikatsioon ====== ====== Näide 6 Kommunikatsioon ======
Line 362: Line 366:
 <code c> <code c>
 /* /*
-Nimetus: Näide #4.1 Jadaliides+Nimetus: Näide #6.1 Jadaliides
 */ */
 #include <math.h> #include <math.h>
Line 403: Line 407:
 </code> </code>
  
-===== Harjutus #4.1 =====+===== Harjutus #=====
  
-Luua programm, mis võimaldab servomootori positsiooni muuta vastavalt nuppudega seadistatud suurusele. +Luua programm, mis jadaliidesest saadetud teksti kirjutaks LCD ekraanileMärk „+“ vahetab rida ning märk „-“ kustutab kogu ekraani.
-===== Harjutus #4.2 =====+
  
-Luua programm, mis servomootori baasil ehitatud radariga ja fotoanduriga leiaks ruumist kõige eredama punkti. 
-===== Harjutus #5 ===== 
- 
-Luua programm, mis jadaliidesest saadetud teksti kirjutaks LCD ekraanile. Märk „+“ vahetab rida ning märk „-“ kustutab kogu ekraani. 
  
 ====== Praktiline projekt #1 ====== ====== Praktiline projekt #1 ======
en/arduino.1449739622.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0