18 октября 2014      153      4

Встреча #6 с Galileo

 

banner top

У Galileo, как вы уже поняли, есть возможность и сложные проекты создавать и, конечно, простые. Среди простых — все, что связано с кнопкой.

Однако, можно и такое простое задание обернуть в проект.

Нажми на кнопку!

Классическое задание: нажимаем на кнопку — «горит» светодиод, отпускаем — светодиод «гаснет».  Нажимаем кнопку — светодиод горит, отпускаем — не горит, нажимаем — горит, отпускаем — опять не горит. Замечательно.

Будем использовать модули.

buttonled

Подключим светодиод к контакту 9, а кнопку к контакту 2.

WP_20141018_002

 

int pin2 = 0;
void setup (){
  pinMode(9,OUTPUT);
  pinMode (2,INPUT);
}
void loop(){
  pin2 = digitalRead(2);
  if (pin2 == HIGH) {
    digitalWrite(9,HIGH);
  }
  else
  {
    digitalWrite(9,LOW);
  }
}

Сюрприз первый: кнопка инверсная — все работает наоборот.

 

int pin2 = 0;
void setup (){
  pinMode(9,OUTPUT);
  pinMode (2,INPUT);
}
void loop(){
  pin2 = digitalRead(2);
  if (pin2 == LOW) {
    digitalWrite(9,HIGH);
  }
  else
  {
    digitalWrite(9,LOW);
  }
}

Теперь работает.

Усложняем задачу. Необходимо подсчитывать количество нажатий на кнопку.

Вроде все просто.

int pin2 = 0;
int count = 0;
void setup (){
  pinMode(9,OUTPUT);
  pinMode (2,INPUT);
  Serial.begin (33600);
}
void loop(){
  pin2 = digitalRead(2);
  if (pin2 == LOW) {
    digitalWrite(9,HIGH);
    count++;
  }
  else
  {
    digitalWrite(9,LOW);
  }
  Serial.println (count);
}

Однако, когда нажимаем, то… счетчик сразу накручивает десятки нажатий…

Создадим пару переменных — oldButton и currentButton (старое и текущее состояние кнопки).

Будем считывать состояние кнопки в переменную currentButton, а значение переменной ledState менять в том случае, если текущее состояние кнопки (currentButtom) — 1, а предыдущее состояние кнопки (oldButton) — 0. Поменялось значение переменной ledState или нет, но информация о состоянии кнопки после ветвления устаревает и в переменную oldButton пишем текущее состояние: oldButton = currentButton.

 

 

int oldButton = LOW, currentButton = LOW;
int count =0;
void setup () {
  pinMode(9,OUTPUT);
  pinMode(2,INPUT);
  Serial.begin (33600);
}
void loop () {
  currentButton = digitalRead(2);
  if (currentButton==LOW) {
    delay(10);
    digitalWrite (9,HIGH);
    if (currentButton==LOW && oldButton == HIGH) {
      count++;
    }
  }
  else {
    digitalWrite (9,LOW);
  }

  oldButton=currentButton;
  Serial.println (count);
}

 

Осталось подключить вторые кнопку и светодиод, чтобы можно было устроить небольшую игру.

Назовем ее «КНОПКОТЫКИ». Кто больше раз нажмет на кнопку за 10 секунд.

 

int oldButton1 = LOW, currentButton1 = LOW;
int count1 =0;
int oldButton2 = LOW, currentButton2 = LOW;
int count2 =0;
void setup () {
  pinMode(9,OUTPUT); 
  pinMode(8,OUTPUT);
  pinMode(2,INPUT);  
  pinMode(3,INPUT);
  Serial.begin (33600);
  //----------------------------------
  while (millis()<10000) {
    currentButton1 = digitalRead(2);
    currentButton2 = digitalRead(3);
    if (currentButton1==LOW) {
      delay(10);
      digitalWrite (9,HIGH);
      if (currentButton1==LOW && oldButton1 == HIGH) {
        count1++;
      }
    }
    else {
      digitalWrite (9,LOW);
    }
    if (currentButton2==LOW) {
      delay(10);
      digitalWrite (8,HIGH);
      if (currentButton2==LOW && oldButton2 == HIGH) {
        count2++;
      }
    }
    else {
      digitalWrite (8,LOW);
    }
    oldButton1=currentButton1;
    oldButton2=currentButton2;
    Serial.print (count1); 
    Serial.print ("    "); 
    Serial.println (count2); 
  }  
  if (count1>count2) {
    digitalWrite (9,HIGH); 
    digitalWrite (8,LOW);
  }
  if (count1==count2) {
    digitalWrite (9,HIGH); 
    digitalWrite (8,HIGH);
  }
  if (count1>count2) {
    digitalWrite (9,LOW); 
    digitalWrite (8,HIGH);
  }
}
void loop () {

}

 

Мы еще и на 3D-принтере пытались придать законченный вид решению (это долгий процесс). Что в результате у нас получилось?

  • Игра = игровые технологии в образовании.
  • Игра для двоих = командная работа.
  • Что-то похожее на джойстик = производственный цикл продукта.

Задание 8. Укажите, что может стоять место точек. В комментариях.

 

Встреча #5 с Galileo                                           Финал

Обсуждение: 4 комментария
  1. Любавина Светлана:

    Использовать как шагомер, прикрепив кнопку к подошве.

  2. Горский Егор:

    Переключатель, выключатель, азбука морзе

  3. Кодирование информации(по интервалам между сигналами).
    Передача информации на расстоянии(использование фотодиода допускается?).

Ваш комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

Любимые цитаты
«Теория направляет науку, эксперимент её продвигает» (Пётр Леонидович Капица)
Популярные записи
Архивы
Амперка. Модули
РобоНорд-2017
Олимпиада «Будущий инженер»
Календарь записей
Август 2018
Пн Вт Ср Чт Пт Сб Вс
« Мар    
 12345
6789101112
13141516171819
20212223242526
2728293031  
Пять последних постов
Фотографии

© 2018 Начала инженерного образования в школе · 163051, Архангельск, ул. Тимме, 22/3. МБОУ Гимназия № 24