Go Down

Topic: PCF8574 duvida (Read 1 time) previous topic - next topic

ricardomira77

ola, é possivel criar uma array ou algo parecido para contralar de forma mais facil o PCF8574
tipo

P0 = 0
P1 = 1
P2 =0

eu estou usando esse codigo:

Code: [Select]

#include "Wire.h"
#define expander 0x20

void setup()
{
Wire.begin();
}

void loop()
{
 
  expanderWrite(B11111111);
  delay(1000);

  expanderWrite(B00000000);
  delay(1000);
}

void expanderWrite(byte _data )
{
  Wire.beginTransmission(expander);
  Wire.write(_data);
  Wire.endTransmission();
 
}



bubulindo

E de que maneira é que o array ia controlar o PCF8574?
This... is a hobby.

ricardomira77

para ativar uma porta no PCF8574 eu estou usando o expanderWrite(B11111111)

mais gostaria de simplificar usando algo do tipo writedigital(P0, Low)

ponde o P0 seria a porta 0 do PCF8574


bubulindo

Com array é menos eficiente... algo como:

Code: [Select]


#define P0   0x1
#define P1   0x2
#define P2   0x4
#define P3   0x8
//completa o resto

void expanderBitWrite( unsigned char bit, unsigned char value) {

unsigned char status = expanderRead(); //deve haver uma destas funcões para ler o estado do registo

if (value == HIGH) expanderWrite(status | bit);
else expanderWrite(status &~(bit));

}


This... is a hobby.

ricardomira77

#4
Apr 17, 2012, 01:52 am Last Edit: Apr 17, 2012, 01:57 am by ricardomira77 Reason: 1
ok eu vou olhar seu codigo com calma para entender
eu usar assim no Bascom-AVR usando BASIC

Code: [Select]

**Variavel
Dim Bytearray(1) As Byte


** Saidas
S1 Alias Bytearray(1).0
S2 Alias Bytearray(1).1
S3 Alias Bytearray(1).2
S4 Alias Bytearray(1).3
S5 Alias Bytearray(1).4
S6 Alias Bytearray(1).5
S7 Alias Bytearray(1).6

S1 = 0
S2 = 1
S4 = 1

*** depois mandava assim

' Envias dados PC8574
I2cstart
I2cwbyte Pcf8574
I2cwbyte Bytearray(1)
I2cstop




S8 Alias Bytearray(1).7



bubulindo

Eu não sei BASIC...
This... is a hobby.

ricardomira77

opa eu achei uma biblioteca para usar com o PCF8574

http://skyduino.wordpress.com/librairie-arduino-pcf8574-pcf8575/

ficou mais simples:

Code: [Select]
#include <PCF8574.h> // Required for ... all

#include <Wire.h> // Required for I2C communication

PCF8574 expander; // Create object from PCF8574 class

void setup(){

  Serial.begin(9600); // Setup serial for read echo
 
  expander.pinMode(0,OUTPUT); // Setup pin D0 as output
  expander.pinMode(1,OUTPUT); // Setup pin D1 as output
  expander.pinMode(2,OUTPUT); // Setup pin D2 as output
 
  expander.set(); // coloca todas as saidas em HIGH
  expander.begin(0x20);
 
}

void loop(){
  expander.digitalWrite(0, LOW); // Blink led 1
  delay(1000);
  expander.digitalWrite(0, HIGH); // Blink led 2
  delay(1000);

} // Loop forever

kabeleraape

Boa Noite.

Estou usando esta mesma biblioteca e queria dar nome aos pino do PCF8574 como no caso dos servos, parei nesta parte e não consigo avançar:
#include <Wire.h>
#include <Servo.h>
#include <PCF8574.h>
#include <LiquidCrystal_I2C.h>

PCF8574 PCF_EXP1;

//SERVOS
const int SPEEDO_PIN                         =A0;
const int RPM_PIN                               = 5;
const int BRAKE_AIR_PRESSURE_PIN      = 6;
const int FUEL_PIN                              = 9;
const int OIL_TEMPERATURE_PIN           =10;
const int WATER_TEMPERATURE_PIN      =11;

//LEDS
const int PCF_EXP1 RIGHT_INDICATOR    =P0;
const int FUEL_WARNING                      =P1;
const int PARKING_BREAK                     =P2;
const int LIGHT_PARKING                      =P3;
const int MOTOR_BRAKE                        =P4;
const int LIGHT_HIGH_BEAM                  =P5;
const int BATTERY_VOLTAGE_WARNING   =P6;
const int LEFT_INDICATOR                     =P7;

void setup() {
  Serial.begin(115200);
  PCF_EXP1.begin(0x20);
}

void loop() {
}

Desde ja muito obrigado!

luisilva

Não sei se estou a perceber bem a questão, mas penso que o problema deve estar relacionado com estas linhas:
Code: [Select]
const int PCF_EXP1 RIGHT_INDICATOR    =P0;
const int FUEL_WARNING                      =P1;
const int PARKING_BREAK                     =P2;
const int LIGHT_PARKING                      =P3;
const int MOTOR_BRAKE                        =P4;
const int LIGHT_HIGH_BEAM                  =P5;
const int BATTERY_VOLTAGE_WARNING   =P6;
const int LEFT_INDICATOR                     =P7;


Tente fazer:
Code: [Select]
const int PCF_EXP1 RIGHT_INDICATOR    = 0;
const int FUEL_WARNING                      = 1;
const int PARKING_BREAK                     = 2;
const int LIGHT_PARKING                      = 3;
const int MOTOR_BRAKE                        = 4;
const int LIGHT_HIGH_BEAM                  = 5;
const int BATTERY_VOLTAGE_WARNING   = 6;
const int LEFT_INDICATOR                     = 7;


Assim, já pode chamar outro nome aos pinos e fazer:
Code: [Select]
  expander.pinMode(FUEL_WARNING, OUTPUT);
e:
Code: [Select]
  expander.digitalWrite(FUEL_WARNING, HIGH);

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