Events (події) це заздалегідь визначені функції робота, у які ви можете вбудовувати умовну логіку. Коли подія відбувається, умовна логіка виконується, а потім програма повертається до основного циклу з того місця, де вона зупинилася. Подія буде викликана кожного разу, коли вона відбудеться, за замовчуванням, якщо ви не налаштуєте її інакше.
Наприклад, "при зіткненні змініть кольори LED на червоний і відтворіть звук зіткнення", після чого програма повернеться до основного циклу.
Примітка:
У базових прикладах нижче логіка в основному циклі вкладена в цикл while 1. Це гарантує, що після виклику події буде виконана логіка для повернення до основного циклу. Якщо в основному циклі була б логіка з тривалим затримками, вам не потрібно було б використовувати цикл while 1 loop.==

onCollision() виконує умовну логіку, коли робот стикається з об'єктом.
async function onCollision() {
// код, який виконується при зіткненні
}
registerEvent(EventType.onCollision, onCollision);Нижче наведено просту гру на зразок "пінг-понгу", де Sphero відскакує від стін або ваших рук/ніг безкінечно.
Розмістіть робота на підлозі між двома паралельними стінами/об'єктами та запустіть програму, орієнтуючи робота перпендикулярно до однієї зі стін. При зіткненні програма вимовить "Collision" (зіткнення) та змінить кольори LED на червоний, після чого рухатиметься в протилежному напрямку:
async function onCollision() {
stopRoll(); // зупиняє рух
setMainLed({ r: 255, g: 0, b: 0 }); // встановлює червоний колір LED
await speak("Collision", false); // говорить "зіткнення"
setHeading((getHeading() + 180)); // змінює напрямок на протилежний
await delay(0.5); // затримка на 0.5 секунди
setMainLed({ r: 255, g: 22, b: 255 }); // змінює колір LED на рожевий
setSpeed(100); // встановлює швидкість
}
registerEvent(EventType.onCollision, onCollision);
async function startProgram() {
setMainLed({
r: 255,
g: 255,
b: 255 // встановлює білий колір LED
});
setSpeed(100); // встановлює швидкість руху
}Примітка:
onCollision() не підтримується в RVR/RVR+, оскільки часті зіткнення можуть пошкодити мотори.

onTotalDistance() виконує умовну логіку, коли робот долає певну відстань (в сантиметрах).
async function onTotalDistance(distance) {
// код для виконання після досягнення вказаної відстані
}
registerEvent(EventType.onTotalDistance, onTotalDistance);
registerEventCondition(EventType.onTotalDistance, onTotalDistance, 50); // виконується після подолання 50 смНижче наведено програму, в якій BOLT+ рухається з заданою швидкістю, поки не пройде 50 см. Після досягнення цієї відстані на екрані BOLT+ з'являється святкова анімація з конфеті:
async function startProgram() {
setSpeed(100); // встановлює швидкість руху
}
async function onTotalDistance(distance) {
stopRoll(); // зупиняє рух
await setDisplayAnimation("confetti", true); // відображає анімацію конфеті на екрані
}
registerEvent(EventType.onTotalDistance, onTotalDistance);
registerEventCondition(EventType.onTotalDistance, onTotalDistance, 50); // виконується при досягненні 50 смНа відміну від інших подій, ви можете використовувати кілька екземплярів onTotalDistance.
Наприклад, ви можете написати код, який виконується на 50 см, 100 см та 200 см, і всі три екземпляри будуть виконуватися. Просто переконайтесь, що кожен екземпляр має унікальну відстань.
Примітка:
onTotalDistance() підтримується лише для Sphero BOLT+.

onTimeElapsed() виконує умовну логіку, коли проходить певний час (в секундах).
async function onTimeElapsed(program_run_time) {
// код для виконання після зазначеного часу
}
registerEvent(EventType.onTimeElapsed, onTimeElapsed);
registerEventCondition(EventType.onTimeElapsed, onTimeElapsed, 15); // виконується через 15 секундНижче наведено програму, в якій BOLT+ рухається з заданою швидкістю, поки не мине 15 секунд. Після цього на екрані BOLT+ з'являється святкова анімація з конфеті:
async function startProgram() {
setSpeed(100); // встановлює швидкість руху
}
async function onTimeElapsed(program_run_time) {
stopRoll(); // зупиняє рух
await setDisplayAnimation("confetti", true); // відображає анімацію конфеті на екрані
}
registerEvent(EventType.onTimeElapsed, onTimeElapsed);
registerEventCondition(EventType.onTimeElapsed, onTimeElapsed, 15); // виконується через 15 секундНа відміну від інших подій, ви можете використовувати кілька екземплярів onTimeElapsed.
Наприклад, ви можете написати код, який виконується на 15 секунд, 30 секунд і 60 секунд, і всі три екземпляри будуть виконуватися. Просто переконайтесь, що кожен екземпляр має унікальний час.
Примітка:
onTimeElapsed() підтримується лише для Sphero BOLT+.

onAmbientLight() виконує умовну логіку, коли рівень навколишнього освітлення у вашому середовищі більше або менше вказаного значення.
async function onAmbientLight(ambientLight) {
// код для виконання при зазначеному рівні освітлення
}
registerEvent(EventType.onAmbientLight, onAmbientLight);
registerEventCondition(EventType.onAmbientLight, onAmbientLight, function check(ambientLight) { return ambientLight >= 500 });Нижче наведено просту програму, в якій LED світлодіоди на BOLT+ змінюють колір на зелений, якщо рівень освітлення більше 500 люкс, і на червоний, якщо рівень освітлення менше 400 люкс:
async function startProgram() {
// основна програма
}
async function onAmbientLight(ambientLight) {
setMainLed({ r: 0, g: 255, b: 0 }); // встановлює зелений колір для LED, коли освітлення більше 500 люкс
}
registerEvent(EventType.onAmbientLight, onAmbientLight);
registerEventCondition(EventType.onAmbientLight, onAmbientLight, function check(ambientLight) { return ambientLight >= 500 });
async function onAmbientLight_2(ambientLight) {
setMainLed({ r: 255, g: 0, b: 0 }); // встановлює червоний колір для LED, коли освітлення менше 400 люкс
}
registerEvent(EventType.onAmbientLight, onAmbientLight_2);
registerEventCondition(EventType.onAmbientLight, onAmbientLight_2, function check(ambientLight) { return ambientLight <= 400 });На відміну від інших подій, ви можете використовувати кілька екземплярів onAmbientLight.
У цьому прикладі два екземпляри перевіряють два різні умови: один для рівня освітлення більше 500 люкс, а інший — менше 400 люкс.
Примітка:
onAmbientLight() підтримується лише для Sphero BOLT+.

onSoftwareButton() виконує умовну логіку, коли вибирається відповідна програмна кнопка.
async function onSoftwareButton(button) {
// код для виконання при виборі кнопки
}
registerEvent(EventType.onSoftwareButton, onSoftwareButton);
registerEventCondition(EventType.onSoftwareButton, onSoftwareButton, function check(button) { return button === 'button_name' });Ви можете визначити до трьох програмних кнопок. Кожна кнопка повинна мати унікальну назву, щоб програма виконувалась без помилок.
На відміну від інших команд подій, onSoftwareButton дозволяє користувачеві безпосередньо контролювати, коли виконуються відповідні коди, що відкриває багато цікавих можливостей. Нижче показано, як ці кнопки можуть бути поєднані з іншими командами BOLT+ в цікавий спосіб.
У цьому прикладі ми перетворюємо BOLT+ на автомобіль, який сигналить, коли користувач натискає кнопку:
// Оголошення списку подій для програмних кнопок
var _softwareButtonEvents = ['aim', 'honk horn', 'change LED color'];
// Основна функція, яка починає програму
async function startProgram() {
// Реєстрація програмних кнопок
registerSoftwareButton(_softwareButtonEvents);
// Увімкнення керування рухом робота
drive(true);
}
// Функція для обробки натискання кнопки "aim" (спрямування)
async function onSoftwareButton(button) {
// Перевірка, чи натиснута кнопка "aim"
if (button !== 'aim') return;
// Скидання напрямку робота
resetAim();
}
// Реєстрація події натискання кнопки "aim"
registerEvent(EventType.onSoftwareButton, onSoftwareButton);
// Функція для обробки натискання кнопки "honk horn" (сигнал)
async function onSoftwareButton_2(button) {
// Перевірка, чи натиснута кнопка "honk horn"
if (button !== 'honk horn') return;
// Відтворення звуку сигналу автомобіля
await Sound.Mechanical.CarHorn.play(false);
}
// Реєстрація події натискання кнопки "honk horn"
registerEvent(EventType.onSoftwareButton, onSoftwareButton_2);
// Функція для обробки натискання кнопки "change LED color" (зміна кольору LED)
async function onSoftwareButton_3(button) {
// Перевірка, чи натиснута кнопка "change LED color"
if (button !== 'change LED color') return;
// Випадковий вибір кольору для основного LED
setMainLed(getRandomColor());
}
// Реєстрація події натискання кнопки "change LED color"
registerEvent(EventType.onSoftwareButton, onSoftwareButton_3);У цьому прикладі ми перетворюємо BOLT+ на машину з сигналом, коли керуємо ним у нашому середовищі.
Після запуску програми, команда drive(true) дозволяє користувачу вручну керувати BOLT+ у своєму середовищі.
Перша кнопка (під назвою "aim") дозволяє користувачу скинути напрямок за бажанням:
async function onSoftwareButton(button) {
if (button !== 'aim') return;
resetAim();
}Друга кнопка (під назвою "honk horn") дозволяє користувачу відтворювати звук автомобільного сигналу на вимогу:
async function onSoftwareButton_2(button) {
if (button !== 'honk horn') return;
await Sound.Mechanical.CarHorn.play(false);
}Третя кнопка (під назвою "change LED color") дозволяє користувачу випадковим чином змінювати кольори LED:
async function onSoftwareButton_3(button) {
if (button !== 'change LED color') return;
setMainLed(getRandomColor());
}Примітка:
onSoftwareButton() підтримується лише на Sphero BOLT+.

onFreefall() виконує умовну логіку, коли єдиною силою, що діє на робота, є сила тяжіння, наприклад, коли його кидають або він падає.
Вільне падіння визначається виміром акселерометром значенням < 0.1g протягом >= 0.1с, де 1g – це стан спокою.
На Землі об'єкти у вільному падінні прискорюються вниз зі швидкістю 9.81 м/с².
Якщо ви перебуваєте на орбіті, об'єкти здаються нерухомими зі значенням 0g, оскільки вони (і ви) постійно перебувають у вільному падінні, але ніколи не досягають Землі.
async function onFreefall() {
// код, який виконується при вільному падінні
}
registerEvent(EventType.onFreefall, onFreefall);Щоб при вільному падінні вимовити "freefall" і змінити колір LED на червоний, використовуйте наступний код:
async function onFreefall() {
setMainLed({ r: 255, g: 0, b: 0 }); // Встановлює червоний колір LED
await speak("freefall", false); // Вимовляє слово "freefall"
await delay(0.5); // Затримка 0.5 с
}
registerEvent(EventType.onFreefall, onFreefall);
async function startProgram() {
while (true) {
setMainLed({ r: 255, g: 255, b: 255 }); // Встановлює білий колір LED
await delay(0.1); // Затримка 0.1 с
}
}Примітка:
onFreeFall() не підтримується на RVR/RVR+, оскільки повторні падіння можуть пошкодити механічні компоненти робота.

onLanding() виконує умовну логіку, коли робот приземляється після перебування у вільному падінні.
Не потрібно визначати подію onFreeFall() для того, щоб робот міг скористатися подією onLanding(), але робот повинен відповідати умовам для вільного падіння перед посадкою.
aasync function onLanding() { // (асинхронна функція при посадці)
// код, який виконується при посадці
}
registerEvent(EventType.onLanding, onLanding); // (реєстрація події при посадці)Щоб вимовити "landing" і змінити колір LED (світлодіодів) на зелений після приземлення, використовуйте наступний код:
async function onLanding() { // (асинхронна функція при посадці)
setMainLed({ r: 0, g: 255, b: 0 }); // (встановлює зелений колір LED)
await speak("landing", false); // (вимовляє слово "landing")
await delay(0.5); // (затримка 0.5 с)
}
registerEvent(EventType.onLanding, onLanding); // (реєстрація події при посадці)
async function startProgram() { // (асинхронна функція для запуску програми)
while (true) { // (безкінечний цикл)
setMainLed({ r: 255, g: 255, b: 255 }); // (встановлює білий колір LED)
await delay(0.1); // (затримка 0.1 с)
}
}Примітка:
onLanding() не підтримується на RVR/RVR+, оскільки повторні падіння можуть пошкодити механічні компоненти робота.

onGyroMax() виконує умовну логіку, коли робот перевищує межі вимірюваної обертальної швидкості від -2000° до 2000° на секунду.
Це можна викликати, обертаючи робота, як вертушку, на столі дуже швидко. Потрібно обертати робота більше ніж 5.5 обертів за секунду.
async function onGyroMax() { // (асинхронна функція при максимальному гіроскопічному показнику)
// код, який виконується при досягненні максимального гіроскопічного показника
}
registerEvent(EventType.onGyroMax, onGyroMax); // (реєстрація події при досягненні максимального гіроскопічного показника)Щоб вимовити "gyromax" і змінити колір LED (світлодіодів) на червоний, коли досягнуто максимального гіроскопічного показника, використовуйте наступний код:
async function onGyroMax() { // (асинхронна функція при максимальному гіроскопічному показнику)
setMainLed({ r: 255, g: 0, b: 0 }); // (встановлює червоний колір LED)
await speak("gyromax", true); // (вимовляє слово "gyromax")
await delay(1.0); // (затримка 1 с)
}
registerEvent(EventType.onGyroMax, onGyroMax); // (реєстрація події при досягненні максимального гіроскопічного показника)
async function startProgram() { // (асинхронна функція для запуску програми)
setStabilization(false); // (вимикає стабілізацію)
setBackLed(255); // (включає задній LED на максимальну яскравість)
while (true) { // (безкінечний цикл)
setMainLed({ r: 255, g: 255, b: 255 }); // (встановлює білий колір LED)
await delay(0.5); // (затримка 0.5 с)
}
}Примітка:
onGyroMax() не підтримується на RVR/RVR+.

onCharging() виконує умовну логіку, коли робот починає заряджати свою батарею. Це може бути викликано, коли ви ставите робота на зарядну станцію або підключаєте його до живлення.
async function onCharging() { // (асинхронна функція при зарядці)
// код, який виконується при зарядці
}
registerEvent(EventType.onCharging, onCharging); // (реєстрація події при зарядці)Примітка:
onCharging() не підтримується на RVR/RVR+ (оскільки батарея фізично виймається під час зарядки).
onCharging() не підтримується на Mini (оскільки Mini скидається при початку зарядки).
onCharging() не підтримується на BOLT+ (оскільки BOLT+ скидається при початку зарядки і з'єднання не підтримується під час зарядки в зарядній станції).

onNotCharging() виконує умовну логіку, коли робот перестає заряджати свою батарею.
Це може бути викликано, коли ви знімаєте робота з зарядної станції або відключаєте його від живлення.
async function onNotCharging() { // (асинхронна функція при відсутності зарядки)
// код, який виконується при відсутності зарядки
}
registerEvent(EventType.onCharging, onNotCharging); // (реєстрація події при відсутності зарядки)Щоб Sphero виконував 3 різні умови для подій "зарядка", "при зарядці" і "не заряджається", використовуйте наступний код:
async function onCharging() {
setMainLed({ r: 6, g: 0, b: 255 }); // (ставимо синє світло на LED)
await speak("charging", true); // (говоримо "зарядка")
await delay(1.0);
await speak("remove me from my charger", true); // (говоримо "зніми мене з зарядки")
}
registerEvent(EventType.onCharging, onCharging); // (реєстрація події зарядки)
async function onNotCharging() {
setMainLed({ r: 255, g: 0, b: 47 }); // (ставимо червоне світло на LED)
await speak("not charging", true); // (говоримо "не заряджається")
await delay(2.0);
}
registerEvent(EventType.onNotCharging, onNotCharging); // (реєстрація події при відсутності зарядки)
async function startProgram() {
await speak("place me in my charger", true); // (говоримо "поклади мене на зарядку")
while (true) {
setMainLed({ r: 3, g: 255, b: 0 }); // (ставимо зелений LED)
await delay(0.5);
}
}Примітка:
onNotCharging() не підтримується на RVR/RVR+ (оскільки батарея фізично виймається під час зарядки).
onNotCharging() не підтримується на Mini (оскільки Mini скидається при початку зарядки).
onNotCharging() не підтримується на BOLT+ (оскільки BOLT+ скидається при початку зарядки і з'єднання не підтримується під час зарядки в зарядній станції).

onIRMessage4(channel) виконує умовну логіку, коли інфрачервоне повідомлення отримано на вказаному каналі.
Це може бути викликано, коли один робот отримує повідомлення від іншого робота.
Наприклад, щоб Sphero BOLT змінив матрицю на червоний колір при отриманні повідомлення на каналі 4, використовуйте:
var _messageChannels = [4]; // (канали повідомлень, тут канал 4)
async function startProgram() {
listenForIRMessage(_messageChannels); // (слухаємо ІЧ повідомлення на вказаних каналах)
}
async function onIRMessage4(channel) { // (асинхронна функція для обробки повідомлення на каналі 4)
if (channel !== 4) return; // (якщо канал не 4, виходимо з функції)
setMainLed({ r: 255, g: 0, b: 0 }); // (встановлюємо червоний LED)
listenForIRMessage(_messageChannels); // (продовжуємо слухати ІЧ повідомлення)
}
registerEvent(EventType.onIRMessage, onIRMessage4); // (реєстрація події для обробки ІЧ повідомлень на каналі 4)Примітка:
onIRMessage4(channel) підтримується на Sphero BOLT, BOLT+ та RVR/RVR+.

onColor(color) (коли колір (колір)) виконує умовну логіку, коли сенсор кольору Sphero RVR/RVR+ повертає вказане значення кольору RGB.
var _colors = [{"r":255,"g":15,"b":60}]; // визначаємо бажаний колір для сенсора
async function startProgram() {
listenForColorSensor(_colors); // активуємо сенсор кольору для визначення цього кольору
}
async function onColor(color) {
if (color.r !== 255 || color.g !== 15 || color.b !== 60) return; // якщо колір не відповідає вказаному, код не виконується
}
registerEvent(EventType.onColor, onColor); // реєструємо подію, щоб виконати код при спрацьовуванні події кольоруКолір, який повертає сенсор кольору RVR/RVR+, повинен бути дуже близьким до кольору, вказаного в onColor(color) (onColor (колір)), щоб подія виконувалась правильно.
Рекомендується налаштувати бажаний колір за допомогою блоку події "on color" у блочному редакторі, а потім скопіювати значення RGB у ваш JavaScript код.
Для цього потрібно виконати наступне:
- Підключити Sphero RVR/RVR+.
- Вибрати блок події "on color" та додати його в блочний редактор.
- Натиснути на квадрат в блоці події "on color", щоб відкрити спливаюче вікно сенсора кольору.
- Позиціювати сенсор кольору над бажаним кольором.
- Скопіювати значення червоного, зеленого та синього кольорів зі спливаючого вікна.
- Додати їх до асинхронної функції onColor (колір) у JavaScript-редакторі, щоб подія кольору виконувалась правильно.
Спливаюче вікно блоку "on color" (блок "коли колір"):

Примітка:
фізичний сенсор кольору повинен бути увімкнений для правильного виконання onColor(color) (onColor (колір)).
Якщо не включити listenForColorSensor(_colors), сенсор кольору поверне значення RGB 0,0,0 (чорний).
Завжди переконуйтесь, що наступний код включено при налаштуванні події onColor(color) (onColor (колір)):
async function startProgram() {
listenForColorSensor(_colors); // активуємо сенсор кольору
}