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.  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  ora però non funziona la parte analogica che devo aggiungere 
|
|
|
|
|
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: #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: 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.  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, 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  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  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 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
|
|
|
|
|
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 
|
|
|
|
|
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 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  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 #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(" "); } }
|
|
|
|
|
13
|
International / Software / Re: 2 sensori di temperatura con un allarme e tacitazione
|
on: January 20, 2013, 05:56:58 am
|
ho risolto  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); }
|
|
|
|
|
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 #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 #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); } }
|
|
|
|
|