tepe edit : SPI.transfer (değer) fonksiyonu yerine SPI.transfer (array,boyutu) fonksiyonu kullanıldığında sorun çözüldü. Merhabalar.İki arduino arası SPI haberleşme protokolünü kullanarak master arduino’ma bağlı keypad’ten girilen değerleri slave’e atmak ve slave’e bağlı 2x16 lcd ekranında görmek istiyorum. Keypad’den gelen char tipinde karakterleri bir arrayin içinde topladım. … void loop() { … if (basilantus != NO_KEY && basilantus != ‘*’ && basilantus != ‘#’ && basilantus != ‘1’) { lcd.setCursor(x,z); lcd.print(basilantus); …(buralar önemli değil) kelime= basilantus; kelime[x+1]=‘1’; x=x+1; basilantus = klavyemiz.getKey(); } if (basilantus == ‘1’) { kelimegonderme(); lcd.clear(); x=0,z=0; } void kelimegonderme() { char c; digitalWrite(SS, LOW); for (const char * p = “ali1” ; c = *p; p++) // “ali1” yerine kelime adlı dizimi yazınca çalışmıyor fakat bu yazıyı yazdırıyor. SPI.transfer (c); digitalWrite(SS, HIGH); delay (1000); } SLAVE: include <spi.h>
include <liquidcrystal_i2c_avri2c.h>
char buf [33];
volatile byte pos;
volatile boolean process_it;
LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2);
void setup (void)
{
lcd.begin();
Serial.begin (9600);
SPCR |= bit (SPE);
pinMode(MISO, OUTPUT);
pos = 0;
process_it = false;
SPI.attachInterrupt();
}
ISR (SPI_STC_vect)
{
byte c = SPDR;
if (pos < sizeof buf)
{
buf [pos++] = c;
if (c == '1')
process_it = true;
}
}
void loop (void)
{
if (process_it)
{
buf [pos] = 0;
Serial.println (buf);
lcd.setCursor(0,0);
lcd.print(buf);
pos = 0;
process_it = false;
}
}
Bu sorunu nasıl çözebilirim? Yada keypad’ten girilen charları stringe çevirmenin başka bir yolu var mıdır?
</liquidcrystal_i2c_avri2c.h></spi.h>