Отправка значения переменника и кнопки в serial-порт. Не работает.
- Войдите на сайт для отправки комментариев
Втр, 28/05/2013 - 13:28
Здравствуйте. Не могли-бы вы ткнуть меня носом, почему не работает программа. Требуется принять значение с 4 аналоговых входов и 6-7 кпопок и отправить в serial-порт. Мне хотя-бы показать по 1 аналоговому и 1 цифровому входу, а дальше я допилю.
Программу пишу первый раз, многое еще не понимаю, а чем дольше читаю, тем больше утопаю в море инфы).
Вот код передатчика
// Передатчик команд управления v0.6
// Органы управления - 4 переменника, 9 кнопок.
// Исполнительные механизмы - 2мотора-вибратора, 1 светодиод
//Цель:
// а)при нажатии кнопки 1-4 отправить в сериал-порт информацию о текущем значении. (кнопка с фиксацмей значения)
// б)при нажатии кнопки 7-12 отправить в сериал-порт информацию о текущем значении. (кнопка без фиксации значения
// в)при вращении ручки потенциометра 1-4 отправить в сериал-порт информацию о текущем значении.
int pot1x = 0; //Обьявляем А0 аналоговый пин считывания показаний потенциометра1 (ось x) (погружение-всплытие)
int pot1y = 1; //Обьявляем А1 аналоговый пин считывания показаний потенциометра1 (ось y) (неиспользуется)
int pot2x = 2; //Обьявляем А0 аналоговый пин считывания показаний потенциометра2 (ось x) (влево-вправо)
int pot2y = 3; //Обьявляем А1 аналоговый пин считывания показаний потенциометра2 (ось y) (вперед-назад)
int knopka1 = 3; //кнопка1 подключена к 3 цифровому контакту (фиксируемая) (освещение 1)
int knopka2 = 4; //кнопка2 подключена к 4 цифровому контакту (фиксируемая) (освещение 2)
int knopka3 = 5; //кнопка3 подключена к 5 цифровому контакту (фиксируемая) (освещение 3)
int knopka4 = 6; //кнопка4 подключена к 6 цифровому контакту (фиксируемая) (освещение 4)
int knopka7 = 7; //кнопка7 подключена к 7 цифровому контакту (манипулятор - расжать)
int knopka8 = 8; //кнопка8 подключена к 8 цифровому контакту (манипулятор - сжать)
int knopka9 = 9; //кнопка9 подключена к 9 цифровому контакту (камера - вверх)
int knopka11 = 10; //кнопка11 подключена к 10 цифровому контакту (камера - вниз)
int knopka12 = 11; //кнопка12 подключена к 11 цифровому контакту (резервная)
int motorPin = 12; //моторы в пульте управления подключены к 12 цифровому контакту
int ledPin = 13; //светодиод в пульте управления подключен к 13 цифровому контакту
void setup()
{
analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта. Значение DEFAULT оставляем, если используем переменные резистры (в моем случае 10ком) (считывание от 0 до 5вольт)
Serial.begin(9600); //Включаем сериал-порт на скорости 9600
pinMode(ledPin, OUTPUT); // Инициализируем 13 выход под светодиод.
pinMode(motorPin, OUTPUT); // Инициализируем 12 выход под вибраторы.
pinMode(knopka1, INPUT); //отмечаем контакт кнопки 1 - как вход
digitalWrite(knopka1, HIGH); // включить подтягивающий резистор к питанию.
pinMode(knopka2, INPUT); //отмечаем контакт кнопки 2 - как вход
digitalWrite(knopka2, HIGH); // включить подтягивающий резистор к питанию.
pinMode(knopka3, INPUT); //...
digitalWrite(knopka3, HIGH);
pinMode(knopka4, INPUT);
digitalWrite(knopka4, HIGH);
pinMode(knopka7, INPUT);
digitalWrite(knopka7, HIGH);
pinMode(knopka8, INPUT);
digitalWrite(knopka8, HIGH);
pinMode(knopka9, INPUT);
digitalWrite(knopka9, HIGH);
pinMode(knopka11, INPUT);
digitalWrite(knopka11, HIGH);
pinMode(knopka12, INPUT);
digitalWrite(knopka12, HIGH);
}
void loop()
{
Serial.write('a'); //метка начала передачи значения канала "а"
Serial.println(analogRead(pot1x), DEC); //выдаст в порт значение потенциометра 1x
Serial.write('b'); //метка начала передачи значения канала "b"
Serial.println(analogRead(pot1y), DEC); //выдаст в порт значение потенциометра 1y
Serial.write('c');
Serial.println(analogRead(pot2x), DEC);
Serial.write('d');
Serial.println(analogRead(pot2y), DEC);
Serial.write('e');
Serial.println(digitalRead(knopka1)); //кнопка 1
Serial.write('f');
Serial.println(digitalRead(knopka2)); //кнопка 2
Serial.write('j');
Serial.println(digitalRead(knopka3)); //кнопка 3
Serial.write('h');
Serial.println(digitalRead(knopka4)); //кнопка 4
Serial.write('i');
Serial.println(digitalRead(knopka7)); //кнопка 7
Serial.write('g');
Serial.println(digitalRead(knopka8)); //кнопка 8
Serial.write('k');
Serial.println(digitalRead(knopka9)); //кнопка 9
Serial.write('l');
Serial.println(digitalRead(knopka11)); //кнопка 11
Serial.write('m');
Serial.println(digitalRead(knopka12)); //кнопка 12
Serial.print("\r\n"); //выведет символы "\r\n" – перевод строки
Serial.print("\r\n"); //выведет символы "\r\n" – перевод строки
delay(1000);
}
А вот приемника
int knopka9=0; int knopka11=0; int knopka12=0; void setup() { pinMode(9,OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available() && Serial.read() == 'k') { knopka9=Serial.read()-'0'; Serial.flush(); knopka9=map(knopka9, 1, 0, 0, 255); analogWrite(9,knopka9); } delay(50); }Можем и ткнуть. Зачем так делать? http://arduino.ru/forum/programmirovanie/peredacha-znachenii-po-serial-chto-ya-delayu-ne-tak
Поиском пользоваться умеете? Тем на эту тему (тавтология) здесь на форуме с десяток имеется. В верхнем правом углу пишите "управление по сериал" и просматриваете найденые темы.
во что форум животворящий делает! ковырялся 2 дня вместо того, чтобы правильно сформулировать поиск. впреть буду более внимательным. Больое спасибо.