Передача состояния кнопки с помощью СОМ порта

Det
Offline
Зарегистрирован: 08.04.2013

Здравствуйте, суть проблемы такква мне нужно передавать на СОМ порт состояние кнопки (L - не нажата, H - нажата), организовал передачю но сигнал передается только когда держиш клавишу а мне нужно что бы раз нажал ы сигнал идет пока не нажмеш еще раз, не могли б вы мне в этом помочь? спасибо зарание

const int buttonPin = 2;  
const int ledPin =  13;     
 
int buttonState = 0;        
 
void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);   
}
 
void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {   
    digitalWrite(ledPin, HIGH); 
  }
  else {
    digitalWrite(ledPin, LOW);
  }
}

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
const int buttonPin = 2;  
const int ledPin =  13;     
 
int buttonState = 0;        
bool trigger; 

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);
  trigger = LOW;   
}
 
void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState != trigger) {
    trigger = buttonState;  
    digitalWrite(ledPin, !digitalRead(ledPin)); 
    delay(200);
  }
  if(trigger){
  Serial.writeln("HIGH");
  delay(200);
  }
}

COM порт сами допишете.

maksim
Offline
Зарегистрирован: 12.02.2012

Вы бы прежде че такие темы плодить почитали самую первую прикрепленную ветку Работа с кнопками. В помощь новичку.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Продвинутые кодеры не пользуются поиском и не читают прикрепленных топиков)))

Det
Offline
Зарегистрирован: 08.04.2013

я уже ее читал

Det
Offline
Зарегистрирован: 08.04.2013

все они там читают но если не знают как решить проблему спрашивают у знающих)

Det
Offline
Зарегистрирован: 08.04.2013

NeiroN пишет:

const int buttonPin = 2;  
const int ledPin =  13;     
 
int buttonState = 0;        
bool trigger; 

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);
  trigger = LOW;   
}
 
void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState != trigger) {
    trigger = buttonState;  
    digitalWrite(ledPin, !digitalRead(ledPin)); 
    delay(200);
  }
  if(trigger){
  Serial.writeln("HIGH");
  delay(200);
  }
}

COM порт сами допишете.

спасибо!

 

Det
Offline
Зарегистрирован: 08.04.2013

NeiroN пишет:

const int buttonPin = 2;  
const int ledPin =  13;     
 
int buttonState = 0;        
bool trigger; 

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);
  trigger = LOW;   
}
 
void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState != trigger) {
    trigger = buttonState;  
    digitalWrite(ledPin, !digitalRead(ledPin)); 
    delay(200);
  }
  if(trigger){
  Serial.writeln("HIGH");
  delay(200);
  }
}

COM порт сами допишете.

извените, я перепутал листинг... вот мой код...

int ledPin = 13;              
int btnPin = 12;            
int val=0;

void setup()                     
{
  pinMode(ledPin, OUTPUT);     
  pinMode(btnPin, INPUT);       
  Serial.begin(9600);       
}

void loop()                      
{
  val = digitalRead(btnPin);    
  if(val==HIGH)             
  {
    digitalWrite(ledPin, HIGH); 
    Serial.println("H");
  }
  else                       
  {
    digitalWrite(ledPin, LOW);  
    Serial.println("L");
  }
  delay(100);
}

мне нужно что бы когда кнопка нажата "H" посылалось постояно пока не будет нажата клавиша еше раз, как только кнопку нажать еще раз сигнал изменится на "L"

maksim
Offline
Зарегистрирован: 12.02.2012

Det пишет:

мне нужно что бы когда кнопка нажата "H" посылалось постояно пока не будет нажата клавиша еше раз, как только кнопку нажать еще раз сигнал изменится на "L"

Так в чем проблема? Вам же уже написали:

NeiroN пишет:
COM порт сами допишете.

Det пишет:

я уже ее читал

Если читали, то почему не можете сами дописать? Лень разбираться в прочитанном?

Нужно добавить всего 2 строки:

if(digitalRead(btnPin)) Serial.write('H');
else Serial.write('L');

подумайте хотябы куда их нужно вставить.

Det
Offline
Зарегистрирован: 08.04.2013

остряк)))

Det
Offline
Зарегистрирован: 08.04.2013

Всем спасибо но вы меня всеравно не так поняли или я не так объяснил, я имел ввиду что мне нужно вот это:

int switchPin = 12;
int ledPin = 13;
boolean lastBut = LOW;
boolean curBut = LOW;
boolean ledOn = false;

void setup()
{
pinMode (switchPin, INPUT);
pinMode (ledPin, OUTPUT);
Serial.begin(9600);
}

boolean debounce(boolean last)
{
  boolean cur=digitalRead(switchPin);
  if (last!=cur)
  {
    delay(5);
    cur = digitalRead(switchPin);
  }
  return cur;
}

void loop()
{
  curBut=debounce (lastBut);
  if (lastBut == LOW && curBut == HIGH)
  {
   ledOn =!ledOn;
  }
   lastBut = curBut;  
   digitalWrite(ledPin,ledOn);
  if (ledOn == HIGH)
  {
   Serial.println("H");  
  }
  else
  {
  Serial.println("L");
  }
delay(100);
}

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну вот видите - стоило разобраться в прочитанном и все получилось...