para efetuar a comunicação.
Então vamos lá, você está usando a instrução ReadExisting, ela faz uma tentativa de leitura pontual, caso o buffer da serial esteja vazio ela parte para a próxima instrução, que no seu caso é um sleep na thread (acredito que seja uma tentativa de esperar o buffer da serial encher, se sim, neste caso ele deveria ficar antes do ReadExisting)
EU partiria para uma função usando loop infinito e threads, mas acho que uma pequena adaptação no seu código ja vai fazer funcionar certinho, segue minha sugestão, fiz o código em console application:
Imports System.IO.Ports
Module Module1
Sub Main()
Dim SerialPort1 As New SerialPort
SerialPort1.PortName = "com1"
SerialPort1.Open()
SerialPort1.Write("a")
''Aqui você prepara a variável de Buffer da Serial, considerando que você sempre receberá apenas um byte da serial
ReDim Preserve Buffer(1)
''Enquanto o VB não receber 1 byte na serial ele não sai da linha de baixo
SerialPort1.Read(Buffer, 0, 1)
End Sub
End Module
…
botão ele controlasse algum servo, o braço fosse a 140 graus ficasse por um tempo e depois voltasse pra 12 graus por exemplo.
Eu tentei o botão aciona o servo ligado no pino 10 porém o braço vai ate o limite e fica forçando pra uma direção só, e mesmo mudando os graus não consigo programar para oque o servo faça depois do botão pressionado, vocês podem me ajudar?olha meu codigo:#include <Servo.h>void setup() { Serial.begin(9600); //Inicia a serial com um baud rate de 9600} void loop(){ long tecladoA5=0; //Cria variável para ler o teclado ligado ao pino A5 for(int i=0;i<100;i++) //Laço para fazer 100 leituras { tecladoA5 = tecladoA5+analogRead(A5); //Soma a leitura anterior com a leitura atual de A5 } tecladoA5 = tecladoA5/100; Serial.print("Teclado A5 = "); //Imprime no Serial Monitor "Teclado A5 = " Serial.println(tecladoA5); //Imprime o valor de A5 Serial.print("\n\n"); //Pula 2 linha no Serial Monitor delay(100); //Aguarda 100 milissegundos //ate aqui tudo bem o codigo indentifica os botões e consigo escolher em qual pino ligar o servo e qual botão vai acioná-lo //o problema é que a função abaixo não funciona como deveria e o servo fica ligado direto pra um sentido só //----------------------FIM DA FUNÇÃO DO SERVO 1-------- if(tecladoA5 == 916) //------FUNÇÃO PARA O SERVO EXECUTAR QUANDO CLICADO O BOTÃO DE VALOR 916--------{ Servo motor; motor.attach(10); //pino do sinal que o servo esta plugadoint i;for(i=0;i<170;i++) { //angulo de movimento motor.write(i); delay(40); //velocidade que o braço se move}delay(1000); //demora 0,8 segundosfor(i=150;i>0;i--) { //angulo de movimento motor.write(i); delay(40); //velocidade que o braço se move}delay(1000); //demora 0,8 segundos}}…
16mil e um Int guarda até 64 mil temos uns bits sobrando.
Algo como:
Vc criando variaveis:
#define T4 0x0000;
#define T8 0x4000;
#define T16 0x8000;
Na matriz colocaria:
C4+T4,C4+T16, etc...
E lá na hora de tocar,
para obter a frequencia:
freq=valor & 0x3ff; // isso limpa os bits mais altos.
tempo= valor >>14; // isso roda os bits de forma que fica em tempo apenas os 2 mais significativos.
Tempo = 2^(tempo+2); // isso deve converter 0, 1 e 2 para para 4, 8 e 16 pq são (2*2), (2*2*2) e (2*2*2*2)
Na duvida vai de switch case ou if().
Se não errei nada, não testei... Acho que vira uma tabela só.
…
Adicionado por Eduardo ao 8:04 em 6 fevereiro 2019
Oi amigos ... Alguem ae me ajuda a ligar 2 motores dc no arduino ?? sendo q eu tenho 2 npn 2 pnp 2 motores e resistors de 100 ohms e de 300 ohms .... quem pdr me ajudar namoral mt obrg
Adicionado por Leulin Araujo ao 20:09 em 30 abril 2013
(inicial) + C (atual) = 0 + 2 = 2.
Num segundo momento, em que o C inicial for 2 e o C atual for 2 novamente, resultará em 4. Num terceiro momento, em que o C inicial for o 4 e somar 2, D vai ser 6. E assim por diante.…