Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
arduino_lahendused [2014/06/10 07:21] rellermaaarduino_lahendused [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 28: Line 28:
   pinMode(rohelineLED, OUTPUT); // algväärtustame LED viigu väljundiks    pinMode(rohelineLED, OUTPUT); // algväärtustame LED viigu väljundiks 
   pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks    pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks 
 +  digitalWrite(nupp, HIGH); // turn on internal pull-up resistor on button pin
 } }
  
Line 88: Line 89:
   pinMode(rohelineLED, OUTPUT); // algväärtustame LED viigu väljundiks    pinMode(rohelineLED, OUTPUT); // algväärtustame LED viigu väljundiks 
   pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks    pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks 
 +  digitalWrite(nupp, HIGH); 
 } }
  
Line 137: Line 139:
 */ */
  
-int pote_sisend = A5; // määrame potentsiomeetri sisendviigu+int pote_sisend = A1; // määrame potentsiomeetri sisendviigu
 int led_roheline = 13; // määrame rohelise LEDi ühendusviigu int led_roheline = 13; // määrame rohelise LEDi ühendusviigu
  
Line 149: Line 151:
 void loop()  void loop() 
 { {
-  pote = analogRead(pote_sisend)+1;  // loeme analoogsisendi väärtuse+  pote = analogRead(pote_sisend)+1;  // loeme analoogsisendi väärtuse 1 liidetakse, et ei tekiks 0 viide
  
   // Vilgutame LEDi väga kõrgel sagedusel, et paistaks tuhmim   // Vilgutame LEDi väga kõrgel sagedusel, et paistaks tuhmim
Line 155: Line 157:
   delayMicroseconds(pote);           // Ootame potensiomeetriga määratud mikrosekundid   delayMicroseconds(pote);           // Ootame potensiomeetriga määratud mikrosekundid
   digitalWrite(led_roheline, LOW);   // kustutame LED-i   digitalWrite(led_roheline, LOW);   // kustutame LED-i
-  delayMicroseconds(1026-pote);      // Ootame ülejäänud mikrosekundid+  delayMicroseconds(1026-pote);      // Ootame ülejäänud mikrosekundid. Peab olema suurem, kui max muutuja pote väärtus (pote+1)
 } }
  
 </code> </code>
 +
 ====== Harjutus #3.1 ====== ====== Harjutus #3.1 ======
 +Koostada programm, mis trükib potentsiomeetri väärtuse rea algusesse. Vajutades nupule vahetatakse rida ja jooksev väärtus kirjutatakse uuele reale. Vajutades uuesti nuppu vahetatakse aktiivse kirjutamise rida tagasi.
 +
 +<code c>
 +#include <LiquidCrystal.h> // include needed library
 + 
 +// Initialize LCD
 +LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 +const int nupp = A0; // Viik kuhu on ühendatud nupp
 +int pote_sisend = A1; // set potentiometer pin
 +int y=0;
 + 
 +void setup() {
 +  lcd.begin(16, 2); // set LCD column and row
 +  pinMode(nupp, INPUT); // define button pin as input
 +  digitalWrite(nupp, HIGH); // turn on internal pull-up resistor on button pin
 +}
 + 
 +void loop() {
 +
 +  if (digitalRead(nupp) == LOW) { // if button pressed 
 +   while (digitalRead(nupp) == LOW){} // wait for button release
 +   if (y) y=0; else y=1;
 +  } 
 +  lcd.setCursor(0, y); //set cursor position first row and column 0 (1. rida on indeksiga 0)
 +  lcd.print(analogRead(pote_sisend)); //Print out potentiometer value to LCD
 +  lcd.print("    "); //Print out empty spaces 
 +  delay (100);  
 +}
 +</code>
 +
 +====== 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). 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).
Line 178: Line 212:
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  
-int pote_sisend = A5;  // määrame potentsiomeetri sisendviigu +int pote_sisend = A1;  // määrame potentsiomeetri sisendviigu 
-int NTC_sisend A3;  // määrame temperatuurianduri sisendviigu+int NTC_sisend A2;  // määrame temperatuurianduri sisendviigu
 int led = 13;  // määrame LED ühendusviigu int led = 13;  // määrame LED ühendusviigu
 int nupp = A0;  // määrame nupu ühendusviigu int nupp = A0;  // määrame nupu ühendusviigu
Line 233: Line 267:
   }   }
 } }
- 
- 
- 
- 
- 
 </code> </code>
-====== Harjutus #3.2 ======+====== Harjutus #4.2 ======
  
 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 100 %) 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 100 %)
Line 337: Line 366:
   SoftPWMSetPercent(led, value);   SoftPWMSetPercent(led, value);
 } }
 +</code>
  
  
  
- +====== Harjutus #5.1 ======
- +
-</code> +
- +
-====== Harjutus #4.1 ======+
  
 Luua programm, mis võimaldab servomootori positsiooni muuta vastavalt nuppudega seadistatud suurusele. Luua programm, mis võimaldab servomootori positsiooni muuta vastavalt nuppudega seadistatud suurusele.
 <code c> <code c>
 +// Kaasame vajalikud teegid 
 +#include <Servo.h> 
 +  
 +Servo myservo;  // create servo object to control a servo  
 +int nupud = A0; // määrame potentsiomeetri sisendviigu 
 +int pos = 0;    // variable to store the servo position  
 +  
 +void setup() { 
 +  myservo.attach(A2);  // attaches the servo on pin A2 to the servo object 
 +
 +  
 +void loop() { 
 +  if (analogRead(nupud) <= 90) // Kui on vajutatud parem nupp 
 +  { 
 +    pos++;  // Suurendame positsiooni kuni maksimumväärtuseni 
 +    if (pos > 180) 
 +      pos = 170; 
 +  } 
 +  else if ((analogRead(nupud) >= 450) && (analogRead(nupud) <= 550)) // Kui on vajutatud vasak nupp 
 +  { 
 +    pos--;  // Vähendame positsiooni kuni miinimumväärtuseni 
 +    if (pos < 1) 
 +      pos = 1; 
 +  } 
 +  myservo.write(pos);              // annabe servole uue positsiooni 
 +  delay(15);                       // oota 15ms servo liikumiseks 
 +}
 </code> </code>
-====== Harjutus #4.2 ======+====== Harjutus #5.2 ======
  
 Luua programm, mis servomootori baasil ehitatud radariga ja fotoanduriga leiaks ruumist kõige eredama punkti. Luua programm, mis servomootori baasil ehitatud radariga ja fotoanduriga leiaks ruumist kõige eredama punkti.
 <code c> <code c>
 +// Kaasame vajalikud teegid
 +#include <Servo.h>
 + 
 +Servo myservo;  // create servo object to control a servo 
 +int nupud = A0; // määrame potentsiomeetri sisendviigu
 +int andur = A3; // valgusanduri määramine
  
 +int pos = 0;        // variable to store the servo position
 +int pos_max = 0;    // variable to store the servo position bi max light
 +int lugemMax = 0;   //suurim väärtus
 +int andur_vaartus=0;//vahemuutuja anduri väärtus ejaoks
 + 
 +void setup() 
 +{
 +  myservo.attach(A2);  // attaches the servo on pin A2 to the servo object
 +  Serial.begin(9600);
 +}
 + 
 +void loop() 
 +{
 +  if (analogRead(nupud) <= 90){ //tehakse läbi nupu vajutamisel
 +    lugemMax = 0;    //suurima väärtuse nullimine
 +    pos_max = 0;
 +
 +    //algasendisse keeramine
 +    myservo.write(0);  
 +    delay(500);
 +    
 +    //suurima valguskoha otsimine
 +    for(pos = 50; pos < 140; pos += 1)  // Liigutame servot 50'st 140'ni
 +    {                                    
 +      myservo.write(pos);              // liigutame servot
 +      delay(50);                       // ootame servo liikumist
 +      andur_vaartus=analogRead(andur); // anduri väärtuse lugemine
 +      Serial.print("pos: ");
 +      Serial.print(pos);
 +      Serial.print(" - ");
 +      Serial.println(andur_vaartus);
 +      if (andur_vaartus > lugemMax)    // kas anduri väärtus on suuremim
 +      {
 +        lugemMax = andur_vaartus;      // suurima väärtuse salvestamine
 +        pos_max = pos;                 // vastava positsiooni meelde jätmine
 +      }
 +    }
 +    //Pärast skännimist eredaimasse punkti paika keeramine
 +    myservo.write(pos_max);
 +  }
 +}
 </code> </code>
-====== Harjutus #======+====== Harjutus #======
  
 Luua programm, mis jadaliidesest saadetud teksti kirjutaks LCD ekraanile. Märk „+“ vahetab rida ning märk „-“ kustutab kogu ekraani. Luua programm, mis jadaliidesest saadetud teksti kirjutaks LCD ekraanile. Märk „+“ vahetab rida ning märk „-“ kustutab kogu ekraani.
 <code c> <code c>
 +/*
 +Nimetus: Näide #4.1 Jadaliides
 +*/
 +#include <LiquidCrystal.h> // Kaasame vajaliku teegi
 +LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  
 +// Globaalsed muutujad
 +char data;
 +char rida = 0;
 +
 +void setup() 
 +{
 + Serial.begin(9600); // Seadistame Serial ühenduse 9600 baudrate'ga
 + lcd.begin(16, 2); // Määrame LCD read ja veerud
 +}
 +
 +void loop() 
 +{
 + if(Serial.available()) // Kontrollime, kas on Serial ühendusest tulnud andmeid
 + {
 +   data = Serial.read(); // Loeme tulnud andmed muutujasse "data"
 +   if(data == '+') // Kontrollime kas saadeti '+' märk
 +   {  
 +     rida ^= 1; // Vahetame rida 0 ja 1 vahel
 +     lcd.setCursor(0, rida);// Liigutame kursorit
 +   }
 +   else if (data == '-') // Kontrollime kas saadeti '-' märk
 +   {
 +     lcd.clear(); // Puhastame ekraani
 +     lcd.setCursor(0, rida);// Liigutame kursori tagasi olnud reale
 +   }
 +   else // Muul juhul
 +   {
 +     lcd.print(data); // Kirjutame saadud sümboli LCDle
 +   }
 + }
 +}
 </code> </code>
 ====== Praktiline projekt #1 ====== ====== Praktiline projekt #1 ======
Line 379: Line 514:
           temperatuur kelvinites = 1 / {A + B[ln(R)] + C[ln(R)]^3}           temperatuur kelvinites = 1 / {A + B[ln(R)] + C[ln(R)]^3}
           kus A = 0.001129148, B = 0.000234125 ja C = 8.76741E-08           kus A = 0.001129148, B = 0.000234125 ja C = 8.76741E-08
-Autor: Milan Malesevic and Zoran Stupic  +Autor: Rain Ellermaa 
-Modifikatsioon: Raivo Sell +Kuupäev: 10.06.2014
-Kuupäev: 15.01.2013/4.06.2014+
 Versioon: 1.1 Versioon: 1.1
 */ */
    
-// Kaasame vajalikud teegid+#include <LiquidCrystal.h> // Kaasame vajaliku teegi
 #include <math.h> #include <math.h>
-#include <LiquidCrystal.h> 
-#include <SoftPWM.h> 
 #include <Servo.h> #include <Servo.h>
-Servo Aknaservo; 
    
 // 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 +Servo myservo;      // Servo objekt 
-int pote_sisend=A1+  
-int LED=A5+int pote_sisend A5 // määrame potentsiomeetri sisendviigu 
-int nupud=A0; +int NTC_sisend  A3 // määrame temperatuurianduri sisendviigu 
-int pote_temp=0; +int led 13 // määrame LED ühendusviigu 
-int seade_temp=0; +int nupp = A0;  // määrame nupu ühendusviigu 
-int nullistSajani; +  
-unsigned long laks=0; +// muutujad potentsiomeetri ja temperatuuri väärtuse salvestamiseks 
-boolean korras=true+int pote = 0;  
-void setup() { +long ntc = 0; 
-  Aknaservo.attach(A2); +double temperatuur = 0; 
-    // Initialize +int seade -1; 
-  //SoftPWMBegin(); +  
-  // Create and set pin 13 to 0 (off) +void setup()  
-  //SoftPWMSet(13, 0); +
-  pinMode(pote_sisend,INPUT); +  pinMode(led, OUTPUT); // seadistame LED viigu väljundiks  
-  pinMode(LED,OUTPUT); +  pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks  
-  pinMode(nupud,INPUT);+ 
   lcd.begin(16, 2); //Määrame LCD read ja veerud   lcd.begin(16, 2); //Määrame LCD read ja veerud
-  lcd.print("Temperatuur"); // Trükime tervitusteksti +  lcd.setCursor(0, 1); lcd.print("Seade:    "); 
-  seade_temp=25; +  lcd.setCursor(7, 1); lcd.print(seade); 
-  delay (500); +  
-  lcd.clear(); +  myservo.attach(A2);   // Seadistame servo A2's
-  Aknaservo.write(0); +
- +
-  Serial.begin(9600);  +
 } }
    
-void loop() { +void loop()  
-  while(korras)+
 +  pote = map(analogRead(pote_sisend),0,1023,-20,100);  // loeme potensiomeetri väärtuse ja teisendame vahemikku -20C - 100C 
 +  ntc = analogRead(NTC_sisend); // loeme temperatuuri anduri väärtuse 
 +  
 +  // Teisendame temperatuurianduri väärtuse temperatuuriks 
 +  temperatuur = log(((10240000/ntc) - 10000)); 
 +  temperatuur = 1/(0.001129148 + (0.000234125 + (0.0000000876741 * temperatuur * temperatuur))* temperatuur); 
 +  temperatuur = temperatuur - 273.15; // Konverteeri Kelvinid Celciustesse 
 +  
 +  // Kuvame informatsiooni LCD ekraanile 
 +  lcd.setCursor(0, 0);  lcd.print("Pot:    "); 
 +  lcd.setCursor(4, 0);  lcd.print(pote); 
 +  lcd.setCursor(8, 0);  lcd.print("Tmp:    "); 
 +  lcd.setCursor(12, 0); lcd.print(temperatuur); 
 +  
 +  // Kui nupule vajutatakse, salvesta seadesuurus 
 +  if(digitalRead(nupp) == LOW)
   {   {
-  if(millis()-1000>laks){ +    seade = pote; 
-    lcd.clear(); // Puhastame ekraani vanadest andmetest +    lcd.setCursor(0, 1); lcd.print("Seade:    "); 
-    Termistor(analogRead(andur)); // Käivitame funktsooni +    lcd.setCursor(7, 1); lcd.print(seade);
-    laks=millis();+
   }   }
-  if(analogRead(nupud)>490 && analogRead(nupud)<900)+  
 +  // Kui temperatuur on kõrgem potensiomeetriga seatud väärtusest ja nuppu pole vajutatud 
 +  if((temperatuur seade) && (digitalRead(nupp) == HIGH))
   {   {
-    korras^=1+    int vahe temperatuur - seade
-    Aknaservo.write(0); +    switch(vahe)
-  } +
-   Serial.println(analogRead(nupud)); +
-  } +
-  if(!korras)+
     {     {
-      digitalWrite(LED,1); +      case 0: myservo.write(50);   break
-      delay(1000);     +      case 1: myservo.write(90);   break; 
-      digitalWrite(LED,0); +      case 2: myservo.write(130);  break
-      delay(1000); +      default: myservo.write(180); break;
-      Termistor(analogRead(andur))    +
     }     }
-} 
-  
-void Termistor(int RawADC) { 
-   double Temp; 
-   long Takistus; 
-  // Valem: Takistus = (1024 * JaguriTakisti/ADC) - JaguriTakisti  
-  Takistus=((10240000/RawADC) - 10000);     
- pote_temp=analogRead(pote_sisend); 
- pote_temp=map(pote_temp,0,1023,-10,35); 
-  //Esimene rida  
-  lcd.setCursor(0, 0); 
-  lcd.print("Pot:"); 
-  lcd.print(pote_temp);  //Trükime pinge väärtuse  
-  //Teine rida 
-  if(analogRead(nupud)<100) 
-    seade_temp=pote_temp; 
-  lcd.setCursor(0, 1); 
-  lcd.print("Seade:"); 
-  lcd.print(seade_temp); //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, 0); 
-  lcd.print("Tmp:"); 
-  lcd.print(Temp); //Trükime temperatuuri väärtuse 
-  int vahe=Temp-seade_temp; 
-  //lcd.setCursor(8,1); 
-  //lcd.print(vahe); 
-  if(korras){   
-    switch (vahe) { 
-    case 1: 
-      Aknaservo.write(Teisenda(25)); 
-      break; 
-    case 2: 
-      Aknaservo.write(Teisenda(50)); 
-      break; 
-    case 3: 
-    case 4: 
-      Aknaservo.write(Teisenda(75)); 
-      break; 
-    case 5: 
-      Aknaservo.write(Teisenda(100));       
-      break;   
-    }   
   }   }
-  if(seade_temp<Temp) +  else 
-  {     +
-  } +
-  else+
   {   {
-    Aknaservo.write(Teisenda(0));     +    myservo.write(0); // vastasel korral kustutame LED-i
-    korras=true; +
-  } +
-  } +
-  int Teisenda(int protsent) +
-  { +
-    return map(protsent,0,100,0,180);+
   }   }
 +  delay(100);
 +}
 +
 </code> </code>
 ====== Praktiline projekt #2 ====== ====== Praktiline projekt #2 ======
Line 511: Line 599:
 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: 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:
 xTEMP – tagastab kümnekordse temperatuuri Celsiuse kraadides (24,5C puhul saadetakse 245) xTEMP – tagastab kümnekordse temperatuuri Celsiuse kraadides (24,5C puhul saadetakse 245)
-vastus: xNNN+vastus: xNNNN
 xFANn – FAN1 käivitab ventilaatori, FAN0 peatab ventilaatori xFANn – FAN1 käivitab ventilaatori, FAN0 peatab ventilaatori
 vastus xFANn vastus xFANn
Line 517: Line 605:
 Protokollis tähistab „x“ kohaliku seadme numbrit, mille annab juhendaja igale tiimile erineva. Protokollis tähistab „x“ kohaliku seadme numbrit, mille annab juhendaja igale tiimile erineva.
 <code c> <code c>
 +#include <LiquidCrystal.h> // Kaasame vajaliku teegi
 +#include <math.h>
 +#include <Servo.h>
 + 
 +// Initsialiseerime LCD koos vastavate viikude ühendamisega
 +LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 +Servo myservo;      // Servo objekt
 + 
 +int pote_sisend = A5;  // määrame potentsiomeetri sisendviigu
 +int NTC_sisend  = A3;  // määrame temperatuurianduri sisendviigu
 +int led = 13;  // määrame LED ühendusviigu
 +int nupp = A0;  // määrame nupu ühendusviigu
 + 
 +// muutujad potentsiomeetri ja temperatuuri väärtuse salvestamiseks
 +int pote = 0; 
 +long ntc = 0;
 +double temperatuur = 0;
 +int seade = -1;
 + 
 +void setup() 
 +{
 +  pinMode(led, OUTPUT); // seadistame LED viigu väljundiks 
 +  pinMode(nupp, INPUT); // algväärtustame nupu viigu sisendiks 
 + 
 +  lcd.begin(16, 2); //Määrame LCD read ja veerud
 +  lcd.setCursor(0, 1); lcd.print("Seade:    ");
 +  lcd.setCursor(7, 1); lcd.print(seade);
 + 
 +  myservo.attach(A2);   // Seadistame servo A2's
 +  Serial.begin(9600);
 +}
 + 
 +char temp1; 
 +char temp2;
 +char temp3;
 +char temp4;
 + 
 +void loop() 
 +{
 +  // Loeme temperatuuri
 +  temperatuur = -100;
 +  Serial.println("0TEMP");
 +  while(temperatuur == -100)
 +  {
 +    while(Serial.available() < 5); // Oota, kuni saabub vastuse pakett
 +    if(Serial.read() == '0'      // Kontrollime, kas vastus on mõeldud "meile"
 +    {
 +      // Loeme sisse temperatuuri
 +      // (vaja on lahutada ASCII 0, et saada ASCII koodist number)
 +      temp1 = Serial.read()-'0'; // Sajalised 
 +      temp2 = Serial.read()-'0'; // Kümnelised
 +      temp3 = Serial.read()-'0'; // Ühelised
 +      temp4 = Serial.read()-'0'; // Kümnendikud
  
 +      // Arvutame temperatuuri
 +      temperatuur = temp1*100 + temp2*10 + temp3;
 +      temperatuur += temp4 * 0.1;
 +    }
 +  }
 +  
 +  // Mõõdame seadesuuruse
 +  pote = map(analogRead(pote_sisend),0,1023,-20,100);  // loeme potensiomeetri väärtuse ja teisendame vahemikku -20C - 100C
 +
 +  // Kuvame informatsiooni LCD ekraanile
 +  lcd.setCursor(0, 0);  lcd.print("Pot:    ");
 +  lcd.setCursor(4, 0);  lcd.print(pote);
 +  lcd.setCursor(8, 0);  lcd.print("Tmp:    ");
 +  lcd.setCursor(12, 0); lcd.print(temperatuur);
 + 
 +  // Kui nupule vajutatakse, salvesta seadesuurus
 +  if(digitalRead(nupp) == LOW)
 +  {
 +    seade = pote;
 +    lcd.setCursor(0, 1); lcd.print("Seade:    ");
 +    lcd.setCursor(7, 1); lcd.print(seade);
 +  }
 + 
 +  // Kui temperatuur on kõrgem potensiomeetriga seatud väärtusest ja nuppu pole vajutatud
 +  if((temperatuur > seade) && (digitalRead(nupp) == HIGH))
 +  {
 +    int vahe = temperatuur - seade;
 +    switch(vahe)
 +    {
 +      case 0: myservo.write(50);   break;
 +      case 1: myservo.write(90);   break;
 +      case 2: myservo.write(130);  break;
 +      default: myservo.write(180); break;
 +    }
 +  }
 +  else 
 +  {
 +    myservo.write(0); // vastasel korral kustutame LED-i
 +  }
 +  delay(100);
 +}
 +</code>
 +
 +Kaugseadme kood:
 +<code c>
 +/*
 +Nimetus: Näide #4.1 Jadaliides
 +*/
 +#include <LiquidCrystal.h> // Kaasame vajaliku teegi
 +#include <math.h>
 +int NTC_sisend = A4; // määrame temperatuurianduri sisendviigu
 +LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 +
 +const int mAIN1  = 12;
 +const int mAIN2  = 11;
 +
 +void setup() 
 +{
 +  Serial.begin(9600);
 +  lcd.begin(16, 2); //Määrame LCD read ja veerud
 +  pinMode(3,OUTPUT);
 +  pinMode(mAIN1, OUTPUT);
 +  pinMode(mAIN2, OUTPUT);
 +  digitalWrite(mAIN1,HIGH);
 +  digitalWrite(mAIN2,LOW);
 +}
 +
 +char data;
 +char rida = 0;
 +String string;
 +char stringpos;
 +
 +void loop() 
 +{
 + if(Serial.available() >= 5)
 + {
 +   data = Serial.read();
 +   
 +   if((data >= '0') && (data <= '9'))
 +   {  
 +     lcd.setCursor(0,0);
 +     lcd.print(data);
 +     string = String("");
 +     while(Serial.peek() != '\r')
 +     {
 +       string += (char)Serial.read();
 +       while(!Serial.available());
 +     }
 +     if(string == "FAN1")
 +     {
 +       Serial.print(data);
 +       Serial.println(string);
 +       digitalWrite(3,HIGH);
 +       
 +     }
 +     else if(string == "FAN0")
 +     {
 +       Serial.print(data);
 +       Serial.println(string);      
 +       digitalWrite(3,LOW);
 +     }
 +     else if(string == "TEMP")
 +     {
 +       Serial.print(data);
 +       int tempr = Termistor(analogRead(NTC_sisend))*10;
 +       if(tempr < 1000)
 +         Serial.print("0");
 +       Serial.println(tempr);
 +       lcd.setCursor(0,1);
 +       lcd.print(tempr);
 +     }
 +   }
 +   else
 +     Serial.flush();
 + }
 +}
 +double Termistor(long RawADC) 
 +{
 +  double Temp;
 + 
 +  Temp = log(((10240000/RawADC) - 10000));
 +  Temp = 1/(0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp))* Temp);
 +  Temp = Temp - 273.15; // Konverteeri Kelvinid Celciustesse
 +  
 +  return Temp;
 +}
 </code> </code>
  
arduino_lahendused.1402384885.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