Хотелось бы сделать спидометр который будет будет работать по принципу пересечения лазерного луча с меткой на колесе. Каждый раз когда он пересекает ее к пройденному прибавляется L= 2piR и делится на пройденное время. Все бы хорошо ибо с технической частью я бы справился но вот с кодом для ардуино я точно не справлюсь ибо я в программирование полный ноль помогите пожалуйста
Нужно с чего-то начать. Вот так с нуля готовый код без сборки гэджета вряд ли кто-то напишет. Посмотрите видеоуроки, станет яснее как программировать. Грубый набросок скетча таков: Код (Text): #define SENSOR_PIN A0 #define LIGHTNESS_THRESHOLD 800 // радиус колеса, в метрах #define WHEEL_RADIUS 0.25 // время на обновление (мс) #define REFRESH_TIME 2000 // что было последний раз на сенсоре? bool prevVal = false; // пройденное расстояние, в метрах float distance = 0; int t0 = 0; int velocity = 0; void setup() { } void loop() { // что сейчас на сенсоре? bool currentVal = analogRead(A0) > LIGHTNESS_THRESHOLD; if (!currentVal && prevVal) { // было темно, а стало светло: перед лазером пролетает шайба distance += 2 * PI * WHEEL_RADIUS; } int t1 = millis(); int dt = t1 - t0; if (dt > REFRESH_TIME) { t0 = t1; distance = 0; velocity = distance * 1000 / dt; // velocity — ваша скорость в м/с // делайте с ней что нужно дальше } prevVal = val; }
Огромное спасибо. Видео уроки я уже смотрел но все равно плохо понимаю как программировать. Я лишь понял что язык чем то схож на с++ но и его то я не знаю так что беда. Но когда соберу обращусь еще раз
Без проблем — обращайтесь. А язык, по секрету всему свету и есть C++ Не существует языка Arduino. Есть C++ с удобной библиотекой, предоставляемой софтом Arduino.
Я тоже хочу свой "всеметр" на велик сделать, но я бы не стал использовать световой резистор для этого, по мне лучше взять сенсор магнитного поля, поставить его на вилку, повесить магнит на колесо и для сенсора сделать "LOW" прерывание.
Лол. Тоже с этого начал как ардуинку получил. Правда я использовал сенсор постоянного магнитного поля. Дешевле будет.
Думаю, что более правильно будет на прерывании: Код (Text): #define PinA 2 static boolean output = HIGH; int pulse = 0; bool prev = false; void setup() { pinMode(PinA, INPUT); digitalWrite(PinA, HIGH); // подключить подтягивающий резистор attachInterrupt(0, int_on, FALLING); // настроить прерывание interrupt 0 на pin 2 Serial.begin(9600); } void loop() { delay(100); Serial.println(pulse); } // обработка прерывания void int_on() { digitalWrite(13, (output==HIGH) ? output=LOW : output=HIGH); if(!prev) { pulse++; } prev = !prev; }