Вело-Компьютер + беспроводные Поворотники и стоп-сигнал.

Нужен ли тебе подобный девайс?

  • да

    Голосов: 7 87.5%
  • нет

    Голосов: 1 12.5%

  • Всего проголосовало
    8

iGEROS

✩✩✩✩✩✩✩
16 Апр 2019
0
0
Может кто уже натыкался на подобный проект и может поделиться инфой.
Я же, в меру своих способностей и времени, постараюсь выполнить задуманное самостоятельно.
Но от помощи не отказываюсь.
 

Darrel

✩✩✩✩✩✩✩
17 Авг 2019
5
0
сейчас далаю такое + спидометр\километраж + сигнализация
C++:
#include <GyverTimer.h>
GTimer_ms blinc;
GTimer_ms stopl;

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 3, 9, 4);

#include <GyverButton.h>
GButton butt_r(10); //кнопка право
GButton butt_l(11); //кнопка лево
GButton butt_c(12); //кнопка центр
GButton butt_s(A2); //кнопка stop
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

#include <EEPROM.h>


unsigned long lastturn, time_press; //переменные хранения времени
float SPEED; //переменная хранения скорости в виде десятичной дроби
float DIST; //переменная хранения расстояния в виде десятичной дроби
float w_length = 2.060; //длина окружности колеса в метрах
byte light = 0; //режим работы габаритов
int screen = 0; //режим работы дисплея
bool mode = 0; //режим работы кнопок
bool alarm = 0; // сигнализация

void setup() {
  // настройки пинов
  pinMode(5, OUTPUT); //свет середина
  pinMode(6, OUTPUT); //свет право
  pinMode(7, OUTPUT); //свет центр
  pinMode(8, OUTPUT); //свет лево
  pinMode(13, OUTPUT); //свет лево контрол
  pinMode(A0, OUTPUT); //свет центр контрол
  pinMode(A1, OUTPUT); //свет право контрол
  pinMode(A3, OUTPUT); //зуммер

  time.begin();
  lcd.init();
  lcd.init();
  lcd.backlight();
  blinc.setInterval(777);
  stopl.setInterval(7777);

  Serial.begin(9600);  //открыть порт

  attachInterrupt(0, sens, RISING); //подключить прерывание на 2 пин при повышении сигнала

  //--------------
  DIST = (float)EEPROM.read(0) / 10.0; //вспоминаем пройденное расстояние при запуске системы (деление на 10 нужно для сохранения десятых долей расстояния, см. запись)
}

void sens() {
  if (millis() - lastturn > 80) { //защита от случайных измерений (основано на том, что велосипед не будет ехать быстрее 120 кмч)
    SPEED = w_length / ((float)(millis() - lastturn) / 1000) * 3.6; //расчет скорости, км/ч
    lastturn = millis(); //запомнить время последнего оборота
    DIST = DIST + w_length / 1000; //прибавляем длину колеса к дистанции при каждом обороте оного
  }
}

void loop() {
  // отработка кнопок
 Serial.print(screen);
 Serial.println(mode);
  butt_l.tick();
  butt_c.tick();
  butt_r.tick();
  butt_s.tick();
  if (butt_l.isClick() && mode == 0) light = 1;
  if (butt_l.isClick() && mode == 1) screen--;
  if (butt_r.isClick() && mode == 0) light = 2;
  if (butt_r.isClick() && mode == 1) screen++;
  if (butt_c.isClick() && mode == 0) light = 3;
  if (butt_c.isDouble() && mode == 0) light = 4;
  if (butt_c.isHold()) mode = !mode;
  if (butt_s.isPress()) light = 5;
  if (butt_s.isRelease()) light = 0;

  // отработка кнопок

  // отработка габаритов
  switch (light) {
    case 0: off();
      break;
    case 1: left();
      break;
    case 2: right();
      break;
    case 3: stop_1();
      break;
    case 4: stop_2();
      break;
  }

  // отработка экрана
  switch (screen) {
    case 0: def();
      break;
    case 1: date();
      break;
    case 2: max_s();
      break;
    case 3: max_d();
      break;
    case 4: alrm();
      break;
  }
}

// функции габаритов
void off() {
  digitalWrite (5, 0);
  digitalWrite (6, 0);
  digitalWrite (7, 0);
  digitalWrite (8, 0);
  digitalWrite (A0, 0);
  digitalWrite (A1, 0);
  digitalWrite (13, 0);
}
void left() {
  digitalWrite (8, 1);
  digitalWrite (7, 1);
  digitalWrite (13, 1);
  digitalWrite (5, 0);
  digitalWrite (6, 0);
  digitalWrite (A0, 0);
  digitalWrite (A1, 0);
  if (blinc.isReady()) {
    digitalWrite (8, !digitalRead(8));
  }
  if (butt_l.isDouble()) light = 0;
}
void right() {
  digitalWrite (6, 1);
  digitalWrite (7, 1);
  digitalWrite (A1, 1);
  digitalWrite (5, 0);;
  digitalWrite (8, 0);
  digitalWrite (A0, 0);
  digitalWrite (13, 0);
  if (blinc.isReady()) {
    digitalWrite (6, !digitalRead(6));
  }
  if (butt_r.isDouble()) light = 0;
}
void stop_1() {
  digitalWrite (8, 1);
  digitalWrite (6, 1);
  digitalWrite (5, 0);
  digitalWrite (7, 1);
  digitalWrite (A0, 1);
  digitalWrite (A1, 0);
  digitalWrite (13, 0);
  if (butt_c.isTriple()) light = 0;
  }
void stop_2() {
  digitalWrite (5, 0);
  digitalWrite (7, 0);
  digitalWrite (A1, 0);
  digitalWrite (13, 0); 
  if (blinc.isReady()) {
    digitalWrite (8, !digitalRead(8));
    digitalWrite (6, !digitalRead(6));
    digitalWrite (A0, !digitalRead(A0));
  }
  if (butt_c.isTriple()) light = 0;
}

// функции экрана
void def() {
  lcd.setCursor(2, 1);
  lcd.print(time.gettime("H:i:s D"));
}
void date() {
  lcd.setCursor(3, 0);
  lcd.print(time.gettime("d-m-Y"));
  lcd.setCursor(2, 1);
  lcd.print(time.gettime("H:i:s D"));
}
void max_s() {
  lcd.setCursor(3, 0);
  lcd.print("MAX SPEED");
}
void max_d() {
  lcd.setCursor(3, 0);
  lcd.print("MAX DIST");
}
void alrm() {
  lcd.setCursor(3, 0);
  lcd.print("ALARM");
  lcd.setCursor(2, 1);
  lcd.print(alarm);
  if (butt_c.isClick()) alarm = !alarm;
}
 

Morger

✩✩✩✩✩✩✩
31 Июл 2018
1
0
Я на базе "сборника эффектов для ленты" сделал задний фонарь из 2x 8ми-светодиодных планок WS2812.

Вот если бы ему добавить функцию "Все красные" при отрицательном ускорении....
 

Evgeni

✩✩✩✩✩✩✩
4 Сен 2019
5
0
Добрый день . И в чем проблема ? Что именно хотите ?