Перейти к содержанию

Помогите с переносом кода с ардуино на STM!


Гость Ярослав

Рекомендуемые сообщения

Вот код:

//#include <CyberLib.h>
//#include <SPI.h>
#include <SdFat.h>
SdFat SD;
//#include <SD.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

#define   PIXEL_NUM            150 // столько светодиодов в сборке
#define PIN 2
Adafruit_NeoPixel strip = Adafruit_NeoPixel(150, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(15, 10, PIN,
  NEO_MATRIX_BOTTOM     + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

int x    = matrix.width();
String dd;
File myFile;

void setup() {
//DDRB = DDRB | B00000100;
pinMode(10,OUTPUT);

FileWork();
  matrix.cp437(true);
//  strip.begin();
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(200);
  matrix.setTextColor(matrix.Color(245,0,0));
}


void loop() {

//Start
colorWipe(strip.Color(255, 0, 0), 100); 
   showText(dd,matrix.Color(245,0,0), 100, (dd.length()*3+18));
snake ( 200);
stars(100, 30);
//  FullRainbow(60);
rainbow(60); 
//  showText(dd,matrix.Color(0,255,0), 60, 100);
theaterChase(strip.Color(255, 255, 255), 30);
 // theaterChase(strip.Color(255, 255, 255), 30);
//End  
}

void FileWork()
{
//    SDClass SD;
//   SD.begin();
  if (!SD.begin(4)) {
    //Serial.println("initialization failed!");
    return;
  }

  // open the file for reading:
  myFile = SD.open("text.txt");
  if (myFile) {
 //myFile.seek(0);
dd=readLine();
dd=dd.substring(4, dd.length());

    myFile.close();
  } else {
    // if the file didn't open, print an error:
  }   //SD.end();

}


// ----------- Заполнение цветом  --------------
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}
// ----------- Заполнение цветом  --------------

// ----------- Змейка --------------
void snake ( byte t)
{
  for (byte x=0; x<150; x++)
  {
    strip.setPixelColor(x,255,255,255);
    strip.setPixelColor(x-1,80,80,80);
    strip.setPixelColor(x-2,30,30,30);
    strip.setPixelColor(x-3,5,5,5);
    strip.setPixelColor(x-4,0,0,0);
    strip.show();
    delay_ms (t);
  }
}
// ----------- Змейка --------------

// -------- Бегущая строка -----------
void showText( String t, uint16_t color, byte wait, byte len){
  matrix.setTextColor(color);
  while (--x > (len*(-1)))
  {
    matrix.fillScreen(0);
    matrix.setCursor(x, 0);
    matrix.print(utf8rus(t));
    matrix.show();
    delay_ms(wait);
  } 
    x = matrix.width(); 
}
 // -------- Бегущая строка -----------
/*
// --------- FULLRAINBOW --------------- 
void FullRainbow(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(j & 255));
    }
    strip.show();
    delay(wait);
  }
}
// --------- FULLRAINBOW --------------- 
*/
void rainbow(byte wait) {
  uint16_t i, j;

  for(j=0; j<255; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay_ms(wait);
  }
}
void star(byte wait) {
  byte i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay_ms(wait);
  }
}

void stars (byte t, byte pause){
  byte x=0;
  byte y=0;
  while (t > 0){
    for ( byte i=0; i<strip.numPixels(); i++){
      y = random(0,2);
      if (y>0) 
      {
        strip.setPixelColor(i,255,255,255);
      }
      else 
      {
        strip.setPixelColor(i,0, 0, 0);
      }
    }
    strip.show();
    t--;
    delay_ms(pause); 
    
  }
  
}

// ----------- Сияющий эффект ---------------
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<50; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay_us(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
// ----------- Сияющий эффект ---------------

// ------------Отображение русского шрифта------------- 
String utf8rus(String source)
{
  byte i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;

  while (i < k) {
    n = source; i++;

    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
// ------------Отображение русского шрифта------------- 


String readLine() {
//File myFile;
   String received = "";
   char ch;
   while(myFile.available()){
    ch = myFile.read();
    if(ch == '\n') {
     return String(received);
    } else {
     received+=ch;
    }
   }
   return "";
}


// ------------ Генератор радуги ------------- 
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

 

Этот код написан под Ардуино. Но его необходимо перенести на STM32 Помогите, пожалуйста!  проблема в том, что нет библиотеки NEOPIXEL для этой платформы...

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Для меня наверное лучше купить готовый.. цель повысить чувствительность до 1 mV.. Наверное на Авто стоит покупать , мне бы фотку какую нить..такого активного щупа..))
    • Так на схемах обозначается подключение к сети 220 В.
    • Привет, радионарод! Вот, решил показать, рассказать и дать попробовать свою придумку, как я внешнюю синхронизацию к "ослику" прикрутил. DSO138 уже не так популярен, но кто-то пользуется, кому-то быть может пригодится. Подробной информации по таким доработкам в сети не встречал, так что делюсь, чем сам измыслился. Собственно, схема. Немного фоточек. С "ослика" не пугайтесь, не умею я делать красивые корпуса с красивыми мордами лица к ним. Двухканального функционального генератора с возможностью двигать фазу у меня нет, поэтому какая-то программа-генератор из Интернетов, звуковая карта и DSO138. Смотрим синус, т.к. меандр из звуковухи никакой. Конечно, видна погрешность в измерениях. Прибор-то - игрушка. Да и генератор не блещет точным сигналом. Полноценного аналога внешней синхронизации (как у аналоговых приборов) не получится, но даже в таком виде эта доработка расширяет функционал осциллографа и дает в некоторых случаях возможность изучать два сигнала. Как пользоваться. Из иных доработок. Как видите, дурацкие ползунковые переключатели заменены на сдвоенные галетники на три положения. Кнопки поставлены большие тактовые 12х12 мм. Подпаяны паралельно, старые удалять не нужно. Светодиод тоже в паралель. Питание батарейное, от аккумулятора старого "умнофона". Полтора ампер-часа, наверное. Плата зарядки, плюс повышайка с фильтрами по питанию. Корпус алюминиевый от "не-знаю-как-правильно-называется", там жесткий диск стоял с парой ветродуйчиков. Гетинакс, оргстекло.   Короче, удачи!
    • Тут нет схемы самой Ардуино(но есть второе напряжение 3,3в , схема ниже)   Не вывозит!!!
    • Сорри, вопрос был не вам - исправлено.   И как Вы об этом узнали? Иными словами, можно ли без ПК узнать есть ли в кишках лого какая-либо рабочая программа или память пуста?
    • Мне нужно настраивать мд Квазар Арм там от 7 до 10 кГц.. Посоветуйте как мне поступить лучше?
×
×
  • Создать...