//Harjoitus 4
//Palauta Moodleen PDF, jossa on
// 1. Linkki WOKWI-vastaukseesi
// 2. Koodi muotoiltuna ja kokonaisuudessaan. Jos tulostat kuvan sivun ulkopuolelle,
// en voi sitä lukea.
// (vaikkapa järjellinen screenshot WOKWIsta tai copy-paste ja asiallinen muotoilu)
// Muutenkin koodi kannattaa muotoilla, niin että sitä on helppo lukea koska
// se helpottaa ongelmanratkaisua.
// 3. PALAUTA VAIN KOODI, JONKA VOI SUORITTAA. (Vihreä pallo Simulation-tekstin alapuolella)
// Annetun esimerkkikoodin voi suorittaa, eli mikäli
// muutoksesi rikkoo ohjelman, voit aina palata takaisin alkuun ja kokeilla uudella tavalla.
// Kannattaisiko tallentaa välillä uudelle nimelle?
// "Download project ZIP" save-valikosta mahdollistaa varmuuskopion itsellesi.
// Sen voi myös ladata takaisin palveluun.
// Kun avaat Moodlessa annetun linkin tähän WOKWI-projektiin ja tallennat sen "save"-toiminnolla
// osoiterivillä näkyvä osoite muuttuu. Tallenna osoite itsellesi, sillä se on keino päästä
// jatkamaan harjoitustasi. Se on myös linkki jonka palautat PDF:ssä.
// Koodirivi ilman kommenttia on arvoton.
//Tehtävät on kirjoitettu tämän ohjelman kommentteihin.
//Harjoituksen laitteessa on vipuvarsi, jonka asentokomento annetaan potentiometrillä.
//Asennon ollessa liian suuri, aktivoituu hälytys.
//Hälytys voidaan kuitenkin vaimentaa väliaikaisesti.
//Ladataan Servo.h kirjasto lennokkiservon
//ohjaamisen helpottamiseksi
#include <Servo.h>
//Luodaan MRGservo niminen Servo-olio
Servo MRGservo;
//Tässä voit määritellä globaaleja muuttujia.
//Eli nämä muuttujat ovat käsiteltävissä ohjelman kaikissa osissa.
//Käytä harkiten ja säästeliäästi.
bool HighAlertButton = false; //Voit halutessasi käyttää tätä
bool HighAlert = false; //Voit halutessasi käyttää tätä
//Annetaan nimet pinneille, jotta niitä on mukavampi käsitellä ohjelmassa
int PotPin = A0; //Potentiometri
int LedPin = 9; //Merkkivalo
int ServoPin = 3; //Servon ohjaus
int ButtonPin = 7; //Painonappi
//Arduinon setup-funktio suoritetaan kerran ohjelman alussa
void setup() {
Serial.begin(9600); //Alustetaan tulostus sarjaporttiin, jotta ongelmanratkaisu olisi helpompaa
pinMode(PotPin, INPUT); //Määritetään PotPin sisäänmenoksi
pinMode(ButtonPin, INPUT_PULLUP); //Määritetään ButtonPin sisäänmenoksi ja
//sille sisäinen ylösvetovastus
pinMode(LedPin, OUTPUT);
MRGservo.attach(ServoPin); //Liitetään MRGservoon pinni ServoPin
}
//Arduinon loop-funktio suoritetaan toistuvasti ilman viivettä.
//Teollisuusautomaatiossa tämä suoritettaisiin täsmällisin väliajoin.
void loop() {
int Potentiometri = 0; //Alustetaan Potentiometri-niminen muuttuja ja annetaan sille arvoksi 0
Potentiometri = analogRead(PotPin); //Luetaan Potentiometrin asento
//Servon liikerata on 180 astetta.
///////////////////////////////////////////////////////
//Tehtävä 1
//KORJAA laskutoimitus siten, että potentiometrin ääripäät
//vastaavat servon ääripäitä. KOMMENTOI.
//Jos laskutoimituksessa on vakioita, selitä ne.
//(max 3 PISTETTÄ)
///////////////////////////////////////////////////////
float ServonAsento = float(Potentiometri) / 1 * 2 / 1.4 * 1.2 + 1.7 - 1.4;
//Tulostetaan debug-tietoa sarjaporttiin
//.print ei tulosta rivinvaihtoa
//.println tulostaa rivinvaihdon
Serial.print("Potentiometri: ");
Serial.print(Potentiometri);
Serial.print(" Servo: ");
Serial.println(ServonAsento);
MRGservo.write(ServonAsento); //Asetetaan servon asento asteina
///////////////////////////////////////////////////////
//Tehtävä 2
//-Kytke sarjaan led sekä vastus ja yhdistä ne pinneihin "GND" ja "9".
// Muista ledin napaisuus.
//-Valaise led, kun servon asento on yli 160 astetta
//(MAX 6 PISTETTÄ)
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
//Tehtävä 3
//-Kytke painonappi pinneihin "GND" ja "7"
//-Sammuta led, kun nappia painetaan
//-Led syttyy uudestaan, kun kulma on ollut 160 tai vähemmän ja nousee uudelleen yli 160
//(MAX 6 PISTETTÄ)
///////////////////////////////////////////////////////
delay(100); //Pidetään 100 millisekunnin tauko, jotta ohjelma ei rasita liikaa simulaattoria
}
// Suosittelen tutustumaan seuraaviin linkkeihin:
// https://maker.pro/arduino/projects/online-arduino-simulator-2021-blink-an-led-project
// https://create.arduino.cc/projecthub/Hack-star-Arduino/how-to-use-wokwi-arduino-simulator-what-is-wokwi-304e6b
// https://www.arduino.cc/reference/en/language/structure/control-structure/if/
// https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
// https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/
// https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/
// Ongelmatilanteessa kirjoita suosimaasi hakukoneeseen "Arduino" ja sen jälkeen murheesi englanniksi.
// arduino.cc ja wokwi.com sivustoilla on kattavia esimerkkejä.
// Hae tietoa aktiivisesti. Kysy apua tarvittaessa.