Мне можно писать на sergeev50@list.ru Мой основной сайт http://round-the-world.org

Зачем нам лженаука.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Ардуино

Сообщений 1 страница 27 из 27

1

Arduino – это инструмент для проектирования электронных устройств (электронный конструктор) более плотно взаимодействующих с окружающей физической средой, чем стандартные персональные компьютеры, которые фактически не выходят за рамки виртуальности. Это платформа, предназначенная для «physical computing» с открытым программным кодом, построенная на простой печатной плате с современной средой для написания программного обеспечения.

Arduino применяется для создания электронных устройств с возможностью приема сигналов от различных цифровых и аналоговых датчиков, которые могут быть подключены к нему, и управления различными исполнительными устройствами. Проекты устройств, основанные на Arduino, могут работать самостоятельно или взаимодействовать с программным обеспечением на компьютере (напр.: Flash, Processing, MaxMSP). Платы могут быть собраны пользователем самостоятельно или куплены в сборе. Среда разработки программ с открытым исходным текстом доступна для бесплатного скачивания.
Язык программирования Arduino является реализацией Wiring, схожей платформы для «physical computing», основанной на мультимедийной среде программирования Processing. http://sd.uploads.ru/t/hesFf.jpg

Ну вот слегка познакомились с тем, чем мы будем заниматься.
я же для себя отметил Arduino как помощник в создании умного дома.
Кому интересно по глубже вникнуть пиши в коментах с радостью поделюсь с вами своими достижениями.

2

Ну вот мои дорогие немного подумав я сделал для себя вот такую не хитрую программку с помощью которой я могу управлять светом к квартире.
Для этого мне понадобилось:
Arduino   
Реле на 220в http://sd.uploads.ru/t/jb03u.jpg
для тестов я приобрел реле на 4 порта.
немного мозгов и прямые руки.
Соединив реле по этой схеме http://sd.uploads.ru/t/jeN9D.jpg
и прописав вот этот код :

*/

int ledPin_1 = 2;

int ledPin_2 = 3;

int ledPin_3 = 4;

int ledPin_4 = 5;

void setup() {

Serial.begin(9600);

pinMode(ledPin_1, OUTPUT);

pinMode(ledPin_2, OUTPUT);

pinMode(ledPin_3, OUTPUT);

pinMode(ledPin_4, OUTPUT);

}

void loop() {

if (Serial.available() > 0) {

int i = Serial.read()-48;

if (i == 1)digitalWrite(ledPin_1, !digitalRead(ledPin_1)),Serial.println(" ledPin_1 !digitalRead ");

if (i == 2)digitalWrite(ledPin_2, !digitalRead(ledPin_2)),Serial.println(" ledPin_2 !digitalRead ");

if (i == 3)digitalWrite(ledPin_3, !digitalRead(ledPin_3)),Serial.println(" ledPin_3 !digitalRead ");

if (i == 4)digitalWrite(ledPin_4, !digitalRead(ledPin_4)),Serial.println(" ledPin_4 !digitalRead ");

}

}
Мы получим полное управление светом.
Спасибо за внимание.

3

Юра, ты всё это здорово делаешь, то есть ты, конечно, мастер и паяльника и программирования. Результат на уровне современных рекламирунмых проектов умных домов. Но таким как мне кажется, что нажать на выключатель пальцем проще чем хлопнуть в ладоши.  :mybb: Впрочеи, не сомневаюсь, что найдутся люди которые захотят такое оборудование в своей квартире.

4

Сергей Cергеев написал(а):

Юра, ты всё это здорово делаешь, то есть ты, конечно, мастер и паяльника и программирования. Результат на уровне современных рекламирунмых проектов умных домов. Но таким как мне кажется, что нажать на выключатель пальцем проще чем хлопнуть в ладоши.   Впрочеи, не сомневаюсь, что найдутся люди которые захотят такое оборудование в своей квартире.

Я согласен с вами в том что ЧТО ПРАКТИЧНО И ТО РАБОТАЕТ.
Но парой заходя в темную комнату в одной руке держать пиво а в другой селедку так еще и выключатель на щупать бывает не очень удобна, можно просто произнести вслух СВЕТ ВКЛЮЧИСЬ и теоретически он должен будет загореться.(это пока в проекте)
что вы скажите на это?

5

Тут всё как бы уже deja vu

Xaoss написал(а):

Я согласен с вами в том что ЧТО ПРАКТИЧНО И ТО РАБОТАЕТ.
Но парой заходя в темную комнату в одной руке держать пиво а в другой селедку так еще и выключатель на щупать бывает не очень удобна, можно просто произнести вслух СВЕТ ВКЛЮЧИСЬ и теоретически он должен будет загореться.(это пока в проекте)
что вы скажите на это?

Вспомним слова Преображенского из "Собачьего сердца" ...спать в спальне, есть в столовой...  :rolleyes:

6

Прошла кропотливая неделя, но плоды она дола не малые. Вооружившись руками откуда нужна  и головой с серым веществом мне все таки удалось подружить Arduino с моим телевизором.
Что для этого понадобилось ИК приемник http://sa.uploads.ru/t/b1uae.jpg
ИК передатчик http://sa.uploads.ru/t/tWX0S.jpg
Блютуз hc-05http://sa.uploads.ru/t/myAMH.jpg
Библиотека IRremote
Любое устройство поддерживают Android
Ну и самое главное много терпения и столько же везения)))
Получив выше перечисленное ,считываем команды с пульта с помощью нашей библиотеки и полученный код можно подставлять к скетчю который я приведу ниже. После того как вы все загрузите на Arduino, передатчик нужна держать вблизи вашего телевизора.По данной проблеме я долго мучился  и смог увеличить расстояние сигнала всего на 15-20см.

#include <IRremote.h>
IRsend irsend;
int ledPin = 13;
unsigned long a;
void setup() {
Serial.begin(9600);
Serial.setTimeout(4);
pinMode(ledPin, OUTPUT);
}
unsigned int n_vdown[68]={4500 ,4450 ,550 ,1650 ,550 ,1650 ,550 ,1650 ,550 ,550 ,550 ,600 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,1650 ,550 ,1650 ,550 ,1700 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,1700 ,500 ,600 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,550 ,1700 ,500 ,600 ,550 ,1650 ,550 ,1650 ,550 ,1700 ,500 ,1700 ,550 ,1650 ,550 ,1650 ,550 };
unsigned int f_vdown[68]={4500 ,4450 ,550 ,1650 ,600 ,1600 ,600 ,1600 ,600 ,500 ,600 ,550 ,550 ,550 ,550 ,550 ,600 ,500 ,600 ,1600 ,600 ,1600 ,600 ,1650 ,600 ,500 ,600 ,500 ,600 ,500 ,600 ,550 ,550 ,500 ,600 ,550 ,550 ,1650 ,600 ,500 ,600 ,500 ,600 ,500 ,600 ,550 ,550 ,550 ,550 ,550 ,550 ,1650 ,600 ,500 ,600 ,1600 ,600 ,1650 ,550 ,1650 ,600 ,1600 ,600 ,1600 ,600 ,1650 ,550};

void loop()
{
if (Serial.available())
{ a = Serial.parseInt();

if (a==1) {irsend.sendRaw(n_vdown,68,38);delay(10); irsend.sendRaw(n_vdown,68,38);delay(10); irsend.sendRaw(n_vdown,68,38);delay(1000);}
if (a==2) {irsend.sendRaw(f_vdown,68,38);delay(10); irsend.sendRaw(f_vdown,68,38);delay(10); irsend.sendRaw(f_vdown,68,38);delay(1000);}

}
}

И мы получаем полное управление телевизором с помощью любого устройства поддерживают Android.
Спасибо за внимание.

Отредактировано Xaoss (2014-10-14 23:26:52)

7

Восхищен вашими знаниями и умением их применить в реальном деле. Не бойся делать то, что ты пока не умеешь. Ковчег был построен любителем. Профессионалы строят "Титаники".  :rolleyes:

8

Сергей Cергеев написал(а):

Восхищен вашими знаниями и умением их применить в реальном деле. Не бойся делать то, что ты пока не умеешь. Ковчег был построен любителем. Профессионалы строят "Титаники".

Спасибо за поддержу.

9

Всегда восхищался инженерами

ТО что поражает Отелло, то не задевает Кандида. Оставайтесь Кандидом

10

После долгого раздумья и не исчисляемого количества тестов пришёл к решению использовать стандартный блок питания от компьютера.
http://sa.uploads.ru/t/ovQS7.jpg
в нем есть все что нам пригодится питания на 3 вольт -12 вольт.
Единственный минус такого блока питания это его шум от вентилятора, но думаю поместив его в и всю схему в коробку шум уменьшится)))
Плюсов в данном блоке питания имеется большое количество соединений которые помогут нам соединить практически все что нам понадобится!
Теперь ближе к схеме подключения.
Замыкаем на блоке питания ЗЕЛЕНЫЙ и ЧЕРНЫЙ ПРОВОД для того чтоб наш блок питания за работал.http://sa.uploads.ru/t/j4Uo2.jpg
После того как мы убедились что блок  питания работает начинаем подключать его к нашей ардуине. Помним что наша ардуина работает от 7-12 вольт.
Находим в блоке питания ЖЁЛТЫЙ и ЧЁРНЫЙ проводок они то и будут питать напряжением 12 вольт нашу  ардуинку, затем можем в наглую припаять эти два проводка к плате или найти соединительный коннектор и сделать все цивильно.
http://sa.uploads.ru/t/IT7Kp.jpg
Остальные проводки можно будет использовать в дальнейшем для питания различных примочек.
Спасибо за внимание)))

11

круто очень, гениально!!!

12

