AquaBot - контролер для акваріума

Submitted by gary on Sat, 11/16/2013 - 17:32

Нещодавно закінчив збирати альфа версію контролера для акваріума.
Є кілька причин чому я почав збирати власний контролер: був настрій щось зібрати і запрограмувати, прохання знайомого електроніка зробити йому таку штуку, відсутність контролера, який задовольняє всі потреби за розумні гроші (мабуть) і, найголовніше: just for fun!
Зараз спробую описати нутрощі контролера, який збирався і програмувався кілька місяців тому.
Перед розробкою контролера було поставлено кілька задач:
1. Контроль освітлення (час ввімкнення, час вимкнення, перерва в освітленні вдень, плавне включення)

Pictures: 
http://garik.pp.ua/sites/default/files/blog_pics/IMG_8659_.jpg
http://garik.pp.ua/sites/default/files/blog_pics/IMG_8660_.jpg
http://garik.pp.ua/sites/default/files/blog_pics/IMG_8661_.jpg
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2105.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2106.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2107.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2108.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2109.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2110.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2111.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2112.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2114.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2115.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2116.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2117.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2118.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2119.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2120.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2122.JPG
http://garik.pp.ua/sites/default/files/blog_pics/IMG_2128.JPG

Mad Minesweeper

Submitted by gary on Sat, 09/28/2013 - 23:13

Just for fun був написаний сапер для андроїда.
Це перша моя програма, яка має хоч трошки корисної функціональності
Ігрове поле фіксованих розмірів. Клітинки поля це кнопки (!), які динамічно розміщуються на екрані.
Так як не вистачило натхнення/вміння, то рестарт гри відбувається після зміни орієнтації телефону.

Pictures: 
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-32-51.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-33-14.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-33-35.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-34-07.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-34-14.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-34-33.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-28-22-35-18.png
http://garik.pp.ua/sites/default/files/blog_pics/Screenshot_2013-09-26-00-13-57.png

Cookie clicker

Submitted by gary on Sat, 09/28/2013 - 15:15

Недавно підсадили мене не гру Cookie clicker: http://orteil.dashnet.org/cookieclicker/
Не зовсім гра, але затягує)))
Перш ніж зрозуміти суть гри, встиг написати автоклікер))
Примітивний, але дієвий:

setInterval(function() {document.getElementById('bigCookie').click();}, 1);

Потім прийшлося дописати збирачку золотих піченьок:

setInterval(function() {
var date = new Date();
if ((document.getElementById('goldenCookie').style.display == 'block') && (document.getElementById('goldenCookie').style.opacity > 0)) {

Calculon :-)

Submitted by gary on Sat, 02/23/2013 - 01:00

Щойно за уроком http://startandroid.ru/ru/uroki/vse-uroki-spiskom/54-urok-19-pishem-prostoj-kalkuljator.html створив простий калькулятор. Дуже порадувало.

Макет:

<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout1"
android:layout_marginLeft="10pt"

Анімація

Submitted by gary on Sat, 02/23/2013 - 01:00

Щойно грався з анімаціями. В папці /res/anim/ створюю фали анімацій
myscale.xml

<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="0.1"
android:toXScale="1.0"
android:fromYScale="0.1"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="3000">
</scale>

mytrans.xml

<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-150"
android:toXDelta="0"

Menu

Submitted by gary on Sun, 02/03/2013 - 01:00

Є кілька способі створити меню:
1.

public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub

  menu.add("menu1");
  menu.add("menu2");
  menu.add("menu3");
  menu.add("menu4");
 
  return super.onCreateOptionsMenu(menu);
}

Цей спосіб дуже примітивний і не зручний, адже визначати обраний пункт меню ми можемо лише те текстом

public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();

Context menu

Submitted by gary on Sun, 02/03/2013 - 01:00

Створення контекстного пеню дуже нагадує створення звичайного меню. Ось код і трохи коментарів:

public class MainActivity extends Activity {

final int MENU_COLOR_RED = 1;
final int MENU_COLOR_GREEN = 2;
final int MENU_COLOR_BLUE = 3;

final int MENU_SIZE_22 = 4;
final int MENU_SIZE_26 = 5;
final int MENU_SIZE_30 = 6;

TextView tvColor, tvSize;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Динамічне створення об'єктів

Submitted by gary on Sun, 02/03/2013 - 01:00

Створює кнопки на екрані. В якості обробника натиснень кнопок використовується Activity (тобто допишемо в оголошення класу implements OnClickListener, і створимо метод обробки onClick).


package ua.pp.garik.android.dynamiclayout2;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;

Log i Toast

Submitted by gary on Sat, 02/02/2013 - 01:00

Лог:

Log.v("Boyan", "Нажата кнопка ОК");

Алерт:

Toast.makeText(this, "Нажата кнопка Cancel", Toast.LENGTH_LONG).show();

Ресурси

Submitted by gary on Sat, 02/02/2013 - 01:00

Всі ресурси зберігаються в папці /res/. Зараз цікавлять саме константи, які лежать в /res/values/

Створюю власний файл з різними типами ресурсів: /res/values/myres.xml

<resources>
    <string name="tvTopText">Верхний текст</string>
    <string name="btnTopText">Верхняя кнопка</string>
    <string name="tvBottomText">Нижний текст</string>
    <string name="btnBottomText">Нижняя кнопка</string>
    <color name="llTopColor">#336699</color>
    <color name="llBottomColor">#339966</color>
</resources>

Створюю layout: