Show Posts
Pages: 1 ... 38 39 [40] 41 42 43
586  Using Arduino / Networking, Protocols, and Devices / RF22 Library, how to use that? on: June 18, 2011, 09:54:55 am
Hi, first of all thanks to mikem for this library.
My project will see something like 10 RFM22B modules to comunicate on a theatre stage.
One is on a Arduino 2009, that receives MIDI signals from a PC (OK) and should send via RFM22B 'commands' to the other RF22s.
In this moment i'm trying to understand how to comunicate with two of them, both plugged to two stand-alone atmega328p, powered with 2 AA 1,5V batteries (2,9V or similar..).
I encountered first problems due to my lack of knowledge in programming, so i'm asking here an help to understand where i'm mistaking.

this is my client code:
Code:
#include <SPI.h>
#include <RF22.h>

RF22 rf22;

void setup()
{
  Serial.begin(9600);
  if (!rf22.init())
    Serial.println("RF22 init failed");
  // Defaults after init are 434.0MHz, modulation GFSK_Rb2_4Fd36
  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
   
}

void loop() {
  if (digitalRead(8) == HIGH) {
    digitalWrite(9, HIGH);
    uint8_t data[] = {65};
    rf22.send(data, 1);   
    rf22.waitPacketSent();
  } 
  else if (digitalRead(8) == LOW) {
    digitalWrite(9, LOW);
  }
}

and this is my server code:
Code:
#include <SPI.h>
#include <RF22.h>

RF22 rf22;

void setup()
{
  Serial.begin(9600);
  if (!rf22.init())
    Serial.println("RF22 init failed");
  // Defaults after init are 434.0MHz, modulation GFSK_Rb2_4Fd36
  pinMode (9, OUTPUT);
}

void loop() {
  rf22.waitAvailable();
  uint8_t buf[RF22_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);
  int comp = int(buf);
  if (rf22.recv(buf, &len)) {
    blink1time();
    blink1time();
    blink1time();
    if (comp == 65) {
      digitalWrite (9, HIGH);
    }
    else {
      digitalWrite (9, LOW);
    }
  }
}

void blink1time() {
  digitalWrite (9, HIGH);
  delay(50);
  digitalWrite (9, LOW);
  delay(50);
}

what should happen is that if pin 8 is HIGH on one chip, it should send the byte '65', than if the server receive something it blinks a LED 3 times, and if the byte is '65', the LED should remain ON.

But what happens is that when pin 8 becomes HIGH, i can see the three blinks on the second 'station', but the LED doesn't remain ON, as it shoul be if the byte is recognized.

I have to say that i'm doing this, because, since the chips are standalone, i cannot debug seeing results in a serial monitor.

Wish you can help me in some way.
thanks!
587  Using Arduino / Audio / Re: MIDI in from pc thru USB. on: June 18, 2011, 08:10:24 am
i'm currently using an arduino 2009 as an ISP programmer. with the spare chips in a bboard done by me, just to plug the DIY cable.
588  International / Generale / Re: Servo modificato on: June 18, 2011, 07:21:48 am
allora, il servo modificato diventa un motorino dc. se non hai più il potenziometro, non c'è più il feed back di posizione, quindi non puoi più usarlo come servo, a meno di non ripristinare tutto.
ma visto il costo esiguo dei servi, questo te lo tieni modificato, vai in un negozio di modellismo e te ne compri altri.

ciao, Davide.
589  International / Generale / Re: Aiuto Libreria RF22 on: June 18, 2011, 07:09:35 am
no, scusa, hai ragionissima! è che stavo di fretta e ho copiaincollato al volo senza pensarci. sorry!

allora, c'è qualcosa che non va nel mio codice, potreste dirmi dove sbaglio?
sto facendo una prova con un pulsante su un chip, il 'send' di un byte, e alla ricezione lampeggia tre volte il LED, poi se viene letto quel byte dovrebbe rimanere il LED acceso.
  con questo codice, avvengono i tre lampeggi di ricezione 'qualcosa', ma non paragona il byte per tenere acceso il LED:

lato client:
Code:
#include <SPI.h>
#include <RF22.h>

RF22 rf22;

void setup()
{
  Serial.begin(9600);
  if (!rf22.init())
    Serial.println("RF22 init failed");
  // Defaults after init are 434.0MHz, modulation GFSK_Rb2_4Fd36
  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
   
}

void loop() {
  if (digitalRead(8) == HIGH) {
    digitalWrite(9, HIGH);
    uint8_t data[] = {65};
    rf22.send(data, 1);   
    rf22.waitPacketSent();
  } 
  else if (digitalRead(8) == LOW) {
    digitalWrite(9, LOW);
  }
}


e lato server:
Code:
#include <SPI.h>
#include <RF22.h>

RF22 rf22;

void setup()
{
  Serial.begin(9600);
  if (!rf22.init())
    Serial.println("RF22 init failed");
  // Defaults after init are 434.0MHz, modulation GFSK_Rb2_4Fd36
  pinMode (9, OUTPUT);
}

void loop() {
  rf22.waitAvailable();
  uint8_t buf[RF22_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);
  int comp = int(buf);
  if (rf22.recv(buf, &len)) {
    blink1time();
    blink1time();
    blink1time();
    if (comp == 65) {
      digitalWrite (9, HIGH);
    }
    else {
      digitalWrite (9, LOW);
    }
  }
}

void blink1time() {
  digitalWrite (9, HIGH);
  delay(50);
  digitalWrite (9, LOW);
  delay(50);
}

c'è da dire che sto usando i chip standalone per poterli pilotare a 3V (2 pile AA), visto che le logiche dell'RFM22B sono a 3V, e quindi non mi è possibile fare debug su un monitor seriale.
l'unico riscontro che posso avere è far fare qualcosa al LED.

Qualcuno può gentilmente aiutarmi?

grazie, Davide.
590  International / Generale / Re: Aiuto Libreria RF22 on: June 17, 2011, 01:41:50 pm
..e se faccio così e risparmio un passaggio?
se pò ffa?

uint8_t data[] = {map(analogRead(A0),0,1023,0,255)};
rf22.send(data, sizeof(data));
591  International / Generale / Re: Aiuto Libreria RF22 on: June 17, 2011, 12:58:39 pm
ok, questo ha funzionato, o meglio lo ha compilato, adesso vedo se funziona..

byte val = map(analogRead(A0),0,1023,0,255);   
uint8_t data[] = {val};
rf22.send(data, sizeof(data));

Mi dite se è corretto?
592  International / Generale / Re: Aiuto Libreria RF22 on: June 17, 2011, 11:56:53 am
neanche così funziona..

byte val = map(analogRead(A0),0,1023,0,255);   
uint8_t data[] = (val);
rf22.send(data, sizeof(data));

mi da quest'errore:
rf22_client_pot:27: error: initializer fails to determine size of ‘data’

come si scrive questa cosa? sembra così semplice!
593  Using Arduino / Audio / Re: MIDI in from pc thru USB. on: June 17, 2011, 11:42:36 am
Thank you for the link.
I already read this link, but jumped away, because, apart from the good concept of the HID device, i found it difficoult to follow instructions about that project.
the problem is that i didn't understand so much and, in hurry, i have found simpler to build a simple MIDI Shield..
But if you can tell me, that is simler of what it appears to me, please explain to me.
thank you, Davide.
594  International / Generale / Re: Aiuto Libreria RF22 on: June 17, 2011, 11:28:26 am
è vero, sono due byte..
ora con questo:
uint8_t data[] = byte(analogRead(A0));
rf22.send(data, sizeof(data));

l'errore che mi da è questo:
rf22_client_pot:27: error: initializer fails to determine size of ‘data’

però, scusa, questo è funzionante dallo sketch d'esempio:
uint8_t data[] = "Hello World!";
rf22.send(data, sizeof(data));

se ho capito, ogni lettera di "Hello World!" è un byte, che viene registrato in data[].
quindi rf22.send manda la sequenza di byte, con numero totale di byte 12, giusto?

allora io dovrei tradurre con map(), la lettura analogica, in un numero da 0 a 255, poi posso inviarlo come un singolo byte?

provo..
se avete qualche suggerimento, fa piacere..
ciaps!
595  International / Generale / Aiuto Libreria RF22 on: June 16, 2011, 04:50:31 pm
ciao, sto cercando di far lavorare la libreria RF22 -> http://www.open.com.au/mikem/arduino/RF22/
e lo sketch di prova va bene. c'è uno sketch per il server e uno per il client.
nello sketch i due chip si mandano delle scritte, tipo Hello World, etc..

ora io sto provando a mandare un byte, che sia la lettura di un potenziometro su A0, solo che non riesco a capire come si traduce analogRead() in un byte da poter spedire con RF22.

le parti funzionanti sono:
uint8_t data[] = "Hello World!";
    rf22.send(data, sizeof(data));

sul client e:
while (1)
  {
    rf22.waitAvailable();
   
    // Should be a message for us now   
    uint8_t buf[RF22_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
    if (rf22.recv(buf, &len))
    {
      Serial.print("got request: ");
      Serial.println((char*)buf);
sul server..

ho cambiato la parte client in questo:
uint8_t data[] = byte(analogRead(A0));
    rf22.send(data, sizeof(data));
ma non gli piace...
come si scrive giusto?

grazie.
596  International / Generale / Re: pwm sulle analogiche.. on: June 16, 2011, 04:36:06 pm
Ciao, e grazie per la risposta.
si quel link l'avevo trovato, ma così di getto mi sembrava complicato. cmq se mi dici che quello è il solo metodo mi metto a studiarlo.

grazie. ho un problema di scrittura con la RFM22B di libreria, ma apro un altro topic...
597  International / Generale / Re: Sensore di movimento on: June 16, 2011, 09:14:04 am
io non li conosco, ma avete detto che non modulano, danno solo on/off. io lo farei con un sensore di distanza, ne basterebbero idealmente 4, uno per ogni angolo della stanza, e così modificheresti 4 indirizzi MIDI, intanto magari cominci con uno, e fai una specie di theremin.. solo che così avresti una nota continua a cui modificare che so, pitch, resonance, volume, timbro...

magari il più semplice è due sensori, entro nella stanza e il sensore in X alza il volume della nota, se mi sposto a destra e sinistra invece cambio il pitch. alzo le mani, risonanza...
598  International / Generale / pwm sulle analogiche.. on: June 16, 2011, 09:08:00 am
ciao a tutti, ho cercato un pò in giro, ma non trovo molto. solo sul playground ho trovato due guide per fare dei fade su tutti i 20 pin di arduino, ma non so se è quello che mi serve.
praticamente siccome uso delle schedine radio (RFM22B) con comunicazione SPI, sono a corto di uscite PWM. per problemi di spazio vorrei evitare un altro chip per fare multiplexing.
secondo voi, posso usare altri pin per ottenere dei fade in PWM?
non so bene come si scrive a mano nel migliore dei modi il timing del PWM, anche se so bene cos'è. Intendo in modo da non interrompere la lettura seriale..
cioè, nel mio progetto dovrebbe arrivare un segnale di 3 byte (start, indirizzo e dato) che già ho usato per muovere via radio dei servi, in cui l'indirizzo è uno dei (mettiamo) 10 LED (non saranno LED, ma EL-Wire, ma è uguale..), e il dato è il DutyCycle del PWM. Come si scrive il PWM verso per esempio i pin A0->A5 ?

c'è giò qualche sketch da cui attingere?

grazie, Davide.
599  International / Generale / Re: Sensore di movimento on: June 16, 2011, 07:00:31 am
forse posso capire ciò che vuoi fare.
un'idea, secondo me funzionale, è avere dei sensori di distanza sparsi, e la lettura analogica di ognuno di questi la trasformi in un segnale MIDI. poi mandi questi segnali MIDI ad un sintetizzatore che risolve la fatica di trasformarli in musica.
Allora, per quanto riguarda l'uscita MIDI da Arduino, non c'è niente di più facile:

la libreria: http://www.arduino.cc/playground/Main/MIDILibrary
"l'hardware": http://arduino.cc/en/Tutorial/Midi (praticamente una resistenza e un connettore MIDI femmina...)

per i sensori, si può fare in diversi modi, ma qui servono altre persone più esperte.
la programmazione anche ti assicuro sarebbe abbastanza facile da imparare.
600  International / Generale / Re: Pizza a Torino on: June 16, 2011, 06:44:17 am
...solo nel forum italiano può accadere di questo...
è fantastico! da Chiasso a Porto Palo, da Ventimiglia a Trieste, tutti sanno parlare di buon cibo!

Pages: 1 ... 38 39 [40] 41 42 43