Разработка модели SDK для реального устройства

Доброго времени суток, уважаемые читатели! В этом посте я продолжу начатые ранее рассуждения и затрону сразу 2 задачи из поста: разработка собственного SDK. Этими задачами было: порассуждать о будущем протокола, что его ждёт, куда он будет развиваться и с учётом этого спроектировать модель будущего SDK.

Читать полностью

Реализация собственного SDK

Доброго времени суток, уважаемые читатели! Я снова занимаюсь своим блогом! В ближайшее время блог будет ждать кардинальное обновление, возможно, переделаю даже рубрики и поменяю структуру. Т.к. многое изменилось в моей жизни и моих интересах со времен последних постов.

Читать полностью

Всё о таблицах (картах) Карно

Приветствую! Сейчас июнь, сессия в самом разгаре, но так вышло (парадокс), что в сессию у меня больше свободного времени, чем в течении учебного года, поэтому во время сессий и каникул в моём блоге можно наблюдать наибольшую активность. Что-же поделать? Нравиться мне учиться и всё.

Читать полностью

Проверяем наличие подключения к сети в Android

Доброго времени суток, уважаемые посетители и постоянные читатели! Этот пост я посвящу разработке приложений под Android и он будет первым постом в серии записей на эту тему. Начался учебный год, снова в универ, теперь свободного времени будет гораздо меньше, поэтому, мною было приятно решение, писать в блог не только большие информативные посты, но и небольшие заметки-подсказки по интересным мне темам. Примером такой записи и будет эта статья.

Существует лишь малая часть, скорее даже бесконечно малая  часть, android приложений, которые не используют возможности сети и связь с «внешним миром» в своей работе. Даже самые простые игрули используют сеть для отправки данныъ, например, для создания таблицы рекордов или банально для загрузки рекламы, отображаемой в приложении. Поэтому, практически каждый разработчик сталкивался с необходимостью проверки наличия подключения к сети, поскольку её отсутствие может вызывать фатальные ошибки приложения, пытающегося загрузить или отправить какие-либо данные. Проверить наличие подключения к сети очень легко, но надо понимать, что подключение к сети может быть активно, но самого Интернета может и не быть — тут, разве что, только отлавливать эксцепшены и не давать им «рушить» всё приложение.

Я проверяю подключение следующей функцией

