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
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por