Как говорится кто долго мучается у того что нибудь и получится, так же и у меня.
Прошёл почти месяц и я все же сделал схему которую планировал, теперь делюсь с вами.Пожалуй начнем.
Для реализации данной схемы я взял то что валялось под рукой а именно датчик движения http://sa.uploads.ru/t/yTbru.jpg  фото резисторhttp://sa.uploads.ru/t/jteLH.jpg

подсоединил все по данной схеме http://sa.uploads.ru/t/LJ6tc.jpg на зарисовку прошу не плеваться и не ругаться. главное мысль и дело а не то как я рисую)).
На схеме изображен транзистор обозначенный как (R1) схема его подключения http://sa.uploads.ru/t/0i1YZ.jpg разбирать данную схему думаю не стоит тут и так все предельно и ясно все описано. единственной момент все стягивающие резисторы должны быть номиналом не меньше 10 килоом
После чего два замыкающихся и размыкающихся выхода на датчике движения именуемые как (ALARM) соединяем к ардуине по принципу обычной кнопки типа (ВКЛ-ВЫКЛ), и получаем управляемый свет только в вечернее время.
Программный код который занял тоже не малое время:
int sensePin =0;
int ledPin =9;
int switchPin = 7;
int Pin = 13;

void setup()
{
  analogReference(DEFAULT);
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT);
  pinMode(Pin, OUTPUT);
}
void loop()
{
  int val = analogRead(sensePin);
  if(val < 100) digitalWrite(ledPin, HIGH);
  else digitalWrite(ledPin, LOW);
{
  if (digitalRead(switchPin) == HIGH)
digitalWrite(Pin, LOW);
else
{
  digitalWrite(Pin, HIGH);
  delay(5000);
}
}
}

Хочу еще по благодарить всех кто хоть как-то помогал и принимал участие в построении этого проекта.
До новых волнующих встреч.

Отредактировано Xaoss (2014-12-03 14:48:03)

13

Я очень рад, что всё получилось!!!

14

Всем доброго дня уважаемые читатели.
Прошло много времени и я собрал очередную затейливую игрушку для своего проекта "УМНЫЙ ДОМ"
А называется она ДИМЕР.
Суть "ДИМЕРА" проста, управлять мощной сетевой нагрузкой. Обычным языком говоря аппарат служит чтоб делать освещение то ярким то тусклым. Хватит пустых слов ближе к делу.
Для нашей схемы нам понадобится не большое количество радио деталей а именно: диодный мост , светодиод оптрона(PC817), симистор (MOC3051) и BT137X-800 и конечно же небольшое количество резисторов.
собираем все это дело как показано на рисунке
http://sh.uploads.ru/t/oKinI.jpg
Для тех кто пожелает собрать это дело на текстолите так-же есть уже готовая схема для пайки.
http://sh.uploads.ru/t/gZ7iS.jpg
После долгой и кропотливой работы травли сборки и пайки всех деталей, заливаем наш код в ардуино и наслождаемя.
-----------------------------------------------------------------------------------------------------------------------------------------------------
int AC_LOAD = 3;    // Output to Opto Triac pin
volatile int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF

void setup()
{
  pinMode(AC_LOAD, OUTPUT);       // Set the AC Load as output
  attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
}

void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
{
  // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle)
  // (10000us - 10us) / 128 = 75 (Approx)
  int dimtime = (75*dimming);     
  delayMicroseconds(dimtime);    // Off cycle
  digitalWrite(AC_LOAD, HIGH);   // triac firing
  delayMicroseconds(10);         // triac On propogation delay
  digitalWrite(AC_LOAD, LOW);    // triac Off
}

void loop()
{
   
  for (int i = 1; i <= 128; i++){
    dimming = i;
    delay(20);
  }
   
  for (int i = 128; i >= 1; i -= 5){
    dimming = i;
    delay(200);
  }
}

Спасибо за внимание.. думаю было интересно...

15

Добрый вечер уважаемые ардуиновцы.
Прошел год и три месяца с покупки и долгой работы с камерой- OV0706.
Я долго мучился, перечел изрядное количество литературы но ни как ничего не получалось. Я перерыл петабайт информации по тому как кто-та другой подключал эту камеру, с полной уверенностью и гордостью в груди могу сказать что это полная фигня.. ни одна из схем которая была в сети интернета ни смогла мне помочь в решении моей задачи.
Но буквально вчера ночью во сне мне приснилась схема которую я испробовал и все великолепно получилось))) ну как говорится меньше слов, больше дела...ПРИСТУПИМ.
  Имея в наличии камеру OV0706
http://sh.uploads.ru/t/Hg0S3.jpg
Выпаиваем к чертовой бабушки микро контролер MAX3232. В данной камере он якобы должен служить пускачем типа "ВКЛ-ВЫКЛ".
Вместо этого соединяем контакты  7- 15  и   8- 19 как указанно на фото. и сразу-же временно выпаиваем кварцевый резонатор.
http://s9.uploads.ru/t/bMjnh.jpg

