Как сделать код правильным во всех смыслах этого понятия, контроллер stm32f103c8t6

ingfa
Offline
Зарегистрирован: 15.09.2018
#include <Wire.h> 
      
          

int timer = 1000;
void setup() {
  Serial.end();// дефолтовый USBCDC не нужен
  disableDebugPorts();//отключить режим дебага
  pinMode(PA0, OUTPUT);
  pinMode(PA1, OUTPUT);
  pinMode(PA2, OUTPUT);
  pinMode(PA3, OUTPUT);
  pinMode(PA4, OUTPUT);
  pinMode(PA5, OUTPUT);
  pinMode(PA6, OUTPUT);
  pinMode(PA7, OUTPUT);
  pinMode(PA8, OUTPUT);
  pinMode(PA9, OUTPUT);
  pinMode(PA10, OUTPUT);
  pinMode(PA11, OUTPUT);
  pinMode(PA12, OUTPUT);
  pinMode(PA15, OUTPUT);

  pinMode(PB0, OUTPUT);
  pinMode(PB1, OUTPUT);
  pinMode(PB2, OUTPUT);
  pinMode(PB3, OUTPUT);
  pinMode(PB4, OUTPUT);
  pinMode(PB5, OUTPUT);
  pinMode(PB6, OUTPUT);
  pinMode(PB7, OUTPUT);
  pinMode(PB8, OUTPUT);
  pinMode(PB9, OUTPUT);
  pinMode(PB10, OUTPUT);
  pinMode(PB11, OUTPUT);
  pinMode(PB12, OUTPUT);
  pinMode(PB13, OUTPUT);
  pinMode(PB14, OUTPUT);
  pinMode(PB15, OUTPUT);
  pinMode(PC13, OUTPUT);
  pinMode(PC14, OUTPUT);
  pinMode(PC15, OUTPUT);
  
}

// the loop function runs over and over again forever
void loop() {
   digitalWrite(PA0, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA0, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA1, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA1, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA2, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA3, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA3, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA4, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA4, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA5, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA5, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA6, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA6, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA7, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA7, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA8, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA8, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA9, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA9, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA10, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA10, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA11, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA11, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA12, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA12, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PA15, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PA15, LOW);    // turn the LED off by making the voltage LOW
  

  digitalWrite(PB0, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB0, LOW);    // turn the LED off by making the voltage LOW
 
  digitalWrite(PB1, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB1, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB2, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB3, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB3, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB4, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB4, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB5, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB5, LOW);    // turn the LED off by making the voltage LOW
 
  digitalWrite(PB6, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB6, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB7, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB7, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB8, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB8, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB9, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB9, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB10, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB10, LOW);    // turn the LED off by making the voltage LOW
 
  digitalWrite(PB11, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB11, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB12, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB12, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB13, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB14, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB14, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PB15, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PB15, LOW);    // turn the LED off by making the voltage LOW
  

  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
 
  digitalWrite(PC14, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PC14, LOW);    // turn the LED off by making the voltage LOW
  
  digitalWrite(PC15, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(timer);              // wait for a second
  digitalWrite(PC15, LOW);    // turn the LED off by making the voltage LOW
    
  
  
  }
b707
Offline
Зарегистрирован: 26.05.2017

пожалуйста, поподробнее - что такое "правильный во всех смыслах" код?

Код, приведенный выше - можно записать примерно в 15 раз короче (строк 10-12), если организовать пины в массив и перебирать их в цикле

ingfa
Offline
Зарегистрирован: 15.09.2018

Убрать delay. Запихнуть как то все в массив или куда то еще и в цикле итерировать. Знаю только Python

b707
Offline
Зарегистрирован: 26.05.2017

ingfa пишет:

Убрать delay. Запихнуть как то все в массив или куда то еще и в цикле итерировать. Знаю только Python

сколько платите?

nik182
Offline
Зарегистрирован: 04.05.2015

А в чем смысл 31 секунду сидеть и смотреть как переключаются светодиоды? И почитайте про BRR BSRR регистры. Можно просто сдвигом единички всё включить и выключить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ingfa пишет:

Как сделать код правильным во всех смыслах этого понятия

Хороший вопрос!

Похоже, у нас появился свой Шекспир!

ingfa
Offline
Зарегистрирован: 15.09.2018

Все просто, никаких светодиодов, это прибор Рагеля, электроды в количестве 32 штук касаются тела, поочередно на каждом из них появляется ток 50-100мка. Почему поочередно, потому что при подаче напряжения на все электроды ток найдет самый короткий путь. 

В планах прикрутить кнопки для увеличения и уменьшения промежутка переключения электродов. Но программа, как я понял дубовая( просто переделанная мною из blink). К ней кнопки не захотелось приделывать.   

negavoid
Offline
Зарегистрирован: 09.07.2016

Прогресс, однако! Раньше электротоком больных лечили принудительно, а теперь они делают это сами, добровольно :)

MaksVV
Offline
Зарегистрирован: 06.08.2015

сурово...

nik182
Offline
Зарегистрирован: 04.05.2015

Не получится с током. На напряжении 3 вольта кожу не пробьёт. Хотя бы до 12 , а лучше до 36 поднимать надо и токоограничивающие резисторы. А это схему городить. Тогда уж проще регистры поставить и их двоичным кодом крутить. 

ingfa
Offline
Зарегистрирован: 15.09.2018

Да я так и сделал плюс с порта контроллера идет на базу транзистора на эмитере минус 27 вольт с преобразователя. плюс общий через стабилизатор тока на тело. с открытых колекторов выходы на электроды. Мне бы кто с программой помог?

ingfa
Offline
Зарегистрирован: 15.09.2018

сурово 50мка ? Микротоки

Densl
Offline
Зарегистрирован: 28.11.2018

В СТМ не все физические пины можно использовать для ввода/вывода без риска что либо сломать.

astwo
Offline
Зарегистрирован: 10.07.2019

Это скорее электронная качалка для лентяев. Фигуру рельефную хочется, а время на это потратить лень. Работает как лапка лягушки. Подал ток мышца стянулась.
С программой не помогу, так как на смартфон захотят прикрутить. Я же говорил лентяи делают.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ingfa пишет:

Как сделать код правильным во всех смыслах этого понятия

Хороший вопрос!

Похоже, у нас появился свой Шекспир!

не один я на ардуино замахнулся )))

Кто тут, что имел против генератора для катушки Мишина? ;-)))

nik182
Offline
Зарегистрирован: 04.05.2015

ingfa пишет:
Да я так и сделал плюс с порта контроллера идет на базу транзистора на эмитере минус 27 вольт с преобразователя. плюс общий через стабилизатор тока на тело. с открытых колекторов выходы на электроды. Мне бы кто с программой помог?

И что работает? Как то из описания не очень понятно. Схему нарисовать можно? Как по мне таким включением транзистора процессором управлять не получится. 

SLKH
Offline
Зарегистрирован: 17.08.2015

nik182 пишет:

ingfa пишет:
Да я так и сделал плюс с порта контроллера идет на базу транзистора на эмитере минус 27 вольт с преобразователя. плюс общий через стабилизатор тока на тело. с открытых колекторов выходы на электроды. Мне бы кто с программой помог?

И что работает? Как то из описания не очень понятно. Схему нарисовать можно? Как по мне таким включением транзистора процессором управлять не получится. 

см. https://www.google.ru/search?q=прибор+Рагеля&newwindow=1&client=opera&hs=uvm&tbm=isch&source=iu&ictx=1&fir=_Ef9271oKjmXzM%253A%252CqcAeiarU-3fn6M%252C_&vet=1&usg=AI4_-kRUhTNfw5fk7ryOiZ2rgd38NNaWBw&sa=X&ved=2ahUKEwjd67r2s_3lAhUxiYsKHWZBCHwQ9QEwEHoECAcQCQ#imgrc=_Ef9271oKjmXzM:

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

ИМХО, обсуждать лучше бы в ветке про катушку мишина, той ветке всё равно уже ничего не повредит.

 

ingfa
Offline
Зарегистрирован: 15.09.2018

какая разница что я выбрал для изучения основ. У нас демократия вроде?

b707
Offline
Зарегистрирован: 26.05.2017

ingfa пишет:
какая разница что я выбрал для изучения основ.

если это "для изучения" - так что ж вы просите кого-то написать вам код? Вы так сами ничему не научитесь. Почитайте про массивы и положите пины туда - только этим уже уменьшите код в 10 раз

SLKH
Offline
Зарегистрирован: 17.08.2015

astwo пишет:
Это скорее электронная качалка для лентяев.
скорее разводка для лохов.

ingfa
Offline
Зарегистрирован: 15.09.2018

Просто низнаю с чего начать. Вернее тормазнулся. Сейчас на ардуино все сделанно уже. Пищалки моргалки дребежалки управлялки. Хочется чего то нового уже. А вдруг заработает. Спине помогло моей после надрыва. А насчет шизофрении так природа тоже эксперемнтирует.

b707
Offline
Зарегистрирован: 26.05.2017

ingfa пишет:
Просто низнаю с чего начать. Вернее тормазнулся. Сейчас на ардуино все сделанно уже.

то есть пост надо понимать так - "самому что-то лень, да и не очень и нужно - сделайте кто-нибудь за меня" ?

В таком разе пользуйтесь тем, что работает - и не трахайте мозг другим

Удачи

ingfa
Offline
Зарегистрирован: 15.09.2018

что почитать

Densl
Offline
Зарегистрирован: 28.11.2018

Я всегда предлагаю начинать с основы основ. С программирования на языке C++. Ведь далеко не секрет что среда Ардуино использует его в чистом виде. Этот язык не прост в освоении и часто требуется несколько лет. Поищите книги Керриган Ритчи, можно почитать что-то из серии C++ для чайников для начала.