Новичок просит помощи! mega 2560
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Новичок просит помощи! mega 2560
То есть теперь скорость обновления данных на стороне питона нормальная? Я правильно понимаю?
Re: Новичок просит помощи! mega 2560
Да, скорость оболденная! Я не успеваю нажать на кнопку так, чтоб в терминале выскочила только одна единица. За одно короткое нажатие выскакивает 2-3 единички!
Re: Новичок просит помощи! mega 2560
Получилось отправить пакетом данные о состоянии 5и входов, питон их принимает. И выводит так:
Единица - при нажатии кнопки соответствующего пина.
Вот скрипты:
Для ардуино:
Для питона:
В питоне в начале бесконечного цикла сделал отправку в порт пробела, чтоб ардуина поняла когда начинать передавать данные, а то получалось что ардуина начинала передавать данные как только подключить питание, а питон не всегда попадал в начало цикла и получался сдвиг данных!
Теперь вопрос: мега по команде от компа(отправка пробела) отправляет пакет данных компу! Как биты этого пакета присвоить разным булиевым переменным(к примеру х1, х2, х3, х4 и х5)?
Код: Выделить всё
00000
00000
10000
10000
01000
01000
Вот скрипты:
Для ардуино:
Код: Выделить всё
int myPins[] = {2, 3, 4, 5, 6}; // определение входных пинов
void setup(){
Serial.begin(9600); // установка скорости порта
}
void loop(){
if (Serial.available()) { // проверка подключения к порту
int i;
for (i = 0; i < 5; i = i + 1) { // перебираем входа
Serial.print(digitalRead(myPins[i])); // отправляем в порт
}
delay(50); // делаем паузу
}
}
Код: Выделить всё
## import the serial library
import serial
import time
import string
## open the serial port that your arduino
## is connected to.
PORT = "/dev/ttyACM0"
ser = serial.Serial(PORT, 9600, timeout=2)
while 1:
ser.write(' ')
data = ser.read(5)
print str(data)
## close the port and end the program
Теперь вопрос: мега по команде от компа(отправка пробела) отправляет пакет данных компу! Как биты этого пакета присвоить разным булиевым переменным(к примеру х1, х2, х3, х4 и х5)?
Re: Новичок просит помощи! mega 2560
Прошу посмотреть этот скетч:
при отправке с монитора порта "1" светодиод загорается, но на экран выводит почему-то "49", при отправке "0" светодиод гаснет и на экран выводит "48"
Почему так?
З.Ы. ардуино-нано и экран LCD-2004
Код: Выделить всё
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int in=0;
int ledPin=13;
void setup()
{
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
}
void loop()
{
if (Serial.available() )
{
in = Serial.read();
lcd.setCursor(4, 1);
lcd.print("X = " );
lcd.print(in);
delay(10);
if (in=='1')
{
digitalWrite(ledPin, HIGH);
}
if (in=='0')
{
digitalWrite(ledPin, LOW);
}
}
}
Почему так?
З.Ы. ардуино-нано и экран LCD-2004
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Новичок просит помощи! mega 2560
Объявите переменную in как char весто int.
Re: Новичок просит помощи! mega 2560
Сработало! Спасибо!
Re: Новичок просит помощи! mega 2560
Так, с выводом на экран разобрался.
Но при передаче 2х и более значений, он отображает их поочереди. Теперь, чтоб передавать многозначные значения(к примеру abc,de), надо будет разбивать его на отдельные цифры, формировать пакет и передавать... и нужна еще метка. В итоге получится пакет: метка координаты "Х", 3 цифры целой части и 2 дробной. И мы получается пакет из 6 знакомест для одной координаты. При получении данных ардуина ищет метку и забивает в один массив следующие за ней 5 значений, после 1е значение умножаем на 100, 2е на 10, 4е на 0.1, 5е на 0.01 и выводим сумму всех значений на экран...
Нужна помощь, как это правильно организовать?
Или есть какой нибудь способ по-проще?
Но при передаче 2х и более значений, он отображает их поочереди. Теперь, чтоб передавать многозначные значения(к примеру abc,de), надо будет разбивать его на отдельные цифры, формировать пакет и передавать... и нужна еще метка. В итоге получится пакет: метка координаты "Х", 3 цифры целой части и 2 дробной. И мы получается пакет из 6 знакомест для одной координаты. При получении данных ардуина ищет метку и забивает в один массив следующие за ней 5 значений, после 1е значение умножаем на 100, 2е на 10, 4е на 0.1, 5е на 0.01 и выводим сумму всех значений на экран...
Нужна помощь, как это правильно организовать?
Или есть какой нибудь способ по-проще?
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Новичок просит помощи! mega 2560
Не очень понял задачу, которую требуется решить. Что такое многозначные значения?
Re: Новичок просит помощи! mega 2560
Ситуация такая: Я пытаюсь сделать пульт на ардуине для станка с чпу. На экране пульта должны отображаться координаты по 3м осям и скорость шпинделя! Координата - это число из 3х цифр целой части и 2х цифр дробной(к примеру 123.45). Это я и назвал многозначным значением. И это значение надо передать с компа и отобразить на экране пульта!
Как это мне видится, я описал здесь:
Как это мне видится, я описал здесь:
Если есть более простой путь реализации данной задачи, буду только рад!Тима писал(а):Так, с выводом на экран разобрался.
Но при передаче 2х и более значений, он отображает их поочереди. Теперь, чтоб передавать многозначные значения(к примеру abc,de), надо будет разбивать его на отдельные цифры, формировать пакет и передавать... и нужна еще метка. В итоге получится пакет: метка координаты "Х", 3 цифры целой части и 2 дробной. И мы получается пакет из 6 знакомест для одной координаты. При получении данных ардуина ищет метку и забивает в один массив следующие за ней 5 значений, после 1е значение умножаем на 100, 2е на 10, 4е на 0.1, 5е на 0.01 и выводим сумму всех значений на экран...
Нужна помощь, как это правильно организовать?
Или есть какой нибудь способ по-проще?
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Новичок просит помощи! mega 2560
Используйте метод lcd.print(x,n), где:
x - переменная типа float в которой хранится значение для вывода на LCD
n - количество знаков после точки при выводе на LCD
Попробуйте следующий рецепт:
x - переменная типа float в которой хранится значение для вывода на LCD
n - количество знаков после точки при выводе на LCD
Попробуйте следующий рецепт:
Код: Выделить всё
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Измените в соответствии с вашим подключением
void setup()
{
lcd.begin(20, 2); // Укажите размеры вашего ЖКИ
}
void loop()
{
lcd.clear();
float x = 123.123;
float y = 123.123;
float z = 123.123;
float s = 123.123;
lcd.setCursor(0, 0);
lcd.print("X="); lcd.print(x,2);
lcd.setCursor(10, 0);
lcd.print("Y="); lcd.print(y,2);
lcd.setCursor(0, 1);
lcd.print("Z="); lcd.print(z,2);
lcd.setCursor(10, 1);
lcd.print("S="); lcd.print(s,2);
delay(100);
}