После всех процедур спаивания и выпаиванея подключаем нашу камеру к ардуине "TX" на камере соединяем к RX на ардуине, "RX" на камере с "TX" на арудине. это соединение позволяет обмениваться пакетами информации ардуине с камерой и наоборот.После подключения заливаем пустой скет:

void setup() 
{
}

void loop()
{
}

И вуаля....видем что ничего не работает)))) Но не расстраиваемся. Эти манипуляции нужны нам были чтоб завести камеру, тоесть дать ей понять что пора работать).
После этого возвращаем кварцевый резонатор туда где он был... главное не перепутать местами ножки.
и подключаем опять к ардуине но уже по другой схеме...
http://s9.uploads.ru/t/YgxEw.jpg
не забывает о использовании резисторов, я к примеру использовал (10к)... они нужны нам для того чтоб не спалить хрусталик внутри самой камеры.
Скачиваем библиотеки для использования камеры. Кстати если данную систему использовать с шилдом для SD карты то можно все полученные с камеры файлы держать на "microSD" носители.
http://s9.uploads.ru/t/Nf8Xr.jpg

Ну что-же. для себя отметил что данная камера весьма не плоха в работе.. после всех этих робот вам останется только под настроей ей ZOOM и спокойно устанавливать в свой умный дом.
Если было интересно пишите коментарии, а я прощаюсь,до новых встречь.

Отредактировано Xaoss (2015-07-18 22:12:01)

16

Прошло не так долго и в хламе радио деталей я нашел необычную штучку..
По общавшись с духами онлайн выло выявлено что данная штучка не что иное как датчик температуры.
маркировка его (ds18b20) http://s7.uploads.ru/t/UydK6.jpg

Первое что мне в голову пришло в тот момент это присоединить данный датчик к своему умному дому)
Начнем собирать все это дело в единое..на схеме выше уже есть распиновка.
Самое главное не забывает про Сопротивление 4.7 кОм
Устанавливаем скетч:
#include OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)

void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
   
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
   
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
   
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
   
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad
  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();
  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}
и вуаля.. наш датчик начинает показывать температуру..

17

Всем привет.. вот я разобрался и с этой деталью http://s7.uploads.ru/t/Of1V9.jpg
Работать с ней было не сложно.. единственная проблема с которой я столкнулся это замеры точного расстояния. Ну и ладно как говорится меньше слов больше дела.
Данный датчик является ультра звуковым дальномером. на его передней части можем увидеть два цилиндрических аппарата. Один из них микрофон другой динамик.
Динамик создает коротковолновый звук, звук отталкивается от любого препятствия и возвращается к микрофону. и в этот момент происходит замер расстояния когда звук выходит из динамика до возврата его до микрофона.чтоб узнать по подробней гугл вам в помощь)))
Продолжим..
Подключаем дальномер по схеме указанной выше, заливаем скетч
#define speedOn 2 // скорость включения
#define speedOff 30 // скорость выключения

int TrigPin = 8;
int EchoPin = 9;
int led7 = 7;
int position = 0;

void setup()
{
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
pinMode(led7, OUTPUT);
}
void loop()
{
int distance,duration;
digitalWrite(TrigPin,HIGH);
delayMicroseconds(11);
digitalWrite(TrigPin,LOW);
duration = pulseIn(EchoPin, HIGH);
delay(100); //защита от дребезга
if (duration<900) position = position + 1; // если растояние менее 9 см

if(position > 0){
for(int i = 0 ; i <= 255; i++) {
analogWrite(led7, i);
delay(speedOn);
position = 0;
}
delay(100);
if (position > 6) {
for(int i = 255 ; i >= 0; i--) {
analogWrite(led7, i);
delay(speedOff);
position = 0;
}
}
}
}
И вуаля все работает.. данный скетч уже несущий в себе код для управлением реле на 220 вольт.
Как-то я уже делал схему на реле.. это уже как-бы дополнение)))
Всего хорошего.. До новых волнующих встреч...

18

Об одном из моих изобретений рассказали на ютубе, кому интересно вот ссылка.
http://www.youtube.com/watch?v=bGGx6wc0WMc

19

Проект на Arduino под названием «Мотосигнализация на базе Arduino UNO в паре c акселерометром MMA7361».

Принцип работы таков: Arduino опрашивает акселерометр, считывает данные по осям X, Y, Z и если есть отклонения от значений, которые были при включении сигнализации больше допустимой величины — включается сирена. Т.е. никаких данных вносить не нужно, не важно, под каким углом вы оставили свой мотоцикл, хоть на бок его положили — после включения сигнализации у осей X, Y, Z появляются текущие координаты и если в момент опроса текущие координаты хотя бы по одной оси отличаются от предыдущих на величину больше установленной нами (для этого используется потенциометр) — срабатывает сигнализация. Другими словами, если ваш мотоцикл трогают, наклоняют, пытаются перемещать, в общем, создают движение — включается сирена.

20

Всем привет дорогие читатели и всем тем кто хоть как-то интересуется микро электроникой.
Ну опять прошло не мало времени и Я создал очередную безделушку думаю вам она понравится. Ну что-же начнем все по порядку.
Идея первоначально заключалась в том чтоб сделать экономней расход воды в ванной и чтоб когда я принимал ванную температура воды была нужная мне и чтоб вода не набиралась слишком много. И не мало важны момент чтоб время в ванной было определенным..
Задачка стояла не из легких но я справился)))
Начнем: первоначально нам понадобится датчик я использовал  ds18b20
Схема подключения простейшая http://s3.uploads.ru/t/5S9eT.jpg
Она состоит из трех проводной линии, два крайних это питание а третий это линия данных. Линия данных «подтянута » к 5 В. Сопротивлением 4.7 кОм. У меня была плата Arduino Mega.
Для того чтобы получать данные с датчика, как было сказано ранее, используеться протокол 1-wire. Датчик можно подключить к любому выводу Arduino, но предварительно нужно указать в коде программы с каким именно выводом мы имеем дело. В нашем мы подключаем к выводу.
линию данных, D;
плюс питания, VCC;
минус питания, GND.
Линия данных используется для обмена информацией между контроллером и датчиком. Данный датчик использует протокол 1-Wire. Информация о температуре датчика хранится в оперативной памяти, состоящей из слова длиной 9 байт.
Для того чтобы измерить температуру с помощью цифрового датчика ds18b20 и Arduino нам нужно сделать следующее:
Сначала собрать схему;
Скачать библиотеку OneWire;
Открыть готовый пример в среде Arduino;
Наслаждаться показаниями датчика.
После того как подключили все заливаем скетч:
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
   
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
   
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
   
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
   
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad
  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();
  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

И вот у нас уже есть система тепературы.. но тепрь нам нужна сделать подачу горячей и холодной воды да так чтоб в ванной была определенная температура, да так чтоб набралась она для определенной температуры.
для этого начинаем писать скетч:
#include <OneWire.h>
#include <DallasTemperature.h>
#define SWITCH_PIN   2
#define LED_PIN      13
#define OUTPUT_PIN   7
#define ONE_WIRE_BUS 10
boolean lastButton = LOW; //прошлое состояние кнопки
boolean currentButton = LOW;   //нынешнее состояние кнопки
boolean Stop0n = false; // флаг режима «стоп» было ledOn
float now_temp; //переменная нынешняя температура
float now_motion; // это где применяется?
int max_temp = 26;      // уставка по максим температуре датчика
int min_temp = 25;      // уставка по минимальной температуре датчика я бы поставил так! Чисто на время наладки!

void setup()
{
  pinMode (SWITCH_PIN, INPUT);     
  pinMode         (LED_PIN, OUTPUT);
  pinMode (OUTPUT_PIN, OUTPUT);

  Serial.begin(9600);
  sensors.begin();
}

void loop()
{

currentButton = digitalRead(SWITCH_PIN); // читаем состояние кнопки

        {
             Stop0n = !LOW; // то инвертируем какую-то переменную Stop0n
            if (Stop0n == true) { Serial.println("Vkluchen rezhim STOP");}
             if (Stop0n == false) {Serial.println("Termostat ON");}
             delay(1000); // обязательная пауза для борьбы с дребезгом в 1 секунду
        }

//_____ Далее работа термостата

sensors.requestTemperatures();
now_temp = sensors.getTempCByIndex(0);//  то читаем температуру из датчика
Serial.print("Temp: ");
Serial.println(now_temp);
delay(1000);
 
if (Stop0n==false)
{    // Если режим стоп не активирован работаем по термостату
    if (now_temp > max_temp ) // превышение температуры
         {
             Serial.println("Temperatua max – LED_PIN ON");
             digitalWrite(LED_PIN, HIGH);
         }
         else { digitalWrite(LED_PIN, LOW);  }
 
   if (now_temp < min_temp ) // понижение температуры
        {
      Serial.println("Temperatua min – OUTPUT_PIN ON ");
      digitalWrite(OUTPUT_PIN, HIGH);
        }
        else    {  digitalWrite(OUTPUT_PIN, LOW);   }
}
else    {                       //если блокировка включена то погасить выходы
                digitalWrite(LED_PIN, LOW) ;
                digitalWrite(OUTPUT_PIN, LOW);   
            }
}

В данном скетче показано что к второму пину на ардуине подключен вывод замыкатель "для остановки воды"
к 13 и 7 пину подключены электронные клапаны я использовал http://www.rosarmatrade.com/published/publicdata/ROSARMATWARSTM/attachments/SC/products_pictures/Электромагнитные-клапаны_enl.jpg
ну и к десятому пину подсоединен датчик температуры ds18b20.
С этим все..
Теперь берем семи сигментный индикатор подключаем его к ардуине. Распиновка у всех разная поэтому схему не выкладываю, по трудитесь и поищите в интернете "гугл вам в помощь"
Пишем скетч таймера:
int digit1 = 11; //PWM Display pin 1
int digit2 = 10; //PWM Display pin 2
int digit3 = 9; //PWM Display pin 6
int digit4 = 6; //PWM Display pin 8

//Pin mapping from Arduino to the ATmega DIP28 if you need it
//http://www.arduino.cc/en/Hacking/PinMapping
int segA = A1; //Display pin 14
int segB = 3; //Display pin 16
int segC = 4; //Display pin 13
int segD = 5; //Display pin 3
int segE = A0; //Display pin 5
int segF = 7; //Display pin 11
int segG = 8; //Display pin 15

int start_num=30;  // Number to countdown from
unsigned long time;

void setup() {               
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segE, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);

  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
  pinMode(digit4, OUTPUT);
 
  pinMode(13, OUTPUT);
}

void loop() {
 
  //long startTime = millis();
  if((millis()/1000) < start_num){
    displayNumber(start_num -(millis()/1000));
  }
  else {
    // reached zero, flash the display
    time=millis();
    while(millis() < time+200) {
      displayNumber(0);  // display 0 for 0.2 second
    }
    time=millis();   
    while(millis() < time+200) {
      lightNumber(10);  // Turn display off for 0.2 second
    }
  } 
  //while( (millis() - startTime) < 2000) {
  //displayNumber(1217);
  //}
  //delay(1000); 
}

//Given a number, we display 10:22
//After running through the 4 numbers, the display is left turned off

//Display brightness
//Each digit is on for a certain amount of microseconds
//Then it is off until we have reached a total of 20ms for the function call
//Let's assume each digit is on for 1000us
//If each digit is on for 1ms, there are 4 digits, so the display
//is off for 16ms.
//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).
//Let's define a variable called brightness that varies from:
//5000 blindingly bright (15.7mA current draw per digit)
//2000 shockingly bright (11.4mA current draw per digit)
//1000 pretty bright (5.9mA)
//500 normal (3mA)
//200 dim but readable (1.4mA)
//50 dim but readable (0.56mA)
//5 dim but readable (0.31mA)
//1 dim but readable in dark (0.28mA)

void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS  500

#define DIGIT_ON  HIGH
#define DIGIT_OFF  LOW

  long beginTime = millis();

  for(int digit = 4 ; digit > 0 ; digit--) {

    //Turn on a digit for a short amount of time
    switch(digit) {
    case 1:
      digitalWrite(digit1, DIGIT_ON);
      break;
    case 2:
      digitalWrite(digit2, DIGIT_ON);
      break;
    case 3:
      digitalWrite(digit3, DIGIT_ON);
      break;
    case 4:
      digitalWrite(digit4, DIGIT_ON);
      break;
    }

    //Turn on the right segments for this digit
    lightNumber(toDisplay % 10);
    toDisplay /= 10;

    delayMicroseconds(DISPLAY_BRIGHTNESS);
    //Display digit for fraction of a second (1us to 5000us, 500 is pretty good)

    //Turn off all segments
    lightNumber(10);

    //Turn off all digits
    digitalWrite(digit1, DIGIT_OFF);
    digitalWrite(digit2, DIGIT_OFF);
    digitalWrite(digit3, DIGIT_OFF);
    digitalWrite(digit4, DIGIT_OFF);
  }

  while( (millis() - beginTime) < 10) ;
  //Wait for 20ms to pass before we paint the display again
}

//Given a number, turns on those segments
//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {

#define SEGMENT_ON  LOW
#define SEGMENT_OFF HIGH

  switch (numberToDisplay){

  case 0:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_OFF);
    break;

  case 1:
    digitalWrite(segA, SEGMENT_OFF);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_OFF);
    break;

  case 2:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_OFF);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 3:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 4:
    digitalWrite(segA, SEGMENT_OFF);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 5:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_OFF);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 6:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_OFF);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 7:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_OFF);
    break;

  case 8:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 9:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;

  case 10:
    digitalWrite(segA, SEGMENT_OFF);
    digitalWrite(segB, SEGMENT_OFF);
    digitalWrite(segC, SEGMENT_OFF);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_OFF);
    break;
  }
}
И вуаля у нас все готово.. наслаждаемся и не забываем оставлять комментарии.

21

Доброго времени суток уважаемые ардуиновцы.
Вот хочу поделится с вами одним наблюдением: совсем недавно заметил что мышка от компьютера стала издавать двойные клики.В принципе работать можно но это весьма раздражает.
Ну что-же,начнем разбираться что послужило такой неприятности...
Для начала взглянем и подумаем что же такое мышка..
Мышка это схема с парой кнопок,оптическими линзами,светодиодом и опто камерой..
Ну пугайтесь наша проблема гаразда проще)))
Начнем разбирать мыш http://s2.uploads.ru/t/c9bH5.jpg
Двойной проклик может вызывать 2 не исправности..
1) не исправная кнопка http://s6.uploads.ru/t/FryK2.jpg
2) сточенные ножки на пластиковой панели с обратной стороны http://s6.uploads.ru/t/xVhgd.jpg
Чтобы исправить первую проблему нам понадобится сама кнопка и паяльник и конечно ж прямые руки..
По исправлении второй проблемы нужна будет клей момент и кусочек пластика клеем пластик к обратной стороне мышки и собираем все обратно..
После чего подключаем к компу и наслаждаемся..

22

Добрый вечер уважаемые читатели.. Хочу поделится с вами новыми разработками.. они ни как не касаются ардуины, но думаю для электронщиков это будет интересно...
Начнемс)
Первая разработка это аппарат для поиска скрытой проводки, многие скажут а на фига его делать если можно купить и не заморачиваться, не соглашусь с таким высказыванием.. так как купить можно что угодно, но гораздо интересней создать что ни будь своими руками.
Для создания данного агрегата потребуется ни так уж много деталей..
3 транзистора КТ315 http://s2.uploads.ru/t/AJQ5P.jpg
1 светодиодная лампочка
1 мом
1ком
220 ом
и питается все это дело от телефонной батареи 3,7в
Схема пайки http://s6.uploads.ru/t/kBreI.jpg
заморачиваться с распиновкой думаю не стоит.. кт315 очень известный транзистор для многих он незаменимый инструмент.. кстати на данной транзисторе можно сделать не плохой жучок))

23

А сейчас я хочу по говорить с вами о небольших шалостях а именно о радио жучках.
Предупреждаю сразу злоупотреблять данным устройством не стоит так как это наказуемо
Ну начнемс.
Я перепробовал кучу схем многие даже сам проектировал, но некоторые сложны были в настройке, некоторые сложны в конструкции некоторые вообще не запускались.
И тут я наткнулся на интереснейшую детальку к155ла3
По сути данная микросхема Грааль для радио любителя, с ней можно вытворять столько премудростей)))
Для начинающих радио любителей привожу такую схему http://s2.uploads.ru/t/zgLAy.jpg
Где R1=2...3 кОм                       С1=68 нФ
R2=2...4,7 кОм                          С2=100 пФ
R3= 680...820 ом
Антенна проводом 100см.
Настраивать его практически ненужна, если все правильно спаять то жук сразуже за работает в диапазоне от  70 до 180 МГ.Прослушивать можно на обычном приемнике включенный в FM режиме,радиус действие такого агрегата порядком 40 метров.
Ну что же дерзайте , творите а я прощаюсь с вами. До новый волнующих встреч.

24

Добрый день уважаемые форумчане.
Долго думая я пришел к новой идеи. а заключается она в дешевом отоплении дома.
Много говорить не буду а лучше сразу покажу то что я уже создал и оно работает КПД превысило все ожидаемые результаты.
Прошу прощения что вместо объяснения играет музыка.. так как при съемке произошла какая то фигня с микрофоном.

25

Добрый день уважаемые ардуиновцы. Прошло не так много времени и мне в голову пришла мысль сделать голосовое управление для моего умного дома.
Не буду томить простой болтовней: приступим
Для создания голосового набора команд нам понадобится небольшая платка именуемая EasyVR. http://s7.uploads.ru/t/zq0ey.jpg

С помощью данного контролера ардуина будет  понимать ваш голос. На картинке показан шилд EasyVR подсоединенный к ARDUINO UNO.
Собрав такого рода бутерброд прописываем скетxч:

// libraries
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12, 13);
#include "EasyVR.h"
EasyVR easyvr(port);

//Groups and Commands
enum Groups
{
//GROUP_0  = 0,
GROUP_1  = 1,
};

enum Group0
{
G0_ARDUINO = 0,
};

enum Group1
{
G1_VKL_SVET = 0,
G1_VYKL_SVET = 1,
};

EasyVRBridge bridge;
int8_t group, idx;

// светодиод, реле и т.п. к контакту 13
int LED = 9;


void setup()
{
// bridge mode?
if (bridge.check())
{
cli();
bridge.loop(0, 1, 12, 13);
}
// run normally
Serial.begin(9600);
port.begin(9600);

if (!easyvr.detect())
{
Serial.println("EasyVR not detected!");
for (;;);
}

easyvr.setPinOutput(EasyVR::IO1, LOW);
Serial.println("EasyVR detected!");
easyvr.setTimeout(5);
easyvr.setLanguage(EasyVR::ENGLISH);

group = EasyVR::TRIGGER; //&amp;lt;– start group (customize)

pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);    // set the LED off
}

void action();

void loop()
{
easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)

Serial.print("Say a command in Group");
Serial.println(group);
easyvr.recognizeCommand(group);

do
{
// can do some processing while waiting for a spoken command
}
while (!easyvr.hasFinished());

easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off

idx = easyvr.getWord();
if (idx >= 0)
{
// built-in trigger (ROBOT)
// group = GROUP_X; &amp;lt;– jump to another group X
return;
}
idx = easyvr.getCommand();
if (idx >= 0)
{
// print debug message
uint8_t train = 0;
char name[32];
Serial.print("Command: ");
Serial.print(idx);
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(" = ");
Serial.println(name);
}
else
Serial.println();
easyvr.playSound(0, EasyVR::VOL_FULL);
// perform some action
action();
}
else // errors or timeout
{
if (easyvr.isTimeout())
Serial.println("Timed out, try again…");
int16_t err = easyvr.getError();
if (err >= 0)
{
Serial.print("Error ");
Serial.println(err, HEX);
}

group = GROUP_1;
}
}


void action()
{
switch (group)
{
// case GROUP_0:
// switch (idx)
//  {
//  case G0_ARDUINO:
// write your action code here
//      group = GROUP_1; //&amp;lt;– or jump to another group X for composite commands
//    break;
//  }
//  break;
case GROUP_1:
switch (idx)
{
case G1_VKL_SVET:
Serial.println("Light_ON");
digitalWrite(9, HIGH);
break;

case G1_VYKL_SVET:
Serial.println("Light_OFF");
digitalWrite(9, LOW);
break;
}
break;
}
}

И так, за  программирование ардуинку начнем программировать EasyVR.
Для этого нам понадобится программа EasyVR Commander 3.10.2 http://s6.uploads.ru/t/FxtKp.jpg
Прописываем в разделе 1Group наименования связывающие ардуино с EasyVR как показано на картинке выше. и после того как мы написали имена для действий начинаем программировать голосовую часть как показано на данной картинкеhttp://s2.uploads.ru/t/tuWwl.jpg
Как именно программировать данный аппарат я рассказывать не буду, так как это очень громоздкая тема, не по ленитесь и по ищите для себя информацию.
и на конец покажу то что получилось у меня.

26

Ну вот.. можете оценить один из готовых проектов..
Я работой доволен, клиент тем более)

27

Добрый день уважаемые ардуиновцы.
Немного подумав, для себя я решил что управлять планшетом пальцем это уже прошлый век)))
И решил собрать аппарат который исправит это.
Все мы уже привыкли к мышки и клавиатуре, ну так давайте соединим все это)
Нам понадобится: Arduino Mini
                           Bluetooth модуль 
                           коннектор для мыши и клавиатуры (мама)
                           USB модуль (мама)
                           пара резисторов на (20 К) и один на 200 Ом
                           Светодиодная лампочка.
Соединяем все эти детали по схеме:http://sg.uploads.ru/t/x5eWa.jpg
После чего заливаем скетч:

#include "PS2Mouse.h"
#include "PS2Keyboard.h"
#include "Bluetooth.h"

#define MOUSE_CLOCK 2
#define MOUSE_DATA 3
#define KEYBOARD_CLOCK 4
#define KEYBOARD_DATA 5

#define _DEBUG 0

#if _DEBUG
#define HARDWARE_SERIAL_RATE 38400
#else
#define HARDWARE_SERIAL_RATE 115200
#endif

PS2Mouse mouse(MOUSE_CLOCK, MOUSE_DATA);
PS2Keyboard keyboard(KEYBOARD_CLOCK, KEYBOARD_DATA);

#if _DEBUG
#define BLUETOOTH_DEBUG_RX 7
#define BLUETOOTH_DEBUG_TX 8
#define BLUETOOTH_DEBUG_BAUD 9600
Bluetooth bluetooth(BLUETOOTH_DEBUG_BAUD, true, BLUETOOTH_DEBUG_RX, BLUETOOTH_DEBUG_TX);
#else
Bluetooth bluetooth(HARDWARE_SERIAL_RATE, false, 0, 0);
#endif

void setup()
{
#if _DEBUG
Serial.begin(HARDWARE_SERIAL_RATE);
Serial.println("Setup started");
#endif

delay(250);

#if _DEBUG
Serial.println("Initializing mouse...");
#endif

bool mouseStatus = mouse.init();

#if _DEBUG
if (mouseStatus)
    Serial.println("Mouse detected!");
else
    Serial.println("No mouse detected.");

Serial.println("Initializing keyboard...");
#endif

bool keyboardStatus = keyboard.init();

#if _DEBUG
if (keyboardStatus)
    Serial.println("Keyboard detected!");
else
    Serial.println("No keyboard detected.");

Serial.println("Setup complete");
#endif
}

void loop()
{
if (mouse.available())
{
    bluetooth.sendMouseState(mouse.getBtnState(), mouse.getDeltaX(), -mouse.getDeltaY(), -mouse.getDeltaZ());
}

if (keyboard.available())
{
    bluetooth.sendKeyboardState(keyboard.getKeyModifiers(), keyboard.getKeysPressed());
}

}

Вот как это выглядит на макетной плате:http://s9.uploads.ru/t/Js8Vv.jpg
Можно все это дело упаковать в маленькую коробку не забывая о том что, схеме нужна от чего-то питаться))

Ну и радуемся полученным гаджетом.



Рейтинг форумов | Создать форум бесплатно © 2007–2017 «QuadroSystems» LLC