Ардуино нано + APDS-9930

sabansev
Offline
Зарегистрирован: 14.07.2018

Задача:

проведение рукой на 10-15 см (значение 255-500 в настройках датчика)

один раз - включается один светодиод

два раза - включается второй светодиод

три раза - все выключается

Нужен скетч. Можно доработать тот, что с прерыванием в библиотеке.

Железо все есть и уже собрано на макетке. подводишь рукой и зажигается 13-й на секунду с небольшим.

код ниже из примеров в библиотеке

/****************************************************************
ProximityInterrupt.ino
APDS-9930 Ambient light and proximity sensor
Davide Depau
December 11, 2015
https://github.com/Davideddu/APDS9930

Shawn Hymel @ SparkFun Electronics
October 24, 2014
https://github.com/sparkfun/APDS-9930_RGB_and_Gesture_Sensor

Tests the proximity interrupt abilities of the APDS-9930.
Configures the APDS-9930 over I2C and waits for an external
interrupt based on high or low proximity conditions. Move your
hand near the sensor and watch the LED on pin 13.

Hardware Connections:

IMPORTANT: The APDS-9930 can only accept 3.3V!
 
 Arduino Pin  APDS-9930 Board  Function
 
 3.3V         VCC              Power
 GND          GND              Ground
 A4           SDA              I2C Data
 A5           SCL              I2C Clock
 2            INT              Interrupt
 13           -                LED

Resources:
Include Wire.h and APDS9930.h

Development environment specifics:
Written in Arduino 1.6.5
Tested with Arduino Uno and Mega

This code is beerware; if you see me (or any other SparkFun 
employee) at the local, and you've found our code helpful, please
buy us a round!

Distributed as-is; no warranty is given.
****************************************************************/

#define DUMP_REGS

#include <Wire.h>
#include <APDS9930.h>

// Pins
#define APDS9930_INT    2  // Needs to be an interrupt pin
#define LED_PIN         13 // LED for showing interrupt

// Constants
#define PROX_INT_HIGH   600 // Proximity level for interrupt
#define PROX_INT_LOW    0  // No far interrupt

// Global variables
APDS9930 apds = APDS9930();
uint16_t proximity_data = 0;
volatile bool isr_flag = false;

void setup() {
  
  // Set LED as output
  pinMode(LED_PIN, OUTPUT);
  pinMode(APDS9930_INT, INPUT);
  
  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("------------------------------"));
  Serial.println(F("APDS-9930 - ProximityInterrupt"));
  Serial.println(F("------------------------------"));
  
  // Initialize interrupt service routine
  attachInterrupt(0, interruptRoutine, FALLING);
  
  // Initialize APDS-9930 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9930 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9930 init!"));
  }
  
  // Adjust the Proximity sensor gain
  if ( !apds.setProximityGain(PGAIN_2X) ) {
    Serial.println(F("Something went wrong trying to set PGAIN"));
  }
  
  // Set proximity interrupt thresholds
  if ( !apds.setProximityIntLowThreshold(PROX_INT_LOW) ) {
    Serial.println(F("Error writing low threshold"));
  }
  if ( !apds.setProximityIntHighThreshold(PROX_INT_HIGH) ) {
    Serial.println(F("Error writing high threshold"));
  }
  
  // Start running the APDS-9930 proximity sensor (interrupts)
  if ( apds.enableProximitySensor(true) ) {
    Serial.println(F("Proximity sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during sensor init!"));
  }

#ifdef DUMP_REGS
  /* Register dump */
  uint8_t reg;
  uint8_t val;

  for(reg = 0x00; reg <= 0x19; reg++) {
    if( (reg != 0x10) && \
        (reg != 0x11) )
    {
      apds.wireReadDataByte(reg, val);
      Serial.print(reg, HEX);
      Serial.print(": 0x");
      Serial.println(val, HEX);
    }
  }
  apds.wireReadDataByte(0x1E, val);
  Serial.print(0x1E, HEX);
  Serial.print(": 0x");
  Serial.println(val, HEX);
#endif

}

void loop() {
  
  // If interrupt occurs, print out the proximity level
  if ( isr_flag ) {
  
    // Read proximity level and print it out
    if ( !apds.readProximity(proximity_data) ) {
      Serial.println("Error reading proximity value");
    } else {
      Serial.print("Proximity detected! Level: ");
      Serial.println(proximity_data);
    }
    
    // Turn on LED for a half a second
    digitalWrite(LED_PIN, HIGH);
    delay(500);
    digitalWrite(LED_PIN, LOW);
    
    // Reset flag and clear APDS-9930 interrupt (IMPORTANT!)
    isr_flag = false;
    if ( !apds.clearProximityInt() ) {
      Serial.println("Error clearing interrupt");
    }
    
  }
}

void interruptRoutine() {
  isr_flag = true;
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016
karamzin01
Offline
Зарегистрирован: 08.03.2018

здравствуйте, проект интересный, пишите - обсудим , вот почта maslachenko767@mail.ru На руках есть множество компонентов для вашей задачи

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Ну и что тут сложного? 500 рублей. skif7361@yandex.ru

sabansev
Offline
Зарегистрирован: 14.07.2018

Прошу простить, неверно изложил вечером требуемый алгоритм.

Проводишь один раз включается первый светодиод

проводишь второй раз первый светодиод выключается, но включается второй светодиод.

проводишь третий раз - все выключается.

Далее все повторяется.

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

Бюджет в 500 рублей согласен, хоть и жабится, так как планировал сам разобраться. Но вот предлагаю так.Из бюджета beerware (по 100) двум участникам проекта. И 3 beerware (300) за лучший код. Предлагаю открытое или закрытое голосование. Поощрение строго на телефон без процентов.

P.S. просто дорисую проект, если интересно: выход на оптоизоляторы MOC3041 и симисторы BTA16? комутируемые 220 в. Питание логики 5 вольт с зарядного адаптера.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вам веселые старты хочется за 500р посмотреть или получить решение?

sabansev
Offline
Зарегистрирован: 14.07.2018

В любом случае решение будет получено не тольковесело, но и интересно и благодарно. А я пока готовлю страницу проекта на гугл диске, которая будет доступна  всем участникам.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, такие заказчики тут уже были. Исчезнуть без оплаты для них - как конфету съесть. 

Интересно даже, что если участников будет 10 - которым двум станете по 100р отстегивать?

sabansev
Offline
Зарегистрирован: 14.07.2018

Я описал  условия и отправил каждому откликнувшемуся в личном письме.  Бюджет 500 р. Предположительно (100+100+300). Вот как раз и выдалась возможность проверить мою порядочность. Если участников будет больше - добро пожаловать. Каждый получит интересный опыт и может что нового узнает. Каждому посодействовавшему будет выслана ссылка на дневник проекта. Основная премия будет выплачена за лучший код. Мало того я сам являюсь участником проекта. И шаг за шагом, по мере возможности выделять время, двигаюсь к выполнению задачи. Но с ардуино пока знаком всего несколько дней как получил модули. Потому мне интересен и знания и опыт и содействие других людей. И решив выставить тендер, я уважаю их увлечение, труд и время.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Не похоже, что труд и время как-то тут уважаются. А условия тендера с учетом того, что заказчик может объявить победителем себя, а или легко отозвать платеж на телефон, как ошибочный, выглядят как развод лохов со сбором телефонных номеров с неизвестной целью ))

Вобщем, давно бы уже свое решение получили, но, похоже что вам просто интересен процесс.

man9913
man9913 аватар
Offline
Зарегистрирован: 19.03.2016

Чё за бомжелотерея невиданной щедрости? Тс, давай больше участников, будет еще веселее, на порядок. Всем по десятке, а победителю аж цельный полтинник. А я за 30 копеек тоже могу быть полезным для твоего проекта, размещу ссылки на него на сайтах таждикистана и узбекистана - отбоя от сеньоров девелоперов не будет. Ну что по рукам?

sabansev
Offline
Зарегистрирован: 14.07.2018

Все эти наши обсуждения  оффтоп, за которые высказывают модераторы. Но в последнее свое замечание по данному обсуждению верю-неверю добавлю. Процесс это всегда интересно. Ну а если кто и обманыывает? Что из за этого лишать себя любимого занятия? Пару тройку дней я дал свой проект  герба одной организации. Потратил 5 часов, создав красивый герб.А руководством был принят какой то фаллоимитаор из звездных войн. И что? Я просто стал ещё лучше делать модели. И уж тем более не брошу это все.

sabansev
Offline
Зарегистрирован: 14.07.2018

Вы уверены, что внимательно читали условия? И причем тут таджикистан и узбекистан? И распределение средств вполне корректно описаны.

sabansev
Offline
Зарегистрирован: 14.07.2018

Ну а как только у меня будет эффективный код. Я оплачу вознаграждение и закрою проект. 

man9913
man9913 аватар
Offline
Зарегистрирован: 19.03.2016

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

strarbit
Offline
Зарегистрирован: 12.06.2016

рабочий код от 100$

webserpantin  gmail(com)

Image already added
 
 
 
man9913
man9913 аватар
Offline
Зарегистрирован: 19.03.2016

Упс, вас на с так много всяких

sadman41
Offline
Зарегистрирован: 19.10.2016

Да это не ТС, это наша коллега с Тайваня. 

Благодарность пока не с чего отстегивать - сегодня в мусорках одни пустые бутылки. Сейчас вот закончу завтрак воробъем и в поход двину. Терять полдня на переписку о том, как следует бессмысленно проводить короткое северное лето, чтобы в конце увидеть картинку фаллоимититора, считаю излишне расточительным в наше нелегкое время.

man9913
man9913 аватар
Offline
Зарегистрирован: 19.03.2016

Есть "гениальная" идея. Пока все спят, написать три скетча и ... ну а дальше вы поняли.

sabansev
Offline
Зарегистрирован: 14.07.2018

Вот и Силиконовая долина подключилась! Большой привет Дональду и Билу! (это я старбиту)

sabansev
Offline
Зарегистрирован: 14.07.2018

Светодиоды на д7 и д8, только что впаял. Написание в эту тему, наверняка больше времени требует и безрезультатно, чем сделать и отработать код. Но решение правильное написать код и забрать всю премию, пока другие спят, или выдумывают пОсты.  Поститься хорошо, полезно для фигуры.

 

man9913
man9913 аватар
Offline
Зарегистрирован: 19.03.2016

ТС, ты ошибаешься. Отписаться в эту тему - заработать хорошее настроение в солнечное летнее воскресное утро. А про написание кода - странно слышать когда о временных затратах на написание кода судит тот, кто этого сделать не может. А страрбит красава кешно.

sabansev
Offline
Зарегистрирован: 14.07.2018

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

DIYMan
DIYMan аватар
Онлайн
Зарегистрирован: 23.11.2015

Весело тут :)

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Не, ну если бы я гарантировано получил 100 рублей... А так есть шанс потратить время и не попасть в двойку избранных. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

man9913 пишет:

Есть "гениальная" идея. Пока все спят, написать три скетча и ... ну а дальше вы поняли.

За каждый аж по целых 100 рублей получить! Крутяк! Пиши!

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Не понял о каких трёх вариантах может идти речь при реализации программного двоичного счетчика

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

ua6em пишет:

Не понял о каких трёх вариантах может идти речь при реализации программного двоичного счетчика

Единица, ноль и высокоимпедансное состояние. Вы не знали?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

skif пишет:

ua6em пишет:

Не понял о каких трёх вариантах может идти речь при реализации программного двоичного счетчика

Единица, ноль и высокоимпедансное состояние. Вы не знали?


Ааааа )))

sabansev
Offline
Зарегистрирован: 14.07.2018

Благодарю всех участников темы. Тема закрыта. Вопрос решен.

sadman41
Offline
Зарегистрирован: 19.10.2016

...и шарик попадает на сектор "зеро".

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

sadman41 пишет:

...и шарик попадает на сектор "зеро".

Тут все надо мной смеялись, что я скоро за программы доплачивать начну. Так вот, я предложил заказчику доплатить. Он и на доплату отказался

sadman41
Offline
Зарегистрирован: 19.10.2016

Мало давал, наверное, в следующий раз больше бюждет выделяй.

sabansev
Offline
Зарегистрирован: 14.07.2018

Сколько не выделяй.

выключатель на датчике APDS-9930.

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

https://youtu.be/65M-5aO8kRE

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Ну если запустить пример из библиотеки - это называется реализовать самостоятельно - тогда вы многого достигли. Дня три сидели? Вы хоть поняли, почему оно работает?

sabansev
Offline
Зарегистрирован: 14.07.2018

Если мне понадобятся учителя я заведу тему Ищу учителя, и там я буду рассказывать, что я понял в коде, а что не понял.

Электронный модуль целевого устройства выполняет минимальные мои требования. 

На данный момент этого достаточно

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

Для данного форума именно моя данная тема завершена.

Успехов!

sadman41
Offline
Зарегистрирован: 19.10.2016

Судя по мигалке при удержании руки над сенсором основная проблема не решена.

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

sabansev пишет:

Если мне понадобятся учителя я заведу тему Ищу учителя, и там я буду рассказывать, что я понял в коде, а что не понял.

Электронный модуль целевого устройства выполняет минимальные мои требования. 

На данный момент этого достаточно

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

Для данного форума именно моя данная тема завершена.

Успехов!

Ну если что - обращайтесь. Я в ваши 12 лет тоже был максималистом, думал, что всё сам знаю. Потом повзрослел. И начал учиться у других

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

skif пишет:

sabansev пишет:

Если мне понадобятся учителя я заведу тему Ищу учителя, и там я буду рассказывать, что я понял в коде, а что не понял.

Электронный модуль целевого устройства выполняет минимальные мои требования. 

На данный момент этого достаточно

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

Для данного форума именно моя данная тема завершена.

Успехов!

Ну если что - обращайтесь. Я в ваши 12 лет тоже был максималистом, думал, что всё сам знаю. Потом повзрослел. И начал учиться у других

нет показать парню, как делать программные триггера )))

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Та я пытался, предлагал помочь, научить, и тут и по почте, даже доплатить обещал. Он категорически отказывается. Говорит - сам научусь. Запустил кое как программку из библиотеки и рад - получилось. Говорю - давай пять строчек допишем и будет то что ты хотел. Отвечает - меня пока и так устраивает. Ну что я ещё могу сделать?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

skif пишет:

Та я пытался, предлагал помочь, научить, и тут и по почте, даже доплатить обещал. Он категорически отказывается. Говорит - сам научусь. Запустил кое как программку из библиотеки и рад - получилось. Говорю - давай пять строчек допишем и будет то что ты хотел. Отвечает - меня пока и так устраивает. Ну что я ещё могу сделать?

"Бить нельзя их, а не вникнут - ОБЪЯСНЯТЬ!"  В.Высоцкий

ЗЫ каюсь, преследовал свой шкурный интерес, посмотреть как это делают профессионалы )))
 

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Бьют детей?