Loading...
  Show Posts
Pages: [1]
1  International / Software / Re: firmata arduino processing irremote, togliere cavallotto on: May 19, 2013, 11:45:11 am
grazie anche a te,

vorrei riuscire a farlo con Firmata perchè ho altri ingressi/uscite da utilizzare inserendo sensori ecc.. e senza Firmata è complicato.  smiley-cry

sono arrivato a questo punto:
StandardFirmata NON permette di leggere lo stato dei pin digitali
SimpleDigitalFirmata permette di leggere lo stato dei pin digitali

inserito in SimpleDigitalFirmata lo sketch del telecomando irRemote e il tutto funziona  smiley smiley smiley

ora però non funziona la parte analogica che devo aggiungere  smiley-cry
2  International / Software / Re: firmata arduino processing irremote, togliere cavallotto on: May 18, 2013, 05:41:35 pm
-Processing 1.5.1 (con il 2 Firmata non mi funziona)
-Firmata ( StandardFirmata) lo sketch (libreria) che carico su arduino per far comunicare arduino con Processing, non posso carricare un secondo sketch..
-irRemote la libreria per far funzionare i classici telecomandi da televisore.

sketch per telecomando:
Code:
#include <IRremote.h>
int statu=0;
int stata=0;
int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT);
  //Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);

    if((results.value == 1 )&& (stata ==0) or (results.value == 65537) && (stata ==0)){

      digitalWrite(11, HIGH);
      digitalWrite(9, HIGH);
      stata=1;
      delay (400);
    }

    else if((results.value == 1)&& (stata==1) or (results.value == 65537) && (stata==1)){
      //stato = "spento";
      digitalWrite(11, LOW);
      digitalWrite(9, LOW);
      stata = 0;
      delay (400);
    }
    if((results.value == 2 )&& (statu ==0) or (results.value == 65538) && (statu ==0)){

      digitalWrite(10, HIGH);
      digitalWrite(6, HIGH);
      statu=1;
      delay (400);
    }

    else if((results.value == 2)&& (statu==1) or (results.value == 65538) && (statu==1)){
      //stato = "spento";
      digitalWrite(10, LOW);
      digitalWrite(6, LOW);
      statu = 0;
      delay (400);
    }
   
   
    irrecv.resume(); // Receive the next value
  }
}


questo sketch lo ho copiato all'interno di "StandardFirmata" le varie parti (non tutte) nelle relative posizioni, e aggiunto la libreria "IrRemote",
caricato "StandardFirmata modificato" il telecomando funziona regolarmente con arduino
----
 if((results.value == 1 )&& (stata ==0) or (results.value == 65537) && (stata ==0)){ (  il mio telecomando "RC6" il tasto 1 da alcune volte 1 e altre volte 65537, lo si vede da serial monitor)
-----
non posto "standardFirmata" perchè è enorme e lo si trova facilmente




riposto lo sketch di processing:

Code:

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;
PImage prova, ciao;
color off = color(50);
color on = color(255);
int stato =0;


void setup() {
  size(1000, 1000, P3D);
  smooth();
  prova = loadImage ("Immagines 078.gif");
  ciao = loadImage ("Immagine.gif");
  prova.resize(width, height);
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[2], 57600);

  // arduino.pinMode(9, Arduino.OUTPUT);
  // arduino.pinMode(11, Arduino.OUTPUT);
}

void draw() {

  background(prova);

  stroke(on);

  // for (int i = 0; i <= 13; i++) {
  if (arduino.analogRead(2)>= 512) {    // cavallotto tra D9 a A2
    noStroke();
    fill(on);
    rect( 60, 80, 30, 5);

    stroke(60);
    strokeWeight (3);
    fill(200, 200, 200);
    ellipse (55, 33, 50, 50);
    image (ciao, 30, 10, 50, 50);
    image(ciao, 30, 11, 50, 50);
    // stato = 1;
  }
  else {
    stroke(60);
    strokeWeight (3);
    fill(200, 200, 200);
    ellipse (875* 60, 33, 50, 50);   

    image(ciao, 30, 11, 50, 50);
    image(ciao, 30, 12, 50, 50);
    image(ciao, 30, 13, 50, 50);
    image(ciao, 30, 14, 50, 50);   
    image(ciao, 30, 15, 50, 50);     
    image(ciao, 30, 16, 50, 50);
    image(ciao, 30, 17, 50, 50);   
    image(ciao, 30, 18, 50, 50); 


    noStroke();
    fill(off);

    rect(60, 80, 30, 5);
    //stato =0;
  }
}
//}

void mousePressed()
{
  if ( mouseX >10 && mouseX < 100 && stato ==0) {

    arduino.digitalWrite(11, Arduino.HIGH);
    arduino.digitalWrite(9, Arduino.HIGH);
    stato = 1;
  }
  else if ( mouseX >10 && mouseX < 100 && stato ==1) {
    arduino.digitalWrite(11, Arduino.LOW);
    arduino.digitalWrite(9, Arduino.LOW);
    stato =0;
  }
}


lo schema,
arduino UNO
tsop ricevitore telecomando al pin A0
rele uscita digitale 11
cavallotto da D9 a A2

non c'è altro
3  International / Software / Re: firmata arduino processing irremote, togliere cavallotto on: May 18, 2013, 03:24:38 pm
pighixxx grazie per avermi risposto

riformulo il tutto...
-Arduino
-Processing
-Firmata
-irRemote

ho fatto un programma con Processing,
un tasto tridimensionale premuto con il Mouse va a scomparsa,
nel frattempo un rettangolo da nero diventa bianco, indicando l'avvenuta accensione del rele collegato ad arduino.
e fin qui ok.

ho voluto aggiungere il telecomando, un vecchio Philips RC6, il  ricevitore è un TSOP.
 fatto lo sketch normale per "arduino", il quale , con il tasto "1" del telecomando mette in alto l'uscita digitale 11,
con il tasto "2" mette in alto l'uscita digitale 7...ecc....

detto sketch devo farlo parlare con Processing tramite Firmata,

non trovando nulla in rete da prendere spunto,  ho provato banalmente a mettere nella libreria "standardFirmata lo sketch del  telecomando,
ognuna delle sue parti evidentemente nella giusta posizione, la parte di Setup nel Setup, quella del Loop nel Loop ecc...

miracolosamente una volta caricato il nuovo "StandardFirmata",  il telecomando comanda arduino accendendo il rele,  processing comanda arduino indipendentemente accendendo lo stesso rele...ok,

ora devo fare che  se con il telecomando  accendo il rele, il pulsante disegnato di Processing entri a scomparsa e metta il  rettangolo da nero a bianco (quello che fa con il mouse).

mi sono detto semplice... con il telecomando oltre al pin rele metto il pin "9" alto e dico a processing quando il pin 9 è alto fammi entrare il pulsante..

ecco, non funziona,
 poi se faccio un cavallotto dal pin 9 al pin A2 e dico a Processing quando il pin A2 è alto fammi entrare il pulsante...funziona correttamente.

come posso fare per dire a Processing quando il pin digitale "9" in uscita è alto di fare quello che deve fare?


if (arduino.digitalRead(9) == Arduino.HIGH) {  (non funziona)

----> cavallotto dal (9) a (A2)------>

if (arduino.analogRead(2) > 512) {    (FUNZIONA)
4  International / Software / Re: firmata arduino processing irremote, togliere cavallotto on: May 18, 2013, 01:39:03 pm
  in effetti è strana e difficile da spiegare, anche perchè non credo si veda tutti i giorni un collegamento diretto tra pin digitale e analogico,

quello che mi proponi lo avevo gia provato prima di trovare la soluzione del cavalloto,
 ora ho riprovato  ma non funziona.  smiley-confuse

forse pretendo di leggere un segnale in uscita con digitalRead che forse serve per leggere solo segnali in entrata(?), provato anche  con digitalWrite...

scusa se dico cavolate ma è da pochi mesi che ho scoperto arduino e la programmazione. 
 


5  International / Software / Re: firmata arduino processing irremote, togliere cavallotto on: May 18, 2013, 10:25:19 am
si, mi sono spiegato male,
Code:
if (arduino.analogRead(2)>= 512) {    // cavallotto tra D9 a A2

analogRead(2) prende il segnale da pin digitale (9),  questo collegamento l'ho fatto perchè non riesco a dire al programma,
al posto di
analogRead(2)>= 512 (alto o basso 0-1023)

ad esempio:
digitalRead (9) == 1;
oppure
digitalRead (9) == HIGH;

non funziona.
siccome devo mettere 4 pulsanti ed altro,se metto i cavallotti, i pin non mi bastano .
la soluzione potrebbe essere semplice ma non ci arrivo



 
6  International / Software / firmata arduino processing irremote, togliere cavallotto on: May 18, 2013, 07:51:17 am
spero sia il forum giusto  smiley-slim
riesco a far funzionare il telecomando con Firmata e Processing facendo un cavallotto che dall'uscita digitale 9 di arduino rientra in A2,

non c'e modo di fare che nel caso che il D9 sia alto ..fai ?
il tutto funziona ma voglio togliere il cavallotto  smiley-sweat

questo { lo sketch di Processing, il bottone virtuale entra e esce accendendo un rele sia col telecomando sia con il mouse,
in un commento  si capisce dove deve essere modificato

Code:
import processing.serial.*;

import cc.arduino.*;

Arduino arduino;
PImage prova, ciao;
color off = color(50);
color on = color(255);
int stato =0;


void setup() {
  size(1000, 1000, P3D);
  smooth();
  prova = loadImage ("Immagines 078.gif");
  ciao = loadImage ("Immagine.gif");
  prova.resize(width, height);
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[2], 57600);

  // arduino.pinMode(9, Arduino.OUTPUT);
  // arduino.pinMode(11, Arduino.OUTPUT);
}

void draw() {

  background(prova);

  stroke(on);

  // for (int i = 0; i <= 13; i++) {
  if (arduino.analogRead(2)>= 512) {    // cavallotto tra D9 a A2
    noStroke();
    fill(on);
    rect( 60, 80, 30, 5);

    stroke(60);
    strokeWeight (3);
    fill(200, 200, 200);
    ellipse (55, 33, 50, 50);
    image (ciao, 30, 10, 50, 50);
    image(ciao, 30, 11, 50, 50);
    // stato = 1;
  }
  else {
    stroke(60);
    strokeWeight (3);
    fill(200, 200, 200);
    ellipse (875* 60, 33, 50, 50);   

    image(ciao, 30, 11, 50, 50);
    image(ciao, 30, 12, 50, 50);
    image(ciao, 30, 13, 50, 50);
    image(ciao, 30, 14, 50, 50);   
    image(ciao, 30, 15, 50, 50);     
    image(ciao, 30, 16, 50, 50);
    image(ciao, 30, 17, 50, 50);   
    image(ciao, 30, 18, 50, 50); 


    noStroke();
    fill(off);

    rect(60, 80, 30, 5);
    //stato =0;
  }
}
//}

void mousePressed()
{
  if ( mouseX >10 && mouseX < 100 && stato ==0) {

    arduino.digitalWrite(11, Arduino.HIGH);
    arduino.digitalWrite(9, Arduino.HIGH);
    stato = 1;
  }
  else if ( mouseX >10 && mouseX < 100 && stato ==1) {
    arduino.digitalWrite(11, Arduino.LOW);
    arduino.digitalWrite(9, Arduino.LOW);
    stato =0;
  }
}



grazie
7  International / Software / Re: BlinkWithoutDelay con interruttore o pulsante on: April 07, 2013, 03:34:20 am
scusa il ritardo
lo sketch non funziona e comunque per il momento ho rinunciato smiley-sleep
8  International / Software / Re: BlinkWithoutDelay con interruttore o pulsante on: March 27, 2013, 05:33:55 am
i millis mi stanno facendo impazzire, ho provato anche con secTimer e swrtc, metro.

do alimentazione ad Arduino e non deve succedere nulla,
pigio i pulsante e BlinkWithoutDelay deve iniziare a contare i 5 secondi (come fa in origine) per poi accendere il led,

se pigio il pulsante mentre sta contando, deve ripartire da zero a ricontare i 5 secondi per poi accendere il led.

una volta che ho capito questo, posso continuare a sviluppare lo sketch  smiley
9  International / Software / BlinkWithoutDelay con interruttore o pulsante on: March 26, 2013, 06:20:19 pm
salve a tutti, la mia terza domanda..

se faccio partire lo sketch di BlinkWithoutDelay parte con il led spento per 1 secondo (i secondi ora sono 5),

qualsiasi sistema provo per farlo partire non dopo il reset ma con interruttore o pulsante con Buttonstate, arduino non conta i primi 5 secondi (led spento),
ma parte a led acceso o con meno secondi, dipende quando inserisco l'interruttore.

in realtà questo sketch é un esempio delle mille prove fatte, diverso da quello mio, ma rispecchia a ciò che mi serve.
in pratica mi serve far partire BlinkWithoutDelay esattamente come parte lui (e così come é) da reset (led spento per 5 secondi) ma con comando esterno.
grazie

 
Code:
const int ledPin =  13;   
int ledState = LOW;             
long previousMillis = 0;         
int start = 10;        //aggiunto questa
long interval = 5000;   

void setup() {
  pinMode(10, INPUT);     //aggiunto questa
  pinMode(ledPin, OUTPUT);     
}

void loop()
{
    start = digitalRead (10); //aggiunto questa
 
if ( start==HIGH) {          //aggiunto questa
    unsigned long currentMillis = millis();
 
if(currentMillis - previousMillis > interval) {
     previousMillis = currentMillis;   

 if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

 
    digitalWrite(ledPin, ledState);
  }
}              //aggiunto questa
}


10  International / Software / Re: valore massimo on: March 16, 2013, 01:54:45 pm
non potevo venir qui prima anzichè perdere tutto il sabato  smiley-mad
Grandi!

ora mi resta da capire perchè cosi semplicemente funziona, per il minimo devo prima fare val-1023/2
se no mi restituisce "0"
grazie
11  International / Software / valore massimo on: March 16, 2013, 10:04:30 am
salve

nello sketch sotto riesco a visualizzare valori massimi e minimi
ma ad ogni inversione di valore, cambiano i valori massimi e minimi   impressi.

mi serve che il valore massimo letto cambi in alto solo al suo superamento e rimanga impresso
e il valore minimo letto cambi  solo al suo superamento verso il basso.
è possibile?
grazie





Code:

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int val =0 ;
int valMax= 0;
int valMin= 0;
 
void setup() {
 lcd.begin(20,4);
}

void loop() {
  val = analogRead (A2);
  delay (200);
  valMax = analogRead (A2);
  delay (200);
  valMin = analogRead (A2);
 
  lcd.setCursor(0, 0);
  lcd.print(val);
  lcd.print("  ");
 
 if (val > valMin +10 ){
  lcd.setCursor(0, 1);
  lcd.print(valMin);
  lcd.print("  ");
}

 if (val < valMax -10 ){
  lcd.setCursor(0, 2);
  lcd.print(valMax);
  lcd.print("  ");
}
 
}
 
12  International / Software / Re: 2 sensori di temperatura con un allarme e tacitazione on: January 20, 2013, 06:00:07 am
su due piedi ti proporrei questo schema:
 


sono ancora agli inizi, ci ho provato ma ancora per me troppo complicato
Grazie
13  International / Software / Re: 2 sensori di temperatura con un allarme e tacitazione on: January 20, 2013, 05:56:58 am
ho risolto  smiley
mancava una condizione nei due termostati

  }
if ((temperatura1 < 23) and (temperatura < 23) ) {
    digitalWrite(ledRosso, LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=0;
    delay (1000);
  }
-----------------------------------------------------

  }
if ((temperatura1 < 23) and (temperatura < 23) ) {
    digitalWrite(ledRosso, LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=0;
    delay (1000);
  }
14  International / Software / Re: 2 sensori di temperatura con un allarme e tacitazione on: January 19, 2013, 06:27:15 am
ho modificato il post, spero si legga bene  smiley
15  International / Software / 2 sensori di temperatura con un allarme e tacitazione on: January 18, 2013, 07:52:17 pm
Ciao a tutti mi chiamo Silvio, e sono da poco entrato in questo mondo.
Lo sketch qui sotto è funzionante, ma è solo per 1 sensore, la temperatura quando supera un livello impostato si accende un LED e suona un buzzer,
quando la temperatura scende sotto lo stesso valore impostato il LED e il buzzer si spengono,
se LED e buzzer stanno funzionando con il tasto tacitazione si spengono,
LED e Buzzer si rimettono in funzione al prossimo superamento

il problema è che quando aggiungo un secondo sensore,
-con le dovute aggiunte e modifiche
 le due temperature vengono lette dal LCD regolarmente
ma se supero la temperatura impostata del secondo sensore il led lampeggia, e di conseguenza alche il buzzer e la tacitazione non funzionano,
mentre se super solo il primo sensore funziona regolarmente.
penso che sia colpa dell'ultima parte dello sketch riportato qui sotto,
la parte:
 if (temperatura < 23) {
    digitalWrite(ledRosso, LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=0;
    delay (1000);
che è riportata anche al secondo sensore.
come posso ovviare ciò?
spero si essermi spiegato bene,
grazie in anticipo


1 sensore solo e funziona correttamente :

//collegamenti,
//pin 13 led
//pin 6 buzzer
//pin 7 pulsante tacitazione
//A0 sensore



Code:

#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);  
double MioSensore(int RawADC) {
  long Resistenza;  
  double Temperatura;
  Resistenza=((10240000/RawADC) - 10000);
  Temperatura = log(Resistenza);
  Temperatura = 1 / (0.001129148 + (0.000234125 * Temperatura) + (0.0000000876741 * Temperatura * Temperatura * Temperatura));
  Temperatura = Temperatura - 273.15;
  return Temperatura;
}
  int tastoTaci=7;
  int ledRosso=13;
  int buzzer=6;
  
  int CambiareLeCose=0;
  
void fammiVedere(int valore) {
lcd.print (int(valore));
}
void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(tastoTaci, INPUT);
  pinMode(ledRosso, OUTPUT);
}
#define termometro_1 0  
 int temperatura;
void loop() {
  lcd.setCursor(0, 0);
  temperatura=MioSensore(analogRead(termometro_1));  
  lcd.print("MOTORE ");
  fammiVedere(temperatura);
  lcd.print((char)223);
  lcd.setCursor(0, 2);
  lcd.print("il mio nome");  
  
  //xxxxxxxxxxxxxxxxxxxxxxxxx
    tastoTaci=digitalRead(7);
if ((temperatura > 23) and (tastoTaci==LOW)and(CambiareLeCose==0)) {
    digitalWrite(ledRosso,HIGH);
    analogWrite(buzzer, 150);
    CambiareLeCose=1;
    delay (1000);
  }
  
else if ((temperatura > 23) and (tastoTaci==HIGH) and (CambiareLeCose==1)){
    digitalWrite(ledRosso,LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=1;
    delay (1000);
  }
if (temperatura < 23) {
    digitalWrite(ledRosso, LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=0;
    delay (1000);
  }
}


2 sensori, funziona riguardo l'LCD
ma non funziona l'allarme e la tacitazione, cioe:

ho 2 sensori, 1 buzzer, 1 LED e 1 tasto tacitazione
il primo dei 2 sensori che supera la soglia di temperatura deve far suonare il buzzer, accendere il LED e col pulsante tacitazione fermare l'alarme,
se non fermo l'allarme col pulsante tacitazione.....quando la temperatura rientra sotto la soglia l'allarme si ferma da solo,
con 1 sensore funziona, con due sensori no

Code:
#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);  
double MioSensore(int RawADC) {
  long Resistenza; 
  double Temperatura;
  Resistenza=((10240000/RawADC) - 10000);
  Temperatura = log(Resistenza);
  Temperatura = 1 / (0.001129148 + (0.000234125 * Temperatura) + (0.0000000876741 * Temperatura * Temperatura * Temperatura));
  Temperatura = Temperatura - 273.15;
  return Temperatura;
}
  int tastoTaci=7;
  int ledRosso=13;
  int buzzer=6;
 
  int CambiareLeCose=0;
 
void fammiVedere(int valore) {
lcd.print (int(valore));
}
void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(tastoTaci, INPUT);
  pinMode(ledRosso, OUTPUT);
}
#define sensoreMotore 0 
#define sensoreGas 1
 
 int temperatura;
 int temperatura1=temperatura;
 
void loop() {
  lcd.setCursor(0, 0);
  temperatura=MioSensore(analogRead(sensoreMotore));  
  lcd.print("MOTORE ");
  fammiVedere(temperatura);
  lcd.print((char)223);
  lcd.setCursor(0, 2);
  //lcd.print("il mio nome"); 
 
  //xxxxxxxxxxxxxxxxxxxxxxxxx
    tastoTaci=digitalRead(7);
if ((temperatura > 23) and (tastoTaci==LOW)and(CambiareLeCose==0)) {
    digitalWrite(ledRosso,HIGH);
    analogWrite(buzzer, 150);
    CambiareLeCose=1;
    delay (1000);
  }
   
else if ((temperatura > 23) and (tastoTaci==HIGH) and (CambiareLeCose==1)){
    digitalWrite(ledRosso,LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=1;
    delay (1000);
  }
if (temperatura < 23) {
    digitalWrite(ledRosso, LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=0;
    delay (1000);
  }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  temperatura1=MioSensore(analogRead(sensoreGas));
  lcd.print("GAS ");
  fammiVedere(temperatura1);
  lcd.print((char)223);   
  lcd.setCursor(-4, 1);
 
      tastoTaci=digitalRead(7);
if ((temperatura1 > 23) and (tastoTaci==LOW)and(CambiareLeCose==0)) {
    digitalWrite(ledRosso,HIGH);
    analogWrite(buzzer, 150);
    CambiareLeCose=1;
    delay (1000);
  }
   
else if ((temperatura1 > 23) and (tastoTaci==HIGH) and (CambiareLeCose==1)){
    digitalWrite(ledRosso,LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=1;
    delay (1000);
  }
if (temperatura1 < 23) {
    digitalWrite(ledRosso, LOW);
    analogWrite(buzzer,LOW);
    CambiareLeCose=0;
    delay (1000);
  }
 
}


Pages: [1]