Go Down

Topic: Arduino + VB + Comunicação SerialPort + Dúvidas (Read 4787 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