Show Posts
Pages: [1] 2 3 4
1  International / Generale / Re: aiuto uln2803 on: April 28, 2013, 05:14:38 am
I relé stessi sono isolati tra bobbina e contatto. Un optocoppler non migliora l' isolamento. Penso che giá usi dei alimentatori differenti per la parte Arduino - relé e la parte audio.
Ciao Uwe

teoricamente no in quanto ho a disposizione un alimentatore 24V da 350va che intendevo utilizzare per tutto usando delle batterie di vari LM79XX per avere le varie tensioni
2  International / Generale / Re: aiuto uln2803 on: April 28, 2013, 04:31:08 am
grazie a tutti per le risposte!
un ulteriore domanda\precisazione?è conveniente inserire degli optoisolatori nel tutto?i relè sono utilizzati su un circuito audio e vorrei evitare ogni possibile rumore di fondo
3  International / Generale / Re: aiuto uln2803 on: April 27, 2013, 10:44:29 am
grazie mille..suppongo che vcc sia la tensione di alimentazione del relay(12o6 a seconda) e com andrà a massa?
4  International / Generale / aiuto uln2803 on: April 27, 2013, 10:17:27 am
ciao a tutti
dopo un pò di tempo di impegni costanti sono tornato a lavorare con arduino e l'elettronica in genere.
dovrei terminare un progettino che avevo iniziato e sviluppato con l'aiuto del forum ma ahimè ho perso tutti gli appunti che mi ero preso e mi ritrovo fermo...
il progetto consisteva in un registro a scorrimento 595 che pilotava 8 led tramite degli switch ( e fin qui ho tutto funzionante e già cablato su una millefori)...ora dovrei aggiungere 8 relay a 6V o 12 V e un uln2803..
il dubbio che mi si presenta è:
l'uln mi "mette a massa" (perdonate il termine poco tecnico) mentre il registro mi darebbe un HIGH a 1 logico sul pin..come posso farli lavorare insieme?
5  International / Generale / Re: shift out non funziona on: February 12, 2013, 04:44:23 pm
perfetto funziona..grazie  smiley-wink
6  International / Generale / Re: shift out non funziona on: February 12, 2013, 04:00:52 pm
Di primo acchito, vedo che non hai dichiarato pulsante1 come input.
Poi, che significa che non funziona più nulla?

significa che non succede proprio più nulla...teoricamente anche se non ho dichiarato pulsante1 come input dovrebbe rilevarmi la pressione dell'altro pulsante invece..buio totale dei led
7  International / Generale / shift out non funziona on: February 12, 2013, 03:48:14 pm
ciao a tutti..sto sperimentando l'uso dello shifout e mi ritrovo che con il codice seguente tutto funziona

Code:
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
const int pulsante=10;
int pulsantecont=0;
int memoria=1;
int buttonstate=0;
int lastButtonState = LOW;

//holders for infromation you're going to pass to shifting function
byte dataRED;

byte dataArrayRED[10];


void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode (pulsante,INPUT);
  Serial.begin(9600);

  //Arduino doesn't seem to have a way to write binary straight into the code
  //so these values are in HEX.  Decimal would have been fine, too.
  dataArrayRED[0] = 0xFE; //11111111
  dataArrayRED[1] = 0xFC; //11111110
  dataArrayRED[2] = 0xF8; //11111100
  dataArrayRED[3] = 0xF0; //11111000
  dataArrayRED[4] = 0xE0; //11110000
  dataArrayRED[5] = 0xC0; //11100000
  dataArrayRED[6] = 0x80; //11000000
  dataArrayRED[7] = 0xFF; //10000000
  dataArrayRED[8] = 0x00; //00000000
  dataArrayRED[9] = 0x40; //11100000

 


}

void loop() {
 buttonstate = digitalRead(pulsante);
 
  delay(20); // debounce

  if (buttonstate != lastButtonState) {
    if (buttonstate == HIGH && memoria==1) {
      pulsantecont++ ;

      if (pulsantecont >9) pulsantecont =0 ;


 
    dataRED = dataArrayRED[pulsantecont];
    Serial.println(dataRED,DEC);
 
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move 'em out
   
    shiftOut(dataPin, clockPin, dataRED);
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(300);


  }}}

// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first,
  //on the rising edge of the clock,
  //clock idles low

  //internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

  //clear everything out just in case to
  //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut�
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights.
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin 
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}





ma se nel codice aggiungo un altro pulsante con il seguente codice non succede + nulla

Code:
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 6;
////Pin connected to DS of 74HC595
int dataPin = 7;
const int pulsante=10;
const int pulsante1=9;
int pulsantecont=0;
int memoria=1;
int buttonstate=0;
int buttonstate1=0;
int lastButtonState = LOW;
int lastButtonState1 = LOW;
//holders for infromation you're going to pass to shifting function
byte dataRED;

byte dataArrayRED[10];


void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode (pulsante,INPUT);
  Serial.begin(9600);

  //Arduino doesn't seem to have a way to write binary straight into the code
  //so these values are in HEX.  Decimal would have been fine, too.
  dataArrayRED[0] = 0xFE; //11111111
  dataArrayRED[1] = 0xFC; //11111110
  dataArrayRED[2] = 0xF8; //11111100
  dataArrayRED[3] = 0xF0; //11111000
  dataArrayRED[4] = 0xE0; //11110000
  dataArrayRED[5] = 0xC0; //11100000
  dataArrayRED[6] = 0x80; //11000000
  dataArrayRED[7] = 0xFF; //10000000
  dataArrayRED[8] = 0x00; //00000000
  dataArrayRED[9] = 0x40; //11100000

 


}

void loop() {
 buttonstate = digitalRead(pulsante);
 
  delay(20); // debounce

  if (buttonstate != lastButtonState) {
    if (buttonstate == HIGH && memoria==1) {
      pulsantecont==2 ;

    }
      lastButtonState = buttonstate;
     
      buttonstate1 = digitalRead(pulsante1);
 
  delay(20); // debounce

  if (buttonstate1 != lastButtonState1) {
    if (buttonstate1 == HIGH && memoria==1) {
      pulsantecont==8 ;
    }
lastButtonState1 = buttonstate1;
 
    dataRED = dataArrayRED[pulsantecont];
    Serial.println(pulsantecont);
 
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move 'em out
   
    shiftOut(dataPin, clockPin, dataRED);
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(300);


  }}}

// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first,
  //on the rising edge of the clock,
  //clock idles low

  //internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

  //clear everything out just in case to
  //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut�
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights.
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin 
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}





La variabile memoria al momento è superflua ma mi servirà successivamente..qualcuno ha idea di come posso risolvere?alla fine di tutto devo avere 10 pulsanti che richiamino il rispettivo numero nel dataarrayred...
8  International / Generale / mascherine pulsanti on: February 05, 2013, 01:55:23 pm
ciao a tutti...
sto iniziando ad assemblare il mio progetto e ho previsto di inserire 5pulsanti per comandare un piccolo menù visualizzato su un display lcd...esiston in commercio delle mascherine tipo quelle che si trovano ad esempio sulle caldaie o i telecomandi?
9  International / Generale / alimentazioni arduino on: January 30, 2013, 03:20:53 pm
quanti mA può fornire al massimo l'uscita 5v di un arduino mega?
10  International / Generale / Re: Usare pulsanti analogici e password! on: January 30, 2013, 02:04:51 pm
Ciao.
Anche io pochi giorni fa ho sbattuto la testa per cercare di realizzare un progetto simile.
Il codice che ho scritto è questo:
Code:
//PSW CON PULSANTI//

//VARIABILI
int sequenza = 0;
//int buttonState_aux = 0;
//PULSANTI
const int first_button = 2;
const int second_button = 3;
const int third_button = 4;
const int fourth_button = 5;
//LED
const int first_led = 6;
const int second_led = 7;
const int third_led = 8;
const int fourth_led = 9;
//SEGNALE DI ABILITAZIONE
const int enable_signal = 10;
//LED DI FUNZIONAMENTO
const int on_led = 13;
//PIN COMUNICAZIONE SERIALE
const int serial = 11;
 
void setup () {
  pinMode (first_button, INPUT);   //primo pulsante
  pinMode (second_button, INPUT);   //secondo pulsante
  pinMode (third_button, INPUT);   //terzo pulsante
  pinMode (fourth_button, INPUT);   //quarto pulsante
  pinMode (first_led, OUTPUT);  //primo pulsante ok
  pinMode (second_led, OUTPUT);  //secondo pulsante ok nella giusta sequenza
  pinMode (third_led, OUTPUT);  //terzo pulsante ok nella giusta sequenza
  pinMode (fourth_led, OUTPUT);  //quarto pulsante ok nella giusta sequenza
  pinMode (enable_signal, OUTPUT); //segnale di abilitazione (sequenza ok)
  pinMode (on_led, OUTPUT); //led di funzionamento
}
 
void loop () {
digitalWrite(on_led, HIGH);

  //SE NON E' STATO PREMUTO ALCUN PULSANTE DELLA SEQUENZA
  if (sequenza == 0) {
    if (digitalRead(second_button) == HIGH) {
      sequenza = 1;
      digitalWrite(first_led, HIGH);
      delay(1000);    //per evitare che si entri immediatamente nell'if succesivo nel caso in cui il pulsante è tenuto premuto per + di un secondo
    }
  }
  //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA
  if (sequenza == 1 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(third_button)) {
    if (digitalRead(fourth_button) == HIGH) {
      sequenza = 2;
      digitalWrite(second_led, HIGH);
      delay(1000);
    }
  }
  //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA E IL SECONDO E' ERRATO
  if (sequenza == 1 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(third_button))) {
      sequenza = 0;
      digitalWrite(first_led, LOW);
  }
  //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA
  if (sequenza == 2 && !digitalRead(second_button) && !digitalRead(third_button) && !digitalRead(fourth_button)) {
    if (digitalRead(first_button) == HIGH) {
      sequenza = 3;
      digitalWrite(third_led, HIGH);
      delay(1000);
    }
  }
  //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA E IL TERZO E' ERRATO
  if (sequenza == 2 && (digitalRead(second_button) || digitalRead(third_button) || digitalRead(fourth_button))) {
      sequenza = 0;
      digitalWrite(first_led, LOW);
      digitalWrite(second_led, LOW);
  }
  //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA
  if (sequenza == 3 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(fourth_button)) {
    if (digitalRead(third_button) == HIGH) {
      sequenza = 0;    //RESETTO
      digitalWrite(fourth_led, HIGH);
      digitalWrite(enable_signal, HIGH);   //ATTIVO IL SEGNALE DI ENABLE    
      delay(1000);               //LO TENGO ATTIVO PER 1 SECONDO
      digitalWrite(enable_signal, LOW);  //LO DISATTIVO
      //RESETTO TUTTI I LED
      digitalWrite(first_led, LOW);
      digitalWrite(second_led, LOW);
      digitalWrite(third_led, LOW);
      digitalWrite(fourth_led, LOW);
    }
  }
  //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA E IL QUARTO E' ERRATO
  if (sequenza == 3 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(fourth_button))) {
      sequenza = 0;
      digitalWrite(first_led, LOW);
      digitalWrite(second_led, LOW);
      digitalWrite(third_led, LOW);
  }
}
Ho preso il sorgente da questo sito: http://www.agostinopolizzano.info/home/content/riconoscitore-di-sequenza-microcontrollore
è lo ho successivamente modificato alle mie esigenze.
In questo esempio alla pressione di un pulsante si accende un led, nel caso la sequenza non corrisponde si spengono tutti e riparte il programma.
Nella seconda versione che ho scritto, invece dei led ho usato un display LCD che alla giusta sequenza  stampa una stringa.
ecco il codice:
Code:
//PSW CON PULSANTI ED LCD 16*2//
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//VARIABILI
int sequenza = 0;
//int buttonState_aux = 0;
//PULSANTI
const int first_button = 10;
const int second_button = 9;
const int third_button = 8;
const int fourth_button = 7;
//LED
const int enable_signal = 6;
//LED DI FUNZIONAMENTO
const int on_led = 13;

 
void setup () {
  pinMode (first_button, INPUT);   //primo pulsante
  pinMode (second_button, INPUT);   //secondo pulsante
  pinMode (third_button, INPUT);   //terzo pulsante
  pinMode (fourth_button, INPUT);   //quarto pulsante
  pinMode (enable_signal, OUTPUT); //segnale di abilitazione (sequenza ok)
  pinMode (on_led, OUTPUT); //led di funzionamento
  lcd.begin(16, 2);
}
 
void loop () {
digitalWrite(on_led, HIGH);

  //SE NON E' STATO PREMUTO ALCUN PULSANTE DELLA SEQUENZA
  if (sequenza == 0) {
    if (digitalRead(second_button) == HIGH) {
      sequenza = 1;
      lcd.print("2");
      delay(1000);    //per evitare che si entri immediatamente nell'if succesivo nel caso in cui il pulsante è tenuto premuto per + di un secondo
    }
  }
  //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA
  if (sequenza == 1 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(third_button)) {
    if (digitalRead(fourth_button) == HIGH) {
      sequenza = 2;
      lcd.print("4");
      delay(1000);
    }
  }
  //SE E' GIA' STATO PREMUTO IL PRIMO PULSANTE DELLA SEQUENZA E IL SECONDO E' ERRATO
  if (sequenza == 1 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(third_button))) {
      sequenza = 0;
      lcd.clear();
  }
  //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA
  if (sequenza == 2 && !digitalRead(second_button) && !digitalRead(third_button) && !digitalRead(fourth_button)) {
    if (digitalRead(first_button) == HIGH) {
      sequenza = 3;
      lcd.print("1");
      delay(1000);
    }
  }
  //SE E' GIA' STATO PREMUTO IL SECONDO PULSANTE DELLA SEQUENZA E IL TERZO E' ERRATO
  if (sequenza == 2 && (digitalRead(second_button) || digitalRead(third_button) || digitalRead(fourth_button))) {
      sequenza = 0;
      lcd.clear();
  }
  //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA
  if (sequenza == 3 && !digitalRead(first_button) && !digitalRead(second_button) && !digitalRead(fourth_button)) {
    if (digitalRead(third_button) == HIGH) {
      sequenza = 0;    //RESETTO
      lcd.print("3");
      delay(1250);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Psw Corretta");
      digitalWrite(enable_signal, HIGH);   //ATTIVO IL SEGNALE DI ENABLE    
      delay(4000);               //LO TENGO ATTIVO PER 5 SECONDI
      digitalWrite(enable_signal, LOW);  //LO DISATTIVO
      lcd.clear();
    }
  }
  //SE E' GIA' STATO PREMUTO IL TERZO PULSANTE DELLA SEQUENZA E IL QUARTO E' ERRATO
  if (sequenza == 3 && (digitalRead(first_button) || digitalRead(second_button) || digitalRead(fourth_button))) {
      sequenza = 0;
      lcd.clear();
  }
}
Spero di esserti stato di aiuto.
Hertz.

semplice ed efficace...in aggiunta puoi aggiungerci questo http://www.robot-italy.com/it/touch-shield.html
mi è venuto la voglia di farlo pure a me (non so per cosa lo userò ma lo userò smiley-razz)
11  International / Generale / Re: Usare pulsanti analogici e password! on: January 30, 2013, 11:52:23 am
secondo me è possibile..basterebbe creare una variabile X..a ogni pulsante dai la possibilità di aumentare di n il valore di x e al raggiungimento di un valore predefinito Y permetti di visualizzare la schermata precedente..esemplificando

x=0
se premi i pulsanti nella sequenza 1,3,4,2 ottieni il valore 5
se li premi 2,4,1,3 ottieni 6

se 5 è il valore corretto accedi al livello successivo...spiegato alla "carlona" ma potrebbe essere un punto di partenza..spero per te smiley-razz
12  International / Generale / Re: problemi lcd on: January 26, 2013, 07:23:37 am
Scusa ma:
Code:
const int led1= 9;
const int led2 = 10;
const int led3= 11;
const int led4= 12;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Non va bene. I pin 12 e 11 li condividi tra il display e la tua interfaccia a led.
Non puoi assegnarli alla libreria e poi farci sopra dele digitalWrite come vedo nel tuo codice:
Code:
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);

si..quell'errore è gia stato corretto.aggiungendo gli altri 4pin dati sull'lcd sembra si sia sistemato ma quando inserisco il comando lcd.Print("valore contatore") i caratteri non vengono visualizzati correttamente...
13  International / Generale / Re: problemi lcd on: January 25, 2013, 01:20:07 pm
ciao
questo mi sembra un errore
Code:
const int buttonPin0=4;
Code:
pinMode(buttonPin0,INPUT);
il pin 4 serve al lcd
Code:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

stefano
il problema non era quello..ha preso a funzionare regolarmente nel momento in cui o collegato i pin da db0 a db3 inserendo lcd.print nel void LedOn..ma,non mi scrive altro se non numeri..
14  International / Generale / Re: problemi lcd on: January 25, 2013, 10:53:31 am
possibile che abbia rovinato lo schermo collegando anche i pin db0,db1,db2,db3????
15  International / Generale / Re: problemi lcd on: January 25, 2013, 08:32:09 am
ho anche notato che eliminando entrambi i LedOn(buttonPushCounter) l'lcd mostra perfettamente il conteggio...
Pages: [1] 2 3 4