Jump to content

Search the Community

Showing results for tags 'Arduini'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Пользователи форума

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 1 result

  1. Всем привет. Столкнулся с такой проблемой: Пишу программу для устройства мониторинга оборотов двух валов используя датчик холла. Настроил прерывания, перевод в RPM, все проверил, в .порт отправляются верные значения, и после настройки индикации столкнулся с проблемой неадекватного поведения переменных считающих millis, а после и индикации. В Arduino я не спец, Гляньте на код, может чем помогите. Заранее благодарен. #include <EEPROM.h> #define CLOCK 13 //SH_CP #define DATA 11 //DS #define LATCH 10 //ST_CP int numbers[5]; boolean ee = 0; int mh; int hh; int et_mah; int et_shl; int ot_mah; int ot_shl; volatile int rpm_mah = 0; volatile int rpm_shl = 0; int rpmmah_count = 0; int rpmshl_count = 0; unsigned long lastmillis_mah = 0; unsigned long lastmillis_shl = 0; unsigned long lastmillis_show = 0; unsigned char number[] = { 0b01111110, //0 0b00110000, //1 0b01101101, //2 0b01111001, //3 0b00110011, //4 0b01011011, //5 0b01011111, //6 0b01110000, //7 0b01111111, //8 0b01111011, //9 0b00000001, //- 0b00000000 //тушим индикатор }; void setup() { Serial.begin(9600); attachInterrupt(0, rpm_mahovik, FALLING); attachInterrupt(1, rpm_shluz, FALLING); pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(LATCH, OUTPUT); } void rpm_mahovik() { /* this code will be executed every time the interrupt 0 (pin2) gets low.*/ rpmmah_count++; } void rpm_shluz() { /* this code will be executed every time the interrupt 0 (pin2) gets low.*/ rpmshl_count++; } // чтение //int EEPROM_int_read(int addr) { // byte raw[2]; // for (byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr + i); // int &num = (int&)raw; // return num; //} // запись //void EEPROM_int_write(int addr, int num) { // byte raw[2]; // (int&)raw = num; // for (byte i = 0; i < 2; i++) EEPROM.write(addr + i, raw[i]); //} void show () { int x; for (x = 5; x >= 0; x--) { Serial.print("x= "); Serial.println(x); //включаем LATCH (Начинаем общение) digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, LSBFIRST, number[numbers[x]]); //выключаем LATCH digitalWrite(LATCH, HIGH); //отключаем LATCH (чтобы регистр не ждал данных) digitalWrite(LATCH, HIGH); } } //void ee_write () { // EEPROM_int_write(0, mh); // EEPROM_int_write(2, hh); // EEPROM_int_write(4, et_mah); // EEPROM_int_write(6, et_shl); // EEPROM_int_write(8, ot_mah); // EEPROM_int_write(10, ot_shl); //} void loop() { // if ((millis() <= 100) & (ee == 0)) { // mh = EEPROM_int_read(0); // hh = EEPROM_int_read(2); // et_mah = EEPROM_int_read(4); // et_shl = EEPROM_int_read(6); // ot_mah = EEPROM_int_read(8); // ot_shl = EEPROM_int_read(10); // ee = 1; // } if (millis() - lastmillis_mah == 1000) { detachInterrupt(0); rpm_mah = rpmmah_count * 60; rpmmah_count = 0; lastmillis_mah = millis(); attachInterrupt(0, rpm_mahovik, FALLING); } if (millis() - lastmillis_shl == 5000) { detachInterrupt(1); rpm_shl = rpmshl_count * 12; rpmshl_count = 0; lastmillis_shl = millis(); attachInterrupt(1, rpm_shluz, FALLING); } if (millis() - lastmillis_show == 1000) { numbers[0] = rpm_mah / 1000; numbers[1] = (rpm_mah % 1000) / 100; numbers[2] = ((rpm_mah % 1000) % 100) / 10; numbers[3] = ((rpm_mah % 1000) % 100) % 10; numbers[4] = rpm_shl / 10; numbers[5] = rpm_shl % 10; lastmillis_show = millis(); show(); Serial.print("RPM mah= "); Serial.println (rpm_mah); Serial.print("RPM shl= "); Serial.println (rpm_shl); Serial.print("Show millis= "); Serial.println(lastmillis_show); Serial.print("Show mah= "); Serial.println(lastmillis_mah); Serial.print("Show shl= "); Serial.println(lastmillis_shl); } }
×
×
  • Create New...