public Boolean internetAvailable() {
		ConnectivityManager connectManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		boolean internetAvailable = (connectManager.getNetworkInfo(
				ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || connectManager
				.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED);
		return internetAvailable;
	}

Читать полностью

Делаем светофор с Arduino

Светофор на Arduino Приветствую! В продолжение нашего знакомства с Arduino сегодня мы рассмотрим следующий простейший пример – светофор, какой мы видим каждый день на дорогах, который будет включаться, и выключаться по нажатию кнопки.

Необходимые компоненты:

  • 3 светодиода (зелёный, жёлтый и красный)
  • Push-кнопка
  • 3 резистора на 220 [Ом]
  • Резистор на 10 [кОм]

Собираем плату

Электрическую схему можете посмотреть кликнув по изображению. (Цветной провод, в том месте, где он пересекается с чёрным на картинке, не имеет никакой связи с чёрным)

Соединяем 13 разъём (далее – порт) с Arduino с длинной ногой зелёного светодиода (не забывайте, что короткая нога светодиода ВСЕГДА соединяется с Землёй), а короткую ногу через резистор в 220 [Ом] соединяем с Землёй. Аналогично соединяем жёлтый светодиод через 12 порт  и красный через 11 порт.

Схема, необходимая для работы светофора собрана, теперь необходимо подключить кнопку, для управления им.

При установке кнопки есть некоторая хитрость — кнопку надо устанавливать на разделительную полосу между двумя половинками брэдборда.

Теперь подключаем кнопку. Тут всё очень просто – кнопка проводит в обоих направлениях, в отличие от различных диодов, поэтому нет никакой разницы, какой из контактов будет соединён с землёй. Соедините один контакт кнопки с портом №7 Arduino  и этот же контакт соедините через резистор в 10 [кОм] с Землёй, а другой с питанием в 5 [В] — рельса со значком +.

ВАЖНО!! Во всех схемах Земля должна быть всегда одна – для всех подключаемых элементов, по крайней мере, до тех пор, пока вы не используете внешний источник питания в цепи Arduino.

Сборка на этом закончена! Приступаем к программированию Arduino!

Программируем Arduino

// Задаём номера портов для светодиодов
int GPin = 13; // Зелёный
int YPin = 12; // Жёлтый
int RPin = 11; // Красный
int switchPin = 7; // Порт кнопки
boolean lastButton = LOW; // Устанавливаем последнее значение кнопки - выключено
boolean currentButton = LOW; // Устанавливаем текущее значение кнопки - включено
boolean ledOn = false; // Состояние светофора: false - выключен (мигает жёлтый), true - включен
boolean yellowOn = LOW; // Мигающий жёлтый.
unsigned long loopTime; // Вспомогающая переменная для цикла
unsigned long currentTime; // Переменная хранящая текущее значение времени

void setup() {
  // Устанавливаем 3 порта как выход для светодиодов и один как вход для отслеживания кнопки
  pinMode(GPin, OUTPUT);
  pinMode(YPin, OUTPUT);
  pinMode(RPin, OUTPUT);
  pinMode(switchPin, INPUT);
  currentTime = millis();
  loopTime = currentTime;
}

// Функция для лучшего отрабатывания нажатия на кнопку - ждёт установившегося значения, а затем передаёт его в программу.
boolean debounce(boolean last)
{
  boolean current = digitalRead(switchPin);
  if(last != current)
  {
    delay(5);
    current = digitalRead(switchPin);
  }
  return current;
}

void loop() {
  currentButton = debounce(lastButton);
  if(lastButton == LOW && currentButton == HIGH) // При нажатии на кнопку включаем\выключаем светофор
  {
    ledOn = !ledOn;
  }
  lastButton = currentButton;
  currentTime = millis();

  // Цикл действий при выключенном светофоре
  if(currentTime >= (loopTime + 500) && ledOn == false)
  {
    yellowOn = !yellowOn; // Инвертируем значение переменной.
    digitalWrite(GPin, LOW);
    digitalWrite(YPin, yellowOn);
    digitalWrite(RPin, LOW);
    loopTime = currentTime;
  }

  // Цикл действий при включенном светофоре
  if(ledOn == true) {
    // Горит зелёный
    if(currentTime >= loopTime && currentTime < (loopTime + 10000)) {       digitalWrite(GPin, HIGH);       digitalWrite(YPin, LOW);       digitalWrite(RPin, LOW);     }     
// Зелёный начинает мигать     

if(currentTime >= (loopTime + 10000) && currentTime < (loopTime + 10500)) {
       digitalWrite(GPin, LOW);     
}      
if(currentTime >= (loopTime + 10500) && currentTime < (loopTime + 11000)) {
       digitalWrite(GPin, HIGH);     
} 
if(currentTime >= (loopTime + 11000) && currentTime < (loopTime + 11500)) {
      digitalWrite(GPin, LOW);     
}
if(currentTime >= (loopTime + 11500) && currentTime < (loopTime + 12000)) { 
      digitalWrite(GPin, HIGH);     
}     
if(currentTime >= (loopTime + 12000) && currentTime < (loopTime + 12500)) {
       digitalWrite(GPin, LOW);     
}     
if(currentTime >= (loopTime + 12500) && currentTime < (loopTime + 13000)) {
       digitalWrite(GPin, HIGH);     
}     
if(currentTime >= (loopTime + 13000) && currentTime < (loopTime + 13500)) {
       digitalWrite(GPin, LOW);     
}     
if(currentTime >= (loopTime + 13500) && currentTime < (loopTime + 1400)) {
       digitalWrite(GPin, HIGH);     
}     
if(currentTime >= (loopTime + 14000) && currentTime < (loopTime + 14300)) {
       digitalWrite(GPin, LOW);     
}
// Загорается жёлтый 
if(currentTime >= (loopTime + 14300) && currentTime < (loopTime + 17500)) {
       digitalWrite(YPin, HIGH);     
}
// Загорается красный 
if(currentTime >= (loopTime + 17500) && currentTime < (loopTime + 27500)) {
       digitalWrite(YPin, LOW);       digitalWrite(RPin, HIGH);     
}
// Загорается красный с жёлтым     
if(currentTime >= (loopTime + 27500) && currentTime < (loopTime + 30500)) {
       digitalWrite(YPin, HIGH);     
}
// Загорается зелёный 
if(currentTime >= (loopTime + 30500)) {
      digitalWrite(GPin, HIGH);
      digitalWrite(YPin, LOW);
      digitalWrite(RPin, LOW);
      loopTime = currentTime;
    }
  }

}

Читать полностью