Go Down

Topic: serial read (Read 761 times) previous topic - next topic

lisarosen

hello,
i interfaced two HEF4794B - works fine as standalone with the code example "shift out".
But now I would like to send over PD a word (highbyte, lowbyte) to the serial port and store the incoming hbyte and the lbyte again in a word, to control the 16 Leds at the same time....
(with just one driver and only 8 leds it works fine:)
Code: [Select]

void loop()
{
  // send data only when you receive data:
     if (Serial.available() > 0) {
           // read the incoming byte:
           dato = Serial.read();
   }
       
   for (count = 0; count < 8; count++) {
   digitalWrite(data, dato & 01);
   //serialWrite((dato & 01) + 48);
   dato>>=1;
   if (count == 7){
   digitalWrite(oe, LOW);
   digitalWrite(strob, HIGH);

   }
   PulseClock();
    digitalWrite(oe, HIGH);
}

 delayMicroseconds(10);
 digitalWrite(strob, LOW);
 delay(10); // waits for a moment
}

but with the word I will have a memory problem with the int - so i'm wondering if i can use (in arduino) as well unsignded int (uint)?
by including which library? (pascal stangs avr/io?)
or do i have to use arrays to read over the serial port more than one incoming byte? (like described in the serialComm-string example)....but how do I get then again a "word" out of this single chars?
thanks a lot for any help, as you can see, i'm a newbeee;)
lisarosen

lisarosen

hello again, this is a self-answer;
yes:)) I can use instead of an int a unsigned, as I found in the keywords.txt in the libfolder of arduino...
reading more than one byte is no problem, because they get buffered....???
and this modified code (originally shift_out) works now perfect with pd or max, sending simultaneously a high- and a lowbyte, whenever i like to change the lightpattern of the 16 leds;)
Code: [Select]
int data = 9;
int strob = 8;
int clock = 10;
int oe = 11;
int count = 0;
int dato = 0;
int dato2 = 0;
unsigned datostored = 0;
unsigned datoo = 0;

void setup()
{
 beginSerial(9600);
 pinMode(data, OUTPUT);
 pinMode(clock, OUTPUT);
 pinMode(strob, OUTPUT);
 pinMode(oe, OUTPUT);
}

void PulseClock(void) {
   digitalWrite(clock, LOW);
   delayMicroseconds(2);
   digitalWrite(clock, HIGH);
   delayMicroseconds(5);
   digitalWrite(clock, LOW);
}

void loop()
{
  // send data only when you receive data:
     if (Serial.available() > 0) {
           // read the incoming byte:
           dato = Serial.read();
               dato2 = Serial.read();
   }
       else {datoo = datostored;
   }
   datoo = (dato * 256) + dato2;
   for (count = 0; count < 16; count++) {
   digitalWrite(data, datoo & 01);
   //serialWrite((dato & 01) + 48);
   datoo>>=1;
   if (count == 15){
   digitalWrite(oe, LOW);
   digitalWrite(strob, HIGH);

   }
   datostored = datoo;
   PulseClock();
    digitalWrite(oe, HIGH);
}

 delayMicroseconds(10);
 digitalWrite(strob, LOW);
 delay(10); // waits for a moment
}


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy