Ви не увійшли.
Сторінки 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 режима начинается цикличная прокрутка фразы "Количество шагов и направлеие(для влево введите количество шагов со знаком -(минус): " и всё,не реагирует больше.
Пускай даже так.Если доделаю сам то конечно же здесь или ещё где-то выложу.
Ну за деньги думаю много добровольцев было бы уже.Суть же не в том чтобы создать мне лично и всё.А для общего пользования,думаю такая библиотека или пример для Arduino был бы полезен.Та как оказывается китайцы пихают эти чипы во многие устройства.
Нашел наконец пример с использованием этого контроллера.EC_LEDdriver.zip
Кто может взглянуть?Может кто сможет помочь переделать под ардуино нано,уж очень хочется сделать.
А что если на мультиплексорах построить систему?Я правда только раз с ними работал,года так 4 назад.Кто чаще сталкивается с ними,подскажите пожалуйста.
Мда...думал есть есть какое-то микросхемы,которые облегчат жизнь,подключил допустим к микроконтроллеру а и уже она выдает тебе в шестнадцатиричной или в десятичной системе...как двоично десятичный дешифратор только наоборот получается.
Понял,попробую.Ещё один вопрос чисто по железу:существует ли какой нибудь декодер или дешифратор чтобы можно было подключить его уже после самого драйвера MC2102D на контакты семисегментного индикатора,а его уже к Nano и им читать показания которые отображаются?
Можете детальней объяснить как это сделать? Я не могу похвастаться пока большими навыками,по этому....
Привет друзья.Нашел для себя заморочку но которую очень хочу воплотить в жизнь.
Есть у меня плата от какого-то терморегулятора,или ещё чего,вобщем это не важно,на нём есть светодиодный индикатор с драйвером 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 и выводить допустим в терминал или на дисплей в понятном для меня человека виде?Как это осуществить?
По сути мне нужно слушать эти порты,так?Но как?
Сылка на библиотеку
Вот,спасибо! Понимаю уже что то что я написал никуда не годится,я ж его использовал из-за того что он мне наиболее подходил по функционалу,но как оказалось с этого слепить невозможно ничего.
Я не обижался на Вас и нинакого,просто хрен не люблю,да и только)
Да не на что обижатся,если человек не может объяснить а сразу порит гарячку и выкидывает своё фё в мою сторону.
Да,я не програмист от Бога и ну могу вот так с ходу взять и накатать 1000 строк за 5 минут и без ошибок,но поверьте, и вы не идеальны.
NoName,я понимаю что можно было бы написать с деньгами всё что угодно,и даже знаю к кому обратится и сколько стоит.Просто надеялся что подскажут,может помгут и без этого,вроде как на то и форум нужен...Или форумы у нас тупо для сшибания денег?
Вообщем,извините что так много букв,и не по теме.
Надеюсь у qwone в жизни всё будет хорошо.
Здравствуйте.В програмировании я не силён поетому и пришел к Вам за ответом.
Есть скетч для енкодера
/* Пины, к которым подключен энкодер */
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
-> (повернул ручку на один щелчёк в право)
а сейчас он только присылае когда сделан поворот.
Подскажите как это сделать желательно с примером так как уже вторые сутки не могу добится нужного результата
Сторінки 1