#1 Програмування Arduino » Не могу сделать общение в Мониторе порта » 2019-04-01 17:25:06

Romanovskiy
відповідей: 1

Здравствуйте друзья.Пробую написать скетч,хочу управлять шаговиком через монитор порта.
Если с библиотекой и работой с ней уже разобрался то с монитором порта всё туго...А дело в том что хочу сделать такое себе меню с несколькими вариантами работы.Но ничего не получается.Помогите понять что сделал не так?
КОД:

#include <Arduino.h>

//Параметры двигателя
#define MOTOR_STEPS 200
#define RPM 120
#define DIR 8
#define STEP 9

//Инициализация параметров драйвера
#include "DRV8825.h"
#define MODE0 10
#define MODE1 11
#define MODE2 12
DRV8825 stepper(MOTOR_STEPS, DIR, STEP, MODE0, MODE1, MODE2);

//Переменные
int Mode = 0;
int Impulses = 0;
int Speed = 0;
int Angle1 = 0;
int Angle2 = 0;

void setup() {
    Serial.begin(115200);
    stepper.begin(RPM);
    stepper.enable();
    Serial.println("Выберите режим 1-4:");
    doMode();
}

void loop() {
    doMode();   
}

void doMode(){
  if (Serial.available() > 0) {  //если есть доступные данные
    Mode = Serial.parseInt();  // считываем байт
    Serial.print("Выбран режим: ");   // отсылаем то, что получили
    Serial.println(Mode);}
    else if (Mode > 4){
       Mode = 0;
       Serial.println("Выбран несуществующий режим!");
    }
   
  switch (Mode){
 
//Логика режима 1:
    case 1:
          Serial.println("Количество шагов и направлеие(для влево введите количество шагов со знаком -(минус): ");
          if (Serial.available()) {  //если есть доступные данные
           
           Impulses = Serial.parseInt();
             Serial.print("Количество шагов и направлеие:");
             Serial.println(Impulses);
          if (Serial.available()) {  //если есть доступные данные
            Serial.print("Установите скорость: ");
           Speed = Serial.parseInt();
             Serial.print("Cкорость:");
             Serial.println(Speed);}}
          break; 
         
//Логика режима 2:
     case 2:
     
          Serial.println("Установите скорость: ");
          if (Serial.available() > 0) {  //если есть доступные данные
          Speed = Serial.parseInt();
          Serial.print("Cкорость:");
          Serial.println(Speed);}
          stepper.setMicrostep(4);  // Set microstep mode to 1:1
          stepper.rotate(Impulses);
          break;   

Вся проблема в том что после выбора например 1 режима начинается цикличная прокрутка фразы "Количество шагов и направлеие(для влево введите количество шагов со знаком -(минус): " и всё,не реагирует больше.

#2 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-13 19:56:43

Пускай даже так.Если доделаю сам то конечно же здесь или ещё где-то выложу.

#3 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-13 19:04:28

Ну за деньги думаю много добровольцев было бы уже.Суть же не в том чтобы создать мне лично и всё.А для общего пользования,думаю такая библиотека или пример для Arduino был бы полезен.Та как оказывается китайцы пихают эти чипы во многие устройства.

#4 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-13 15:43:15

Нашел наконец пример с использованием этого контроллера.EC_LEDdriver.zip
Кто может взглянуть?Может кто сможет помочь переделать под ардуино нано,уж очень хочется сделать.

#5 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-13 14:45:54

А что если на мультиплексорах построить систему?Я правда только раз с ними работал,года так 4 назад.Кто чаще сталкивается с ними,подскажите пожалуйста.

#6 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-13 11:29:19

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

#7 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-12 22:13:19

Понял,попробую.Ещё один вопрос чисто по железу:существует ли какой нибудь декодер или дешифратор чтобы можно было подключить его уже после самого драйвера MC2102D на контакты семисегментного индикатора,а его уже к Nano и им читать показания которые отображаются?

#8 Re: Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-12 20:55:13

Можете детальней объяснить как это сделать? Я не могу похвастаться пока большими навыками,по этому....

#9 Програмування Arduino » Считывание данных с микроконтроллера » 2018-10-12 18:52:41

Romanovskiy
відповідей: 12

Привет друзья.Нашел для себя заморочку но которую очень хочу воплотить в жизнь.
Есть у меня плата от какого-то терморегулятора,или ещё чего,вобщем это не важно,на нём есть светодиодный индикатор с драйвером MC2102D,который подключен к неизвестному микроконтроллеру.Общаются они как выяснилось по SPI вполудуплексном режиме. Подключаются контактами dio clk stb.Вроде как оно всё понятно,подключил к Nano,закинул скетч:

#include <TM1638.h>
// define a module on data pin 8, clock pin 9 and strobe pin 10
TM1638 module(8, 9, 10);
unsigned long a=1;

void setup()
{
}

void loop()
{
for (a=1; a<=100; a++)
{
module.setDisplayToDecNumber(a,0,false);
delay(100);
}
module.setDisplayToString("Complete");
delay(1000);
}

Знаю что библиотека для другого,но она заработала.Если изменить немного библиотеку то будет то что нужно.
НО! Меня интересует немного другое:
Могу ли я как-то принимать данные которые шлёт микроконтроллер на драйвер,и уже расшифровывать у себя в Nano и выводить допустим в терминал или на дисплей в понятном для меня человека виде?Как это осуществить?
По сути мне нужно слушать эти порты,так?Но как?
Сылка на библиотеку

#10 Re: Програмування Arduino » Обнуление значений энкодера » 2017-07-04 18:36:42

Вот,спасибо! Понимаю уже что то что я написал никуда не годится,я ж его использовал из-за того что он мне наиболее подходил по функционалу,но как оказалось с этого слепить невозможно ничего.
Я не обижался на Вас и нинакого,просто хрен не люблю,да и только)

#11 Re: Програмування Arduino » Обнуление значений энкодера » 2017-07-04 12:08:06

Да не на что обижатся,если человек не может объяснить а сразу порит гарячку и выкидывает своё фё в мою сторону.
Да,я не програмист от Бога и ну могу вот так с ходу взять и накатать 1000 строк за 5 минут и без ошибок,но поверьте, и вы не идеальны.
NoName,я понимаю что можно было бы написать с деньгами всё что угодно,и даже знаю к кому обратится и сколько стоит.Просто надеялся что подскажут,может помгут и без этого,вроде как на то и форум нужен...Или форумы у нас тупо для сшибания денег?
Вообщем,извините что так много букв,и не по теме.
Надеюсь у qwone в жизни всё будет хорошо.

#12 Програмування Arduino » Обнуление значений энкодера » 2017-07-04 01:20:01

Romanovskiy
відповідей: 5

Здравствуйте.В програмировании я не силён поетому и пришел к Вам за ответом.
Есть скетч для енкодера
/* Пины, к которым подключен энкодер */
enum { ENC_PIN1 = 2, ENC_PIN2 = 3 };
void setup()
{
pinMode(ENC_PIN1, INPUT);
pinMode(ENC_PIN2, INPUT);

Serial.begin(9600);
}


unsigned graydecode(unsigned gray)
{
unsigned bin;

for (bin = 0; gray; gray >>= 1)
    bin ^= gray;

return bin;
}
   
void loop()
{
static uint8_t previous_code = 0; // предыдущий считанный код

uint8_t gray_code = digitalRead(ENC_PIN1) | (digitalRead(ENC_PIN2) << 1),
         code = graydecode(gray_code);

if (code == 0)
{
   if (previous_code == 3)
     Serial.println("->");
   else if (previous_code == 1)
     Serial.println("<-");
     }

previous_code = code;
delay(50);
}
Этот скетч меня всем устраивает кроме одного,при выводе значение в монитор порта мне нужно чтобы данные обнулялись и сыпались с интервалом 50мс. Тоесть
примерно должно быть так
0
0
<-     (повернул ручку на один щелчёк в лево)
0
<-     (повернул ручку на один щелчёк в лево)
0
0
->     (повернул ручку на один щелчёк в право)

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

Підвал форуму