Одновременное управление

geco
Offline
Зарегистрирован: 11.08.2013

Сразу прошу извинения за глупый вопрос. Что мне надо:
чтобы светодиод 1 горел пока нажата одна клавиша на клавиатуре;
чтобы светодиод 2 горел пока нажата вторая клавиша;
чтобы они оба горели пока зажаты обе клавиши.
Как мне такое осуществить? По очереди получается сделать, а чтобы оба горели - ну никак... 
Подскажите пожалуйста. Заранее благодарен.

toc
Offline
Зарегистрирован: 09.02.2013

покажите ваш скетч (текст программы) , будет проще подсказать.

geco
Offline
Зарегистрирован: 11.08.2013


void setup() 
{
  Serial.begin(9600);
  pinMode(12,OUTPUT);
  pinMode(7,OUTPUT);
}

int scan(){
int val = Serial.read();
if (val == '1') return 2;
if (val == '2') return 3;
if (val == '1' & val == '2') return 4;
}  

void loop(){
  switch(scan()){
    case 2:
      digitalWrite(12,255);
      delay(1);
      digitalWrite(12,0);
      break;
    case 3:
      digitalWrite(7,255);
      delay(1);
      digitalWrite(7,0);
      break;
    case 4:
      digitalWrite(7,255);
      digitalWrite(12,255);
      delay(1);
      digitalWrite(7,0);
      digitalWrite(12,0);
      break;
  }   

}
toc
Offline
Зарегистрирован: 09.02.2013

Для начала.. в строке 12 всегда false.

Что это за клавиатура такая? 

geco
Offline
Зарегистрирован: 11.08.2013

Самая обычная.  Точнее выражаясь, я в компорт отсылаю 1 и 2, вот и всё. 

toc
Offline
Зарегистрирован: 09.02.2013

serial.read() читает один байт. Этот один байт не может одновременно равняться и '1' и '2'. Договоритесь о другом протоколе.

И ещё про 12 строку: логическое И это два амперсанда. http://arduino.ru/Reference/Boolean

toc
Offline
Зарегистрирован: 09.02.2013

в качестве второго аргумента для digitalWrite лучше использовать LOW или HIGH.

leshak
Offline
Зарегистрирован: 29.09.2011

Во первых.

"Одновременно" у вас прийти по Serial '1' и '2' - не могут никак. Преставте себе что Serial это обычная труба. В которую вы пихаете цветные шарики. А сосед (ардуина) с другой стороны ловит эти шарики и что-то делает в зависимости от цвета.

То есть вам нужно, либо начать брать шарики трех, а не двух цветов (послайте еще символ '3' или '4'), либо объяснить соседу что-то типа такого порядка действий: Если ты получил красный шарик (нужно включить первый светодиод), ты не торопись включать. Подожди еще один шарик (но запомни какой ты получил первым). Если второй шарик будет синим, то нужно включить оба светодиода, а если красным - второй. А если второго вообще не будет - то таки первый :)

Вообщем - вначале продумайте логику и "что такой шарик и комбинация их" означает на примере соседа-трубы, а потом и в Serial это реализуете.

И еще.... что-бы там не делал ваш сосед - вы ничего не увидите. По крайней мере сейчас. С большой долей вероятсности. Вы же светик зажигаете всего на 1 миллисекунду и тут же его гасите. Я бы такое - не смог разглядеть.

И еще, вторым параметром digitalWrite ожидает HIGH/LOW, True/False, 0 или 1

255 - конечно тоже работать будет, но говорит скорее о том что вы путаете цифровые/аналоговые пины и digitalWrite/analogWrite