Нужна помощь, почему этот код работает намного медленнее, чем UNO?

Ореховый
Вт 26 июля 2016 г. 16:42
Так что вот вещь. Я делаю проект Speedo Lauge для развлечения, чтобы надеть свой велосипед.

И на этом этапе я просто получаю некоторые базовые управления двигателями и обновления светодиодов, прежде чем я приступил к рассчитанию чтения MPH и RPM.

Я изменил шаг.h Библиотека, чтобы разделить другой код провода и исправить его шаговую последовательность, которая была просто неправильной...

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

Теперь проблема с моим светодиодным массивом.
Где раньше на UNO массив обновился бы хорошо, а двигатель будет работать на полной скорости. У меня есть обновление массива светодиодов между каждым шагом MPH (23 или около того моторных шагов...)

Может ли кто -нибудь взглянуть на этот код и сказать мне, почему он так медленно работает? Основная причина, по которой я использую клен, заключается в том, что его 75 МГц. Он должен быть быстрее, чем ООН, должен быть в состоянии сделать больше... И я читаю даже несколько основных многочисленных многопоточных потоков...
Что полезно, поскольку он будет вычислять MPH и RPM и отобразить эти данные о светодиодах моторизованных циферблат и на ЖК -дисплее: P

Кстати, я кодирую с платформы и строительство и загрузку из Arduino IDE, не могу загружать и создавать форму платформы

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

Функция, в которой, кажется, не работает с надлежащей скоростью, - это перемещение, и замедляется, когда я запускаю Call UpdateMphled...

Я никогда не претендовал на кодирующий гений. Я художник по графике по торговле. Но если кто -то может помочь мне, пожалуйста, дайте мне знать, как это исправить.

Это действительно просто флаг или настройка, мне нужно применить к STM? Что -то, чтобы позвонить, чтобы заставить его запустить полную скорость?
#include #include #include #include #include #define ledPin 3 #define numLeds 24 // Define the array of leds CRGB led_array[numLeds]; LiquidCrystal_I2C lcd(0x3F, 20, 4); const int HomeBTN = 13; /// pin connected to button int MPH = 0; // to be replaced by a MPH calculator in loop connected to bike int OldMPH = 0; int differ = 0; // The step angle is 5.625/64 and the // operating Frequency is 100pps. Current draw is 92mA. //////////////////////////////////////////////// //4096 // 2.25 deg per MPH, 5.625/64 = 0.0879, 2.25/0.0879 = 25.6 steps per mph /////////////////////////////////////////////////////////////////////////////// /////// Stepper Settings ///////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// #define StepsPerRev 2080 //2080 seems to be cloest non float figure //37.9 //88641975 /// 2037.88641975 /// 2048 /// 4075.7728395 #define mphRange 80 // dial range for MPH #define StepsPerMPH ((StepsPerRev) / 2 / (mphRange)) //13 #define speed 15 //500 at 5v 700-750 at 9v some skipping 850 at 12v but too hot i think //////////Stepper Call newStepper mph_stepper(StepsPerRev, 8, 9, 10, 11); /// 64 steps per motor 360 (not geared rev) /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// void updateMPHled (int cMPH) { int light = ((numLeds + .0f) / (mphRange + .0f) * cMPH); // (numLeds / mphRange * cMPH); //Serial.print("Blah " + String(light)); //Serial.println(); for (int led = 0; led < numLeds; led++) { int cVal = 0; if (led <= light) { cVal = 5; } led_array[led].setRGB(cVal,cVal,cVal); FastLED.show(); } } ////////////////////////////////////////////////////////////////////////////// void moveMPH(int inMPH) ///function to move motor to the mph detected and displays information on the screen { // MPH = inMPH; //lcd.clear(); //lcd.setCursor(0, 0); //lcd.print (String("MPH= ") + inMPH); //lcd.setCursor(0, 1); //lcd.print (String("Old MPH= ") + OldMPH); //lcd.setCursor(0, 2); //lcd.print (String("Difference= ") + (inMPH - OldMPH)); //Serial.print(OldMPH - inMPH); //Serial.println(); /// will need changing for interrupted calls for faster mph updating. Will need a seporate var holding current mph or step count possision if (OldMPH < inMPH) { for (int i = 0; i < (inMPH - OldMPH); i++) { mph_stepper.step(-StepsPerMPH); updateMPHled((inMPH)); // StepsPerMPH) + (OldMPH / StepsPerMPH) ); } } else { for (int i = 0; i < (OldMPH - inMPH); i++) { mph_stepper.step(StepsPerMPH); updateMPHled((inMPH)); // StepsPerMPH) + (OldMPH / StepsPerMPH) ); } } OldMPH = inMPH; } ///////////////////////////////////////////////////////////////////////// void ZeroHome() { while (digitalRead(HomeBTN)== HIGH) { mph_stepper.step(11); } OldMPH = 0; } //////////////////////////////////////////////////////////////////////// void setup() { mph_stepper.setSpeed(speed); FastLED.addLeds(led_array,numLeds); pinMode(HomeBTN, INPUT_PULLUP); //Serial.begin(9600); /// for serial feedback /// setting up LCD during testing //lcd.begin (); //lcd.backlight(); //lcd.clear(); /// Current starting demo/homing code, to be replaced with reed detection at 0 and led demos. ZeroHome(); //for (int i = 0; i < (mphRange / 10) + 1; i++) //{ // moveMPH(i * 10); // //delay(200); //} //delay(1000); //for (int i = (mphRange / 10) ; i >= 1; i--) //{ // moveMPH(i * 10); // //delay(200); //} // ZeroHome(); // delay(1000); } ////////////////////////////////////////////////////////////////////////////// void loop() { //lcd.setCursor(0, 3); //lcd.print (String(digitalRead(HomeBTN))); //MPH = random(0, mphRange + 1); // to be replaced by code that calculates MPH // if (MPH < 0) // { // ZeroHome(); // } // else // { // moveMPH(MPH); // } moveMPH(0); delay(100); moveMPH(80); delay(100); }

Ореховый
Вторник 26 июля 2016 г., 17:35
На самом деле я думаю, это быстро светодиодная библиотека...

Стивестронг
Вторник 26 июля 2016 г. 18:05
Я не думаю, что какая -либо из ступени и быстро светодиодной библиотеки была еще протестирована/перенесена в STM32Duino, так что сейчас ваша работа - тестировать и отлаживать :)

Эдогальдо
Вт 26 июля 2016 г. 18:44
Черная писала:На самом деле я думаю, это быстро светодиодная библиотека...

Мадиас
Вторник 26 июля 2016 г. 18:50
«Фаст» - это действительно монстр библиотеки. Желаю удачи узнать это....
Но: если он управляется SPI, я почти уверен, что это как -то связано с неверным разделителем часов.
Кандидат: https: // github.com/fastled/быстро/дерево ... /arm/stm32 (Я не могу получить доступ к GitHub в данный момент, я вижу только розовый (только розовый (!) злой(!) единорог.....Wuahaa..)
Вы должны сравнить каждый отдельный код (модуль) с вашим ООН, чтобы узнать «замедленную часть».

Ореховый
Вт 26 июля 2016 г. 18:51
Мотор 5V работает с адаптера 6 В, который проходит через ULN2003APC... Это многоадаптер на базе автомобиля, который выходит из запасного 12 В: p Im в настоящее время не хватает денег, так что не покупать новый адаптер.

Не волнуйтесь, его изолированная форма Maple Mini напряжение.

Ох, а что касается отладчика.... Лол, я действительно не так хорош. До этого моим опытом кодирования была VBA: P

Я также не знаю C ++, что хорошо tbh. Я могу разрабатывать вещи и Google каждый вызов и функция C ++, но некоторые из основных синтаксисов действительно теряются на мне. Например, я все еще не могу понять, что за это-> является... Даже когда я гуглю об этом и читаю объяснения, я все еще не понимаю.

Так что да, писать мою собственную библиотеку светодиодного контроллера, довольно не так.

Ореховый
Вт 26 июля 2016 г., 19:00
Мадиас написал:«Фаст» - это действительно монстр библиотеки. Желаю удачи узнать это....
Но: если он управляется SPI, я почти уверен, что это как -то связано с неверным разделителем часов.
Кандидат: https: // github.com/fastled/быстро/дерево ... /arm/stm32 (Я не могу получить доступ к GitHub в данный момент, я вижу только розовый (только розовый (!) злой(!) единорог.....Wuahaa..)
Вы должны сравнить каждый отдельный код (модуль) с вашим ООН, чтобы узнать «замедленную часть».

Мадиас
Вт 26 июля 2016 г., 19:01
Вы можете просто искать альтернативную библиотеку. Есть много неопиксельных (он же WS2812) библиотеки там. (Я думаю, что я успешно использовал библиотеку Neo-Pixel Adafruit, но я не могу вспомнить).
Просто для одного теста:
Не могли бы вы подключить USB к вашему проекту и просто держать серийный монитор открытым? (USB -сериал замедляет всю систему при особых обстоятельствах, в основном забытым сериалом.Печать ») Если это намного быстрее, найдите каждый сериал.xxx даже в библиотеках.

Мадиас
Вт 26 июля 2016 г., 19:04
SPI.SetClockDivider (DierVervalue)

DierViderue может быть: SPI_CLOCK_DIV2 SPI_CLOCK_DIV4 SPI_CLOCK_DIV8 SPI_CLOCK_DIV16 SPI_CLOCK_DIV32 SPI_CLOCK_DIV64 SPI_CLOCK_DIV128 SPI_CLOCK_DIV256

Ореховый
Вторник 26 июля 2016 г. 22:46
Хм, я получаю SPI, не был объявлен в этой ошибке области... Это INA -специфическая библиотека?


Игнорировать, что нашел библиотеку... и это не имеет никакого значения... Я думаю, что я должен попробовать другую библиотеку

Zoomx
Ср. 27 июля 2016 г. 6:15
Черная писала:Хм, я получаю SPI, не был объявлен в этой ошибке области... Это INA -специфическая библиотека?

Мадиас
Ср. 27 июля 2016 г., 7:49
Как я писал: вы должны искать в библиотеках для каждого, связанного с «SPI», а не в эскизе.
У библиотеки Fastwire есть дополнительная часть кода STM32, но я уверен, что она была написана не для STM32Duino, а MBED или что -то в этом роде. Мне просто интересно, что библиотека компилирует. Может быть, в режиме Soft SPI - вы должны посмотреть на многословный выход IDE, если есть какие -либо «предупреждающие» сообщения.

cat_enabler
Вт 17 апреля 2018 г. 14:28
@Nutsy, просто хотел сказать, что я испытываю ту же проблему с медленной анимацией светодиодов. Я вижу, что вы используете неопиксели, которые представляют собой светодиодный чипсет без часов. Если я запускаю часовой светодиодный чипсет, такой как APA102 (DotStar), то анимация работает на правильной скорости. При вождении неопикселей тот же код анимации будет работать на половину быстрого на Maple Mini, как и на Uno. Будет держать вас в курсе, если я найду решение.

Недостаток STM32F103 до 48 МГц