Go Down

Topic: Arduino + VB + Comunicação SerialPort + Dúvidas (Read 5822 times) previous topic - next topic

ruiacm10


Depende do shield... Mas é provável...
Qual era o modelo de shield que estavas a pensar usar? Tens a certeza que te queres meter nisso com o que sabes de C?


O shield é este http://arduino.cc/en/uploads/Main/ArduinoEthernetShield_R3_Front.jpg

Ya vai ser complicado mas era a minha ideia ..

Só queria criar um site simples para desligar e ligar via internet, penso que não é muito complicado (acho eu).
Não sei é até que ponto dá para estar a utilizar o programa em vb e ao mesmo tempo ligar e desligar via ethernet

bubulindo

Sim, com esse shield vais perder pinos com PWM.

This... is a hobby.

ruiacm10

#17
Mar 27, 2013, 05:28 pm Last Edit: Mar 27, 2013, 05:30 pm by ruiacm10 Reason: 1

Sim, com esse shield vais perder pinos com PWM.




Ya, o pino 10 pelo menos.
Mas mesmo assim consigo dar a volta, basta tirar uma divisao, sem problema

bubulindo

This... is a hobby.

ruiacm10


3... pelas minhas contas.


Tive a mudar o programa e ficou assim no arduino:
Code: [Select]

int PinoV = 11;
int PinoH= 10;
int PinoS=9;
int PinoC = 6;
int PinoJ= 5;
int PinoR=7; //Não é PWM
int PinoQ = 4;
int PinoB= 2; //Não é PWM

void setup(){
  pinMode(PinoV,OUTPUT);
  pinMode(PinoH,OUTPUT);
  pinMode(PinoS,OUTPUT);
  pinMode(PinoC,OUTPUT);
  pinMode(PinoJ,OUTPUT);
  pinMode(PinoR,OUTPUT);
  pinMode(PinoQ,OUTPUT);
  pinMode(PinoB,OUTPUT);
  Serial.begin(19200);
}
void loop (){
  char pwm[4];
  unsigned char pwm_int = 0;

if (Serial.available() >= 4) {
//ler PWM
  for (int i = 0; i < 3; i++){
    pwm[i] = Serial.read();
}
  pwm[3] = '\0';
  pwm_int = atoi(pwm);
  switch(Serial.read()) {
    case 'V': {
          analogWrite(PinoV, pwm_int);
          Serial.println(pwm_int);
          break;}
    case 'H': {
          analogWrite(PinoH, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'S': {
          analogWrite(PinoS, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'C': {
          analogWrite(PinoC, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'J': {
          analogWrite(PinoJ, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'R': {
          analogWrite(PinoR, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'Q': {
          analogWrite(PinoQ, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'B': {
          analogWrite(PinoB, pwm_int);
          Serial.println(pwm_int);
          break; }
   
    }
}
}



O PinoR e o PinoB não vão ter dimmer, vai ser só ligar e desligar.
Se meter mais uma divisao assim a ligar e desligar só, já dá.

bubulindo

O analogWrite não faz nada em pinos digitais...

Code: [Select]

if(pwm_int == 0) {
    digitalWrite(pino, LOW);
} else {
    digitalWrite(pino, HIGH);
}
This... is a hobby.

ruiacm10


O analogWrite não faz nada em pinos digitais...

Code: [Select]

if(pwm_int == 0) {
    digitalWrite(pino, LOW);
} else {
    digitalWrite(pino, HIGH);
}



Tambem funcionava da outra maneira mas se assim está mais correto deixo da tua maneira ;)

ruiacm10


O analogWrite não faz nada em pinos digitais...


Como é que através do vb consigo saber o estado do LED? (Se está ligado, desligado ou a sua intensidade)

bubulindo

Envias um "comando" para o Arduino a questionar o estado do LED que pretendes... e o Arduino responde.
This... is a hobby.

ruiacm10


Envias um "comando" para o Arduino a questionar o estado do LED que pretendes... e o Arduino responde.



Pois não sei é como

bubulindo

Code: [Select]

#define QUARTO_B 0
#define QUARTO_J 1
...

unsigned char analog_values[6]; //imaginemos 6 quartos.

switch(Serial.read()) {
    case 'V': {
          analogWrite(PinoV, pwm_int);
          Serial.println(pwm_int);
          break;}
    case 'H': {
          analogWrite(PinoH, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'S': {
          analogWrite(PinoS, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'C': {
          analogWrite(PinoC, pwm_int);
          Serial.println(pwm_int);
          break; }
    case 'J': {
          analogWrite(PinoJ, pwm_int);
          analog_values[QUARTO_J] = pwm_int;
          Serial.println(pwm_int);
          break; }
    case 'R': {
          analogWrite(PinoR, pwm_int);
          analog_values[QUARTO_R] = pwm_int;
          Serial.println(pwm_int);
          break; }
    case 'Q': {
          analogWrite(PinoQ, pwm_int);
          analog_values[QUARTO_Q] = pwm_int;
          Serial.println(pwm_int);
          break; }
    case 'B': {
          analogWrite(PinoB, pwm_int);
          analog_values[QUARTO_B] = pwm_int;
          Serial.println(pwm_int);
          break; }

//OLHA AQUI...
   case 'b': {
     Serial.println(analog_values[QUARTO_B]);
     break;
    }
}


Se enviares 000b, recebes o PWM que tens no quarto B. Obviamente que isto não é ideal e é um sinal de quão imperfeito este protocolo é...
This... is a hobby.

ruiacm10

#26
Apr 03, 2013, 02:34 pm Last Edit: Apr 03, 2013, 02:41 pm by ruiacm10 Reason: 1

...
Se enviares 000b, recebes o PWM que tens no quarto B. Obviamente que isto não é ideal e é um sinal de quão imperfeito este protocolo é...


Depois no vb é so fazer o serial.read e fazer parsing da string recebida certo?

bubulindo

This... is a hobby.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy