Android Remember right – Peli

Api harjoittelua ja ensimmäisen pelin luomista

* Android alustalle muistipeli jossa tarkoituksena muistaa värit esitetyssä järjestyksessä

* Hyödyntää SQLite tietokantaa, Jqueryä ja Javascriptiä, Cordovaa

Status: Released (Toimiva versio, peliä testattu Android Galaxy S3 puhelimella sekä Eclipse emulaattorilla)

Screenshots

Screenshot_2013-10-01-16-57-48

Screenshot_2013-10-01-16-58-07

Kuvaus pelistä:

Peli luo alkuun satunnaisen listan ja esittää tämän käyttäjälle, jonka jälkeen käyttäjän tulee muistaa esitetyt värit samassa järjestyksessä. Mikäli pelaaja onnistuu muistamaan samat värit oikeassa järjestyksessä pääsee pelaaja seuraavalle tasolle. Pelissä ei ole ylärajaa tasojen määrälle

Lähteet:

Terokarvinen.com
docs.phonegap.com

Sourcet:

Source
APK paketti

Pelin lisenssi:

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
More info about license: http://creativecommons.org/licenses/by-nc-nd/3.0/

Hello Cordova Device

Hello Cordova Device

Tässä viestissä käydään lävitse yksinkertainen cordova api, joka tällä kertaa on connect api. Esimerkissä jos puhelimessa ei ole internet (3g/wifi) käytössä niin ohjelmaa ei käynnistetä.

Muista myös liittää cordova.js eli:

<script type="text/javascript" charset="utf-8" src="cordova-2.1.0.js"></script>

Jos et ole varma kuinka asennat Cordovan / Phonegapin voit katsoa tämän viestin tai Tero karvisen viestin

Seuraava koodi toimii Cordova 2.1.0 versiolla testatusti:

<script type="text/javascript" charset="utf-8">

    document.addEventListener("deviceready", onDeviceReady, false);

    // Cordova is loaded and it is now safe to make calls Cordova methods
    //
    function onDeviceReady() {
        checkConnection();
    }

    function checkConnection() {
        var networkState = navigator.network.connection.type;

	
		if (networkState == 'none') {
       	 alert('No connection');
		} else {
			window.location.replace("varipeli.html"); // Jos netti kutsutaan haluttua sivua samassa kansiossa
       	 //alert('Connection type: ' + networkState);
        }
    }


    </script>

Koodi on suora muokkaus Phonegapin sivuilla esitetystä esimerkistä pienellä muokkauksella

Lähteet

Terokarvinen.com
http://docs.phonegap.com/en/2.0.0/index.html

Lisenssi

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Jquery-remember-right-game

Jquery remember right game

Release version

<!doctype html>
<html>
	<head>
	<title>Remember Right | Game</title>
	<script src="js/jquery-1.10.2.min.js"></script>
		<link rel="stylesheet" type="text/css" href="game.css">
	</head>
	<body>
		<center>
			
<b>Ohje:</b> Katso oikea järjestys ja valitse tämän jälkeen värit samassa järjestyksessä.
 
			<form>
				<input id="start" type="submit" value="Aloita peli" />
			</form>
		</center>
<div id="div1"><span id="w1">X<span></div>
<div id="div2"><span id="w2">X<span></div>
<div id="div3"><span id="w3">X<span></div>
<div id="div4"><span id="w4">X<span></div>
<script type="text/javascript">

		// Game made by: Petri Mäki
		// http://www.petrimaki.wordpress.com
		// This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
		// More info about license: http://creativecommons.org/licenses/by-nc-nd/3.0/

			var rungame = false;
			var level = 1;
			var ms = ["#w1", "#w2", "#w3", "#w4" ];
			var myArray = []; // contains right moves each round
			var sFull = ""; // max moves every round
			var s = 0; // current move

			$("#start").click(function(){
				$(this).hide();
				newGame();
				return false;
			});

			var move = "";
			$( "#div1" ).click(function() {	
				if(rungame) {
					move = "#w1";
					checkMove(move);
				}
			});
			$( "#div2" ).click(function() {
				if(rungame) {
					move = "#w2";
					checkMove(move);
				}
			});
			$( "#div3" ).click(function() {
				if(rungame) {
					move = "#w3";
					checkMove(move);
				}
			});
			$( "#div4" ).click(function() {
				if(rungame) {
					move = "#w4";
					checkMove(move);
				}
			});

			function checkMove(move) {
				if (myArray[ 0 ] == move) {
					s++;
					$("p").text("Oikea siirto! " + s + "/" + sFull);
					myArray.shift() //Remove 0 index from array
				} else {
					rungame = false;
					s = 0;
					$("p").text("Valitsit väärän värin! Peli ohitse. Pääsit tasolle: " +level);
					level = 1;
					$('#start').val('Haluatko yrittää uudestaan?');
					$('#start').show();
				}

				if (myArray.length == 0) { // Player won
					rungame = false;
					s = 0;
					level++;
					$("p").text("Muistit kaikki oikein! Seuraava taso on: " + level);
					$('#start').val('Siirry seuraavalle tasolle');
					$('#start').show();
					myArray = ["#w1", "#w2", "#w3", "#w4" ];
				}
			}

			function newGame() {
				myArray = [];
				for (var w =0; w < level + 3;w++) {
					var n = Math.floor((Math.random()*4));
					myArray.push(ms[n]); // Add random spans to array
				}
				sFull = myArray.length;
				var lastI = myArray.length - 1;
				$("p").text("Sinun tulee muistaa " + myArray.length+ " siirtoa. Taso: " + level);
				$.each(myArray, function(i, val) {
					setTimeout(function() {
						$(myArray[i]).fadeIn("normal", function() {
							$(this).fadeOut("normal");
							if (i == lastI) { // If last array index let player start game
								rungame = true;
								$("p").text("Aloita!");
							}
						});
					}, i * 2500);
				});
			}
		</script>	
</body>
<html>

Demo

Pelaa peliä

Lähteet

* Terokarvinen.com
* Jquery.com

Lisenssi

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
More info about license: http://creativecommons.org/licenses/by-nc-nd/3.0/

JQuery aloitus

Tässä viestissä käydään lävitse JQueryn asennus ja käyttöönotto, sekä yksinkertainen Hello World JQuerylla. Kaikki allaolevat koodit ovat vapaasti käytettävissä.

JQuery asennus ja käyttöönotto
Aluksi lataa JQuery osoitteesta http://www.jquery.com ja tallenna se. Itse tallensin kyseisen tiedoston /js kansioon index.html tiedoston alle, jonka loin samalla. Nyt olet asentanut JQueryn.

JQuery hello world

<!DOCTYPE html>
<html>
    <head>
		<title>Hello JQuery world</title>
        <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
	</head>
	<body>
			<script type ="text/javascript">
				$(document).ready(function(){
					$("#msgid").html("Hello world from JQuery");
				});

			</script>
			<p>HTML text</p>

			<div id="msgid"></div>
	</body>
</html>

Fadeout & Lomakkeen arvon lukeminen

Seuraavassa esimerkissä luetaan lomakkeesta arvo. Mikäli arvo on ”salainen” niin kerrotaan käyttäjälle että se on oikein. Muistathan että kyseinen ratkaisu ei ole tietoturvallinen salasanojen kyselyyn!

<!DOCTYPE html>
<html>
    <head>
		<title>Hello JQuery world</title>
		<style>span {display:none;}</style>
        <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
	</head>
	<body>
  <form action="javascript:alert('Oikein!');">
    <div>

	  <p>Salainen sana: <input type="password" /><br> <span id="vinkki" ></span></p>
      <input type="submit" />
    </div>
  </form>
  <span id="result"></span>
<script>

$("form").submit(function() {
  if ($("input:first").val() == "salainen") {
    $("#result").text("Oikein...").show(); //Tulostetaan span id="result" kenttään
    return true;
  }
  $("#result").text("Pieleen meni! Muista salainen").show().fadeOut(1000); //fadeOut = 1000 ms
  return false;
});

$("p").focusin(function() {
	$("#vinkki").text("Vinkki: Salaisen sanan tulee olla salainen").show().fadeOut(6000); //fadeOut = 6000 ms
});
</script>

</body>
</html>

Yksinkertaista lukujen kertomista

Syöttämällä 2 lukua JQuery kertoo ne.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Yksinkertaista kertomista</title>
  <style>

  p { color:blue; margin:8px; }
  	</style>
  <script src="js/jquery-1.10.2.min.js"></script>
</head>
<body>
  Anna luku1: <input id="first" type="text" value="2"/><br><br>
  Anna luku2:<input id="second" type="text" value="3"/>
  <p></p>
<script>
    $("input").keyup(function () {
      var firstValue = $("#first").val();
	  var secondValue = $("#second").val();
	  if($.isNumeric(firstValue)&&$.isNumeric(secondValue)) //Vain numeerisia arvoja
	  {
		var result = firstValue * secondValue;
	        $("p").text("Tulos: " + result);
	  } else {
		$("p").text("Vain numeroita!");
	  }
    }).keyup();
</script>

</body>
</html>

Lähteet

http://api.jquery.com/
http://www.terokarvinen.com

Lisenssi

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Oman Android ohjelman tekeminen

Tässä raportissa käydään lävitse onnistunut eclipse asennus, sekä Android Hello World. Lisää tietoa asennuksesta ja androidista löydät viestin lopusta ”lähteet” osiosta. Raportin lopuksi pystyt tehdä emulaattorissa Hello World ohjelman android alustalle.

Raportti tehtiin seuraavalla laitekokoonpanolla:
Prosessori: 2.4 GHz AMD Athlon II Dual-Core Processor N350

Keskusmuisti: 4 GB DDR3 (2 x 2048 MB)

Näytönohjain: ATI Mobility Radeon HD 5650 Graphics (switchable)

Kovaley: 640 GB SATA Hard Disk Drive 5400 rpm

Verkkokortti: Integrated 10/100/1000 Gigabit Ethernet LAN

Raportissa käytetty linux distro: Ubuntu 12.04.1 LTS

Asennus tehtii 31. elokuuta 2013 klo 12-13 välisenä aikana

Eclipse Asennus

Aloitin Eclipsen asentamisen pakentinhallinnasta

sudo apt-get -y install ia32-libs eclipse

Asennuksen jälkeen käynnistä Eclipse
Mene Eclipsessä Help -> Install new Software ja ”Install android eclipse plugin”

url kenttään syötä: https://dl-ssl.google.com/android/eclipse/

Eclipse Android asennus

Paina Next aina niin kauan että asennus alkaa. Jos saat Security Warning ilmoituksen jossa kysytään haluatko asentaa ei-allekirjoitettuja tiedostoja valitse kyllä. Uudelleenkäynnistystä kysyttäessä käynnistä uudelleen.

Uudelleenkäynnistyksen jälkeen ruutu näyttää jotakuinkin tältä:

Android SDK

Valitse kohta ”Install Android 2.2” ja ota raksi pois kohdasta ”Install the latest available version..” Sitten Next. Send usage statics to google: NO ja sitten Finish. Seuraavassa ruudussa hyväksy ehdot ja paina Next. Kun päivitys on valmis sulje ohjelma.

Seuraavaksi suunnista android-sdks kansioon ja sieltä tools kansio josta käynnistät ohjelman android. Itselläni kyseinen kansiopolku oli: /home/user/android-sdks/tools ja nyt sinun pitäisi olla alla olevassa näkymässä:

Android SDK manager

Valitse Android SDK Build-tools pelkästään ja asenna tämä. Kun asennus on valmis niin käynnistä Eclipse jälleen.

Luo uusi Android projekti

Siirry File -> New -> Project ja sieltä Android kansion alta Android Application Project ja paina Next. Anna ohjelmalle nimi Esim: Hello Android ja jos et pääse eteenpäin muuta Theme kohta None. Muuten älä tee muutoksia. Paina next, next, next. Install Dependencies kohdassa valitse: Install/Upgrade. Hyväksy lisenssi ja paina Next

Projektin ajo

Valitse HelloAndroid projekti hiiren oikealla Valitse run -> Android Application. Seuraavaksi kysytään haluatko lisätä uuden laitteen, valitse kyllä. Seuraavaksi: Launc a new android virtual device -> Manager-> New.

AVD Manager

AVD name: api8. Device: Valitse mieleisesi laite. Itse valitsin Nexus 4 (4.7″) j target: Android 2.2 – API Level 8 ja Ok.

Edit adnroid virtual manager

Tämän jälkeen sulje ikkuna jolloin olet taas Android Device Chooser ikkunassa jossa näkyy juuri tekemäsi laite. Jos laite ei heti näy paina oikeassa laidassa Refresh nappulaa. Valitse tehty laite ja paina Start -> Launch jolloin emulaattori käynnistyy. Kun emulaattori on käynnistynyt ja olet kännykän käynnistä valikossa sulje emulaattori, sekä muut ruudut niin, että olet takaisin eclipsesen aloitusikkunassa. Tämän jälkeen aja ohjelma uudestaan Run nappulasta. Kun ohjelma on käynnistynyt avaa mahdollinen näppäinlukko ja ruudun tulisi näyttää kuten alla:

Android hello world

Jos ruutu ei heti käynnisty odota hetki. Jos tämänkään jälkeen mitään ei tapahdu voit esimerkiksi koittaa laittaa yhden välilyönnin koodiin ja tallentaa tämän uudelleen, jonka jälkeen voit uudestaan koittaa ajaa painamalla Run nappulaa. Jos ruudullasi lukee valkoisella pohjalla Hello Wolrd! Olet luonut ensimmäisen ohjelmasi.

Hello PhoneGap

Valitaan File -> New -> Project -> Android application. Next -> Application name: Run Cordova ja Theme: None -> Next, Next, Next, Finnish.

Tämän jälkeen konsolissa ajetaan:

cd; cd ”workspace/RunCordova/”
mkdir assets/www/

PhoneGap asennus:

$ wget https://github.com/phonegap/phonegap/zipball/2.1.0
$ unzip 2.1.0
$ rm 2.1.0
$ cp -i phonegap*/lib/android/cordova*.jar libs/
$ cp -i phonegap*/lib/android/cordova*.js assets/www/
$ cp -ri phonegap*/lib/android/xml/ res/
$ rm -r phonegap-phonegap*/

Tämän jälkeen siirry Eclipseen takaisin ja varmista laidassa olevasta Project Explorer ikkunasta, että libs/cordova*.jar kohdassa näkyy tiedosto. Muista päivittää näkymä (F5) tai hiiren oikealle Refresh.

Project exloper

Tämän jälkeen mene RunCordova projektin päälle ja paina hiiren oikealla Buid Path -> Configure build path. Valitse Libaries välilehti ja Add JARs… -> Valitse RunCordova projektista Libs/cordova*.jar ja ok. Seuraavaksi siirry muokkaamaan MainActivity.java tiedostoa Source kohdan alta seuraavin muokkauksin:

src/MainActivity.java:
import org.apache.cordova.*;
extends DroidGap
super.loadUrl(”file:///android_asset/www/index.html”);

Jolloin ruudun tulisi näyttää tältä:

Android hello world with Phonegap

Seuraavaksi sinunt tulee muokata AndroidManifest.xml tiedostoa joku löytyy project explorer ruudusta. Avaa tiedosto hiiren oikealle tekstikäsittelyohjelmalla ja liitä se täältä löytyvien ohjeiden mukaan tarvittavat oikeuden (löytyvät sivun keskivaiheilta).  Jätä kuitenkin android:configChanges linja lisäämättä.  Lisää rivit AndoirdManifest tiedoston loppuun ennen </manifest> kohtaan, jolloin lopputulos tulisi olla jotakuinkin tämmöinen:

AndroidManifest.XML

Seuraavaksi luo index.html tiedosto projektin assets/www/ kansioon (löytyy Project manager ikkunasta) ja kopio sinne tämä esimerkki

Seuraavaksi aja projekti -> Run -> Android Application

Kun ohjelma käynnistyy tulee seuraava ikkuna: Auto Monitor Logcat. Valitse Yes ja Higher than: error.

Saatat joutua käynnistämään ohjelman uudelleen. Toimiessaan ohjelma tulostaa seuraavat: Device name: sdk, Device version: 2.1.0 ja kuva näyttää tältä:

Ready PhoneGap hello world

Lähteet:

Tero karvinen oppitunnit  29.8.2013 (Haaga-Helia)
http://terokarvinen.com/2012/hello-phonegap-from-xubuntu-12-04-live-cd
http://terokarvinen.com/2013/aikataulu-%E2%80%93-mobiilituotekehitys-bus4tn008-3-syksylla-2013
http://docs.phonegap.com/en/2.1.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android

Lisenssi

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Reading Arduino serial ports in Windows 7 with Python + Pyserial

Here i am going to show you 3 working examples on how to read Arduino serial ports with windows. You are going to need following programs / tools:

Installing Python + Pyserial to Windows

First you have ton install Python on your computer. This is just typical install with no big deal. When you have installed Python you may want to restart your computer. If you are not sure if your install was succesfull you can open your command prompt and type python or go to location where you installed python and run Python.exe. If everything works correctly your command prompt should look something like this:

python command prompt

After installing Python you can download Pyserial. Unzip pyserial to folder where you installed python and says lib. For me example to location was:

c:\Python27\Lib\pyserial-2.6\

After you have unzipped pyserial, you should start command prompt and go to location above. In there you can find setup.py named file, which you cn run by typing:

python setup.py install

Now you have installed Python + Pyserial

Reading  Arduino serial ports with Pyserial

First code is basic ”Hello world” with arduino and python
Code for Arduino:

Hello world with serial ports

Arduino code:

void setup(){
// Open serial connection.
Serial.begin(9600);

}

void loop(){
Serial.print("Hello world");
delay(10); // ms

}

Next code for python: (Note that WordPress might break Pythons code blocks)

import serial
import time
ser = serial.Serial('COM3', 9600, timeout=0)

while 1:
 try:
  print ser.readline()
  time.sleep(1)
 except ser.SerialTimeoutException:
  print('Data could not be read')
  time.sleep(1)

Arduino read data from Python

Arduino read data when user type something and prints it out byte by byte.

Arduino code:


int incomingByte = 0;

void setup(){
// Open serial connection.
Serial.begin(9600);

}

void loop(){
if (Serial.available() > 0) {
 // read the incoming byte:
 incomingByte = Serial.read();

 // say what you got:
 Serial.print("I got: "); // ASCII printable characters
 Serial.println(incomingByte, DEC);
}

}

Python code:

import serial
import time
ser = serial.Serial('COM3', 9600, timeout=0)
var = raw_input("Enter something: ")
ser.write(var)
while 1:
	try:
		print ser.readline()
		time.sleep(1)
	except ser.SerialTimeoutException:
		print('Data could not be read')

Arduino control led

Controlling 1 led light with arduino and pyserial by typing 0 or 1 to turn led on and off

Code for arduino:

int incomingByte = 0;
int ledPin = 13;

void setup(){
pinMode(ledPin, OUTPUT);
}

void loop(){

if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
if(incomingByte == 49) { // ASCII printable characters: 49 means number 1
 digitalWrite(ledPin, HIGH);
} else if(incomingByte == 48) { // ASCII printable characters: 48 means number 0
 digitalWrite(ledPin, LOW);
}
}

}

Code for python:

import serial
ser = serial.Serial('COM3', 9600, timeout=0)
while 1:
	var = raw_input("Enter 0 or 1 to control led: ")
	ser.write(var)

Reading data from sensor and printing that to computer

In this code we are going to use unknown light sensor for arduino. You can basically use any type of sensor you want since the principle is the same.

Code for arduino:


int lightPin = 1;
float lightValue;

void setup(){
  pinMode(ledPin, OUTPUT);
}

void loop(){
  lightValue = analogRead(lightPin);
  Serial.println(lightValue);
  delay(1000);
  }

Code for python:

import serial
import time
ser = serial.Serial('COM3', 9600, timeout=0)
while 1:
	try:
		print ser.readline()
		time.sleep(1)
	except ser.SerialTimeoutException:
		print('Data could not be read')
	time.sleep(1)

Sources:

This page is licensed under a GNU General Public License v2

Measuring light and turning continuous rotation servos

I decided to use light measuring sensor and continuous rotation servo to turn servo based on the light ammount. I have released full code for free use.

Basic idea

Measure ammount of light and divide it with 5 to get speed for servo and then turn servo. This could be used to to automatically lower curtains when night comes maybe

//Petri Mäki
// 19.4.2013
// http://www.petrimaki.wordpress.com

#include <Servo.h>
Servo myServo;

float lightValue;
int lightPin = 1;
int servoPin = 2;
int delayTime = 1000; // ms

void setup(){
Serial.begin(9600);
myServo.attach(servoPin);
}

void loop()
{

lightValue = analogRead(lightPin);
Serial.print(”Light value: ”);
Serial.println(lightValue); //Print light value, not sure what the scales are. 1000 seems to be realy dark and close 0 means there is much light

/* Turn light value to speed. I decide to divide light value
with 5 since i think it gives good accurate. e.g 1000 / 5 = 200
where 1000 would be realy dark light value and 200 is result
for speed*/
int newSpeed = lightValue / 5;
Serial.print(”Speed: ”);
Serial.println(newSpeed);
if(newSpeed > 90) {
if (newSpeed > 180) { // Speed can only be 180 MAX
newSpeed = 180;
}

myServo.write(newSpeed);

} else {
if (newSpeed < 0) {
newSpeed = 0; //Speed cannot be -1
}
myServo.write(newSpeed);
}
delay(delayTime); //ms

}

// Continuous rotation servos
// Controlling continuous rotation servos with servo.h
// 90 = servo wont move
// 0 = Full speed to left
// 180 = Full speed to right

void servoRight(int rotatingSpeed) { // Turn right based on value
myServo.write(rotatingSpeed);
}

void servoLeft(int rotatingSpeed) { //Turn left based on value
myServo.write(rotatingSpeed);
}

What i used:

  • Arduino UNO
  • Breadboard
  • Jumper Wires
  • Light sensor (Unknown model)
  • SpringRC SM-S4303R Continuous Rotation Servo

Source:

This page is licensed under a GNU General Public License v2

Arduino with blinking lights

Simple blinking light code with Arduino Uno. See code at the end.

Basic idea:

Light on the left side(alphaLed) blink first and after this light next to it starts and will be on until end of the loop. Then alpaLed blinks again and new light starts. This will go over and over until all lights are up. Then all light will be shutdown and loop starts over.

Working code

int alphaLed = 13;
int led1 = 12;
int led2 = 11;
int led3 = 10;
int led4 = 9;
int led5 = 8;

void setup() {
// setup leds
// alphaLed should be the one most left and its the one that blinks in every turn.
// See the video.

pinMode(alphaLed, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
}

void loop() {

// Blinking leds. AlphaLed is the first led in line that blinks. AlphaLed blink every time when new led lights up.

digitalWrite(alphaLed, HIGH);
delay(1000);
digitalWrite(alphaLed, LOW);
delay(1000);

// leave led1 on High mode
digitalWrite(led1, HIGH);
delay(1000);

digitalWrite(alphaLed, HIGH);
delay(1000);
digitalWrite(alphaLed, LOW);
delay(1000);

// leave led2 on High mode
digitalWrite(led2, HIGH);
delay(1000);

digitalWrite(alphaLed, HIGH);
delay(1000);
digitalWrite(alphaLed, LOW);
delay(1000);

// leave led3 on High mode
digitalWrite(led3, HIGH);
delay(1000);

digitalWrite(alphaLed, HIGH);
delay(1000);
digitalWrite(alphaLed, LOW);
delay(1000);

// leave led4 on High mode
digitalWrite(led4, HIGH);
delay(1000);

digitalWrite(alphaLed, HIGH);
delay(1000);
digitalWrite(alphaLed, LOW);
delay(1000);

// leave led5 on High mode
digitalWrite(led5, HIGH);
delay(1000);

// Turn off all leds and start all over

digitalWrite(alphaLed, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
delay(2000);

}

What i used:

  • Arduino
  • 6 x Leds
  • Breadboard
  • Jumper Wires

This page is licensed under a GNU General Public License v2

Automaattinen kansio uusille käyttäjille ja helppo bash komento

Tässä artikkelissa käydään läpi, kuinka jokainen uusi käyttäjä tulee saaamaan automaattisesti public_html kansion ja sen sisällä index.html tiedoston jossa lukee ”Hei maailma”. Lisäksi käyttäjille luodaan mahdollisuus käyttää komentoa ”osoite” jonka avulla käyttäjä saa selville oman lähiverkon ip osoitteen

Kansion luonti käyttäjille

Aluksi luomme public_html kansion /etc/skel kansioon. Tällöin jokainen uusi käyttäjä saa samat kansiot tätä kautta. Jotta voit luoda tänne kansion tulee sinun käyttää sudo komentoa.

Kansioon on myös mahdollista luoda index.html tiedosto ja kirjoittaa tänne Hei maailma, jotta tiedämme sen toimivan.

Seuraavaksi tarvitsemme uuden käyttäjän joka saa nämä tiedsotot. Uuden käyttäjän luonti tapahtuu komennolla:

sudo adduser käyttäjänimi

Nyt jos sinulla on apache2 asennettu ja konfiguroitu oikein löydät virtasen hei maailma sivun osoitteesta:

localhost/~virtanen

Ja tästä eteenpäin jokainen uusi käyttäjä saa saman sivun kun tunnukset luodaan.

Bash komennon luonti

Seuraavaksi haluamme, että käyttäjät voivat käyttää komento ”osoite” saadakseen selville oman lähiverkon ip osoitteen. Aloitamme tämän luomalla helpon bash scriptin:

#!/bin/bash

ifconfig |grep ”inet addr:”

Tämä scipti ajaa komennon ifconfig ja poimii sieltä rivit joissa lukee ”inet addr:”. Seuraavaksi meidän tulee antaa tiedostolle oikeudet, jotta myös peruskäyttäjät voivat tätä ajaa ja siirtää ohjelma käyttäjien käytettäväksi. Oikeudet voit antaa komennolla:

sudo chmod ugo+x osoite

ja tämä jälkeen siirrämme osoite nimisen ohjelman oikeaan kansioon:

sudo cp osoite /usr/local/bin/

Nyt jokainen käyttäjä voi ajaa tätä komennolla: osoite