Recent Posts

Pages: 1 ... 7 8 [9] 10
81
Deutsch / Re: 74HC595 vs PCF8574
Last post by skorpi08 - Today at 02:59 am
Und woran hängt es ab ob das ^ oder & sein soll? Was bewirkt das &, in welchem Fall wirds angewendet?
82
As I am not an electronics engineer, I ask (for my education), what tells us that the wave shown above is not across the real component?

Weedpharma
83
Deutsch / Re: 74HC595 vs PCF8574
Last post by Serenifly - Today at 02:54 am
Sowie ich es geschrieben habe

Aber wenn du nur 6 LEDs willst, wieso übergibst du dann einen int an die Funktion? Das >> 8 braucht man wenn man einen 16 Bit Integer auf 2 Byte aufteilt. Dann muss man aber auch zweimal shiftOut() machen.

Für ein Byte reicht das:
Code: [Select]

void sendeByte(byte wert)
{
    digitalWrite(speicherPin, LOW);
    shiftOut(datenPin, taktPin, MSBFIRST, wert ^ 0x0F);
    digitalWrite(speicherPin, HIGH);
}


Hier wird das untere Halb-Byte invertiert, d.h. low-aktiv angesteuert.
84
I am starting to move my demo projects into C++ Classes. I haven't messed with Classes since 1999.

But this works so far with an ioblinker class for blinky led objects and an iobutton class to make button objects. The buttons debounce. Your sketch reads the button to find the output state which may be -1=undecided, 0=off, 1=on, 2=changed to off since last read, 3=changed to on since last. Your sketch doesn't even need to remember the last read, it's taken care of by states 2 and 3.

In future I plan to add my other demo interfaces as classes, including serial user io.

But I need some advice. I want to stick with Arduino IDE but if I add the library files in the IDE then change and save them, they save in the sketchbook folder instead of the IDE library folder. What I do now is open those with an editor, more work for me.  

And here's the (already improved) demo. it requires an Arduino and 2 jumpers or buttons.
Now added is a setPin function for the led object and the demo goes into buttons as array.

Code: [Select]

// ioclasses demo io_events_2  Dec 21, 2014 by GoForSmoke
/*
  This sketch uses 2 classes from ioclasses.h to make led13
 blink and grounded jumpers on pins 6 & 7 to control the rate.
 Ground pin 6 and the rate adds 100ms. Pin 7 subtracts 100ms.
 
 Button output is a state value for use in sketch code.
 -1, Undecided, pin state changed at least debounce-time ago.
 0, button currently still not pressed.
 1, button currently still pressed.
 2, button released since last checked by sketch.
 3, button pressed since last checked by sketch.
 The sketch doesn't have to track previous output state.
 */

#include <IOClasses.h>

// led13( blink-rate, arduino-pin, port, mask-to-toggle-PIN-reg );
ioblinker led13( 500, 13, 'B', 0x20 ); // pin 13 is port B pin 5
// button-name( arduino-pin, millis-debounce );
iobutton  goslower( 6, 20UL );
iobutton  gofaster( 7, 20UL );
iobutton  *buttons[ 2 ] = {
  &goslower, &gofaster };
byte buttonIdx, buttonRead;

unsigned long val;


void setup( void )
{
  Serial.begin( 115200 );
  Serial.println( );
  Serial.println( F( "\n  Startup\n" ));
  // object starts set pinmodes and states
  led13.startBlinker( );
  led13.setPin( LOW );
  gofaster.startButton();
  goslower.startButton();
}

void loop( void )
{
  // gotta run them
  led13.runBlinker( );

  // by only running 1 button per loop(), many buttons don't load it.
  buttons[ buttonIdx ]->runButton( ); // only running 1 button per loop

  // now using button data to change blink rate
  if ( !buttonIdx ) // only check the button that was run
  {
    buttonRead = buttons[ buttonIdx ]->readOutput();
    if ( buttonRead == 3 ) // 1st read since pressed
    {
      Serial.print( F( "slower " ));
      val = led13.getWait();
      if ( val < 9900UL )
      {
        val += 100UL;
      }   
      else
      {
        val = 10000UL;
      }
      led13.setBlinker( val );
      Serial.println( val );
    }
  }

  if ( buttonIdx ) // only check the button that was run
  {
    // now using button data to change blink rate
    byte buttonRead = buttons[ buttonIdx ]->readOutput();
    if ( buttonRead == 3 ) // 1st read since pressed
    {
      Serial.print( F( "faster " ));
      val = led13.getWait();
      if ( val > 100UL )
      {
        val -= 100UL;
      }   
      else
      {
        val = 0;
      }
      led13.setBlinker( val );
      Serial.println( val );
    }
  }

  buttonIdx ^= 1; // toggles bit 0
}



85
Project Guidance / PC Volume Control
Last post by becks256 - Today at 02:53 am
Hello!

I am working on a project that uses the Arduino Micro as a volume control for a Windows 8.1 PC.   So far in all of my research I haven't been able to find any code examples that don't require me to flash the Arduino with an alternate firmware.  The end goal is to have two membrane key buttons act as volume up/down buttons.

This is an example of what the ideal code will look like:

void setup() {

  pinMode(2, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
//Volume Up
  if(digitalRead(2)==LOW){
    Serial.println(0xAF);
    delay(50);
  }


So far I have tried Serial.write, Serial.print, and Keyboard.print with the Virtual-Keys provided by Microsoft to no avail: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

VK_VOLUME_UP 0xAF
VK_VOLUME_DOWN 0xAE


If anyone has any experience or success doing this, please let me know.  If it is just not possible, feel free to say so :)

Thanks!
86
I'm looking for something like... a remote control that runs at 230V (to be put in a normal wall button set) and that transmit a RF signal to an Arduino pin @5V (through a receiver, of course), to make it execute commands inside an house. Does something like that exist? :)
87
Project Guidance / Re: Using a 2 wire RTD Temp Se...
Last post by fmeroney - Today at 02:47 am
Understood, i have used both the steinhart and a lookup table, But feel that the resolution is too low and would be "filling in the gaps. i need to inscrease the scale somehow for better reliability and accuracy. Right now im at +\- 5 deg F.


The relation between resistance and temperature is not linear.  You can feed any three of your sample points into an online calculator to get the Steinhart-Hart parameters of the thermistor.  Those parameter can then be inserted into the Steinhart-Hart equation to convert resistances to temperatures.
88
Software / Menu LCD+ Encoder + click enco...
Last post by AlexLPD - Today at 02:47 am
Hola a todos, la razón por la que pongo este poste, es por que quiero hacer un menu con un encoder, y ademas agregar la función de que el clic de el encoder sirva como "enter" para grabar nuevos valores.

Basicamente es un menu a lcd, que puede modificar variables en el programa, de esta manera uno puede variar el comportamiento en el programa sin necesidad de re-programarlo cada vez... y es que cuando este terminado sera un control electronico para un enorme vitrina que contendra mucha carne en su interior, de ahi la necesidad de poder modificar variables como; temp. incio del ciclo de refrigeracion, temp. final del ciclo de refrigeracion, tem.  inicio de la congelacion, temp, final de congelacion, modo nocturno, modo turbo, etc.


Actualmente ya tengo funcionando el encoder, y el click del encoder, asi como el LCd y el adaptador IC2

Le he probado apropiadamente con, este ejemplo;

Code: [Select]

#include "Arduino.h"  //Incluye Ide Arduino.
//#include "WProgram.h"
#include "Switch.h"     //INCLUYE LA LIBRERIA SWITCH
#include <Wire.h>                //INCLUYE LA LIBRERIA PARA EL DAPTADOR IC2
#include <LiquidCrystal_I2C.h>    // INCLUYE LA LIBRERIA PARA EL LCD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);// CONSTRUCTOR DE EL OBJETO LCD


const byte pinA = 2;      // encoder pin A to Arduino pin 2 which is also interrupt pin 0 which we will use
const byte pinB = 3;      // encoder pin B to Arduino pin 3 which is also interrupt pin 1 but we won't use it
byte state = 0;           // will store two bits for pins A & B on the encoder which we will get from the pins above
int level = 0;            // a value bumped up or down by the encoder

const byte  swEpin = 7;  //PIN EN EL CONECTAREMOS EL SWITCH
const byte  pinD = 13;   //PIN PARA HACER BRILLAR EL LED DEL PIN13 DE ARDUINO
int contador =0;         //VARIABLE PARA ALMACENAR EL CONTADOR

/* A truth table of possible moves
    1 for clockwise
   -1 for counter clockwwise
    0 for error - keybounce */
int bump[] = {0,0,-1,1};
String bits[] = {"00","01","10","11"}; //Solo para imprimir en serial, sera eliminado mas tarde.

     Switch swE        =   Switch(  swEpin,   INPUT, HIGH); //CONSTRUCTOR, QUE CREA UN OBJETO SWITCH
//     ↑     ↑                 ↑      ↑          ↑      ↑
//  FUNCION NOMBRE DEL      FUNCION  PIN DEL   ESTO ES IGUAL QUE DIGITAL
//            SWITCH                 SWITCH    DIGITAL.READ(INPUT), ENABLE PULL DOWN RESISTOR

void setup() {
  pinMode(pinA,INPUT);    // reads Pin A of the encoder
  pinMode(pinB,INPUT);    // reads Pin B of the encoder
    /* Writing to an Input pin turns on an internal pull up resistor */
  digitalWrite(pinA,HIGH);
  digitalWrite(pinB,HIGH);
    /* Set up to call our knob function any time pinA rises */
  attachInterrupt(0,knobTurned,RISING);    // calls our 'knobTurned()' function when pinA goes from LOW to HIGH
  level = 50;              // a value to start with
 
  Serial.begin(9600);   
  /* Set up for using the on-screen monitor */
  Serial.println("Encoder Ready");
  Serial.print("level = ");
  Serial.println(level);   // to remind us where we're starting
 
  pinMode(pinD, OUTPUT);
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight
  lcd.backlight();
  lcd.clear();       //LIMPIA LA PANTALLA LCD.

  lcd.setCursor(0,0);
  lcd.print("POSIC. ");
  lcd.setCursor(0,1);
  lcd.print("CONTADOR ");
}

void loop(){
swE.poll();
//↑ FUNCION NECESARIA PARA REFRESCAR EL ESTADO DEL BOTON.


  if(swE.released()== HIGH){
//   ↑N.SW   ↑ ESTA FUNCION SOLO DEVUELVE HIGH CUANDO EL BOTON HA SIDO SOLTADO
//    POR LO QUE ES PERFECTA PARA ESTE TRABAJO.
        contador= contador+1 ;
        Serial.print("Contador =");
        Serial.println(contador);
        digitalWrite(pinD, HIGH);
        lcd.setCursor(9,1);
        lcd.print(contador);}
   
  else{
    digitalWrite(pinD, LOW); }
    lcd.setCursor(9,0);
    lcd.print(level);
}



void knobTurned(){
  /* AH HA! the knob was turned */
  state = 0;    // reset this value each time
  state = state + digitalRead(pinA);   // add the state of Pin A
  state <<= 1;  // shift the bit over one spot
  state = state + digitalRead(pinB);   // add the state of Pin B
 
  /* now we have a two bit binary number that holds the state of both pins
     00 - something is wrong we must have got here with a key bounce
     01 - sames as above - first bit should never be 0
     10 - knob was turned backwards
     11 - knob was turned forwards
     */
     
  /* We can pull a value out of our truth table and add it to the current level */
  level = level + bump[state];
 
  /* Let's see what happened */
  Serial.print(bits[state] + "    ");  // show us the two bits
  Serial.print(bump[state],DEC);       // show us the direction of the turn
  Serial.print("    ");
  Serial.println(level);               // show us the new value
}
 


Una vez que quede mas limpio la idea es agregar un numero de "pasos" en el menu; algo como

level = 0
if (level == 6){ level =-5);
if(level < 5){ codigo}
if level ==-6) {level = 5);

Esto mas o menos para hacer que el "menu" tenga 10 posiciones, y si se gira de mas el encoder, se reincie, el menu en su parte mas baja o alta... digamos un tipo de rodex, que gira entre los pasos seleccionados

Para el contador no sera necesario  ya que funcionara, solo como "enter"

Ahora bien, estuve revisando dos opciones que encontre, una es una maquina de estado finitos
MEF Arduino

Y la otra es precisamente un menu para display.  Phi-Menu (Gracias a @Surbyte, por señalar esta opcion).

Lo que me gusta de la segunda opcion es que utilizar char, en lugar de String, y por lo que tengo entendido es menos memoria.

Sin embargo me parece que esta libreria, depende de 4 botones que estan muy bien definidos, la pregunta seria, como hacer menus, y sub menus que interactuen de acuerdo al contador del encoder?

La estructura que estaba pensando es algo asi;

MENU PRINCIPAL
         AJUSTE DE TERMOSTATO
                     TEM. INCIO REFRIGERACION
                             TEMP //MODIFICA UNA VARIABLE INT CON ENCODER CLIK PARA ENTRAR
                     TEMP. FINAL REFRIGERACION
                             TEMP //MODIFICA UNA VARIABLE INT CON ENCODER CLIK PARA ENTRAR
                     VOLVER

MODO NOCTURNO
                     ACTIVADO
                             MODIFICA UNA VARIABLE BOOLEAN CLIK ENCODER ENTER
                     DESACTIVADO
                             MODIFICA UNA VARIABLE BOOLEAN CLIK ENCODER ENTER
                     HORA INICIO
                             ALMACENA HORA, MINUTO, SEGUNDO PARA SER USADO POR LIBRERIA                 
                              ALARMS.H
                     HORA FINAL
                               LO MISMO QUE LA ANTERIOR.
                     VOLVER

DESHIELO
                     ENCENDIDO
                               OK/ VOLVER //MODIFICA VAR. BOOLEAN                     
                     APAGADO
                               OK/ VOLVER //MODIFICA VAR BOOLEAN                     
                     TIEMPO DESHIELO
                               EN MINUTOS //ALAMACENA TIEMPO EN MINUTOS
                     CANTIDAD DESHIELOS
                               //MODIFICA UNA VARIABLE BYTE
                     VOLVER

ALARMA ALTA TEMPERATURA
                     ACTIVADA
                               OK/ VOLVER                     
                     DESCATIVADA
                               OK/VOLVER
                     EN VITRINA
                               TEM. ALARMA
                               OK/VOLVER
                     EN BODEGA
                               TEM. ALARMA
                               OK/VOLVER
                     VOLVER

Bueno, sin mas por el momento, espero que me puedan indicar la dirección adecuada.
Gracias de antemano.

-Alex.
89
Deutsch / Re: 74HC595 vs PCF8574
Last post by skorpi08 - Today at 02:42 am
mehr als 10cm wird nicht und mehr als 6 Leds werdens auch nicht.
Was mir nicht gefällt ist, wie man die LEDs anschließt.
Entweder alle auf GND oder alle auf VCC, wäre einfacher beim programmieren und löten.

Mit dem Sketch wäre nur eine LED am leuchten (jenachdem wie angeschlossen, wären 5 am leuchten)

Code: [Select]
int taktPin = 8;      // SH_CP
int speicherPin = 9;  // ST_CP
int datenPin = 10;    // DS
void setup(){
  pinMode(taktPin, OUTPUT);
  pinMode(speicherPin, OUTPUT);
  pinMode(datenPin, OUTPUT);
}

void loop(){
  sendeBytes(0B00000001);
}

// Funktion zum Übertragen der Informationen
void sendeBytes(int wert){
    digitalWrite(speicherPin, LOW);
    shiftOut(datenPin, taktPin, MSBFIRST, wert >> 8);
    digitalWrite(speicherPin, HIGH);
}


Quote
Deshalb muss man vor dem versenden das eine Halbbyte (auch Nibble oder Nybble genannt) mit ^ 0x0F (oder 0xF0) invertieren.
Wie macht man es denn hier?
90
Arduino Yún / Re: Arduino Yun Broke Down
Last post by jessemonroy650 - Today at 02:42 am
Omar,
have you attached the serial port? Does it connect?
What type of computer are you using to connect to the Yun?
I run Linux, but Windows and Mac sometimes have different problems.

Jesse
In Texas, USA
Pages: 1 ... 7 8 [9] 10