Arduino - Manter LED acesso após fechar o Serial Monitor

Boa tarde à todos ...

Estou desenvolvendo o código abaixo para aprender um pouco sobre a programação do Arduino. O programa até funciona.

Se no serial monitor eu digitar status e pressionar SEND, ele me mostra o status das saídas 8 à 13.

Se eu tiver um LED na saída 8 e no serial monitor eu digitar P8,1 e pressionar SEND ele liga o LED e P8,0 ele desliga.

Logicamente tudo ok.

O que acontece é que se eu der um P8,1 SEND e após o LED ligar eu fechar o monitor, o LED apaga. 

Existe alguma forma disso não acontecer ? Gostaria de ascender o LED, fechar o monitor e o LED continuar acesso. 

Já fiz a integração com o Processing e também funciona todos os testes. Mas caso eu ligue o LED e feche o programa desenvolvido no Processing, o LED também se apaga e gostaria que ele ficasse acesso.

Segue sketch:

/***

Arduino SERIAL

***/

String sComando = "";
void setup() {
Serial.begin(9600);
Serial.println("Executando pela primeira vez");
for (int i = 8; i <= 13; i++) {
pinMode(i,OUTPUT);
}
}

void loop() {
if (Serial.available() > 0) {
char ch = (char)Serial.read();
if (ch == 10) {
if ( sComando == "status" )
{
status(0);
}
else if ( sComando.indexOf('P') != -1 ) {
status(1);
}
else {
sComando = "";
}
}
else sComando += ch;
}
}

void status(byte bTipo) {
if (bTipo ==0) {
//Serial.println("Status OK");
for (int i = 8; i <= 13; i++) {
Serial.print('H');
Serial.print(",");
Serial.print(i);
Serial.print(",");
Serial.print(digitalRead(i));
Serial.print(",");
Serial.println();
}
}
else if (bTipo == 1) {
String sPorta = sComando.substring(sComando.indexOf('P')+1,sComando.length());
sPorta = sPorta.substring(0,sComando.indexOf(',')-1);

String sStatus = sComando.substring(sComando.indexOf('P')+1,sComando.length());
sStatus = sStatus.substring(sComando.indexOf(',')+1,sStatus.length()-1);

Serial.print("Porta ");
Serial.print(sPorta);
Serial.print(" Status ");
Serial.println(sStatus);

digitalWrite(stringToNumber(sPorta),stringToNumber(sStatus));
}
sComando = "";
}

int stringToNumber(String thisString) {
int i, value = 0, length;
length = thisString.length();
for(i=0; i<length; i++) {
value = (10*value) + thisString.charAt(i)-(int) '0';
;
}
return value;
}

Obrigado por qualquer dica

Ronaldo Araujo

Exibições: 599

Responder esta

Respostas a este tópico

Boa noite senhores.

Quebrei a cabeça e agora entendi o que acontece. O arduino tem um auto-reset toda vez que uma comunicação serial é iniciada / finalizada, por isso o LED não ficava acesso quando eu fechava o serial monitor.

Para confirmar esse auto-reset, achei um projetinho em VB .NET que faz a comunicação serial e tem uma propriedade DTREnable que é justamente para desabilitar o auto-reset e o scketh em arduino que montei funcionou normalmente deixando o LED acesso quando eu fechava a comunicação do sistema VB e permanecendo acesso quando eu abria novamente.

Li vários sites dizendo uma forma de fazer o bloqueio dessa função com alterações na placa ou com a instalação de um resistor ou capacitor.

Abaixo deixo um link em português sobre o assunto:

http://dqsoft.blogspot.com.br/2011/09/o-auto-reset-do-arduino.html

Obrigado

Ronaldo Araujo

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço