Quantcast
Channel: panStamp forum - All Forums
Viewing all articles
Browse latest Browse all 473

undefined reference to `SPI'

$
0
0
Hello,

I'm trying to show received data on an external Display (EADOG-162). The communication between the NRG3 and the display is over SPI. When I try to initalise SPI with "SPI.begin" I get an error "undefined reference to `SPI'". The Header File of the SPIclass is there ("C:\Users\jan-c\Documents\ArduinoData\packages\panstamp_nrg\hardware\msp430\1.1.0\libraries\SP​I"). Any suggestions to solve the problem?

This is my test code
Code:
#include "SPI.h"
#include<stdio.h>

#define csb 23      //low: active
#define rs 22       //0-instruction, 1-data
#define reset 21    //reset

volatile int sensor = 1;
volatile long alteZeit;
char text[16];

void setup()
{
  pinMode(csb,OUTPUT);   //Chip Select
  pinMode(rs,OUTPUT);  
  pinMode(reset,OUTPUT);
  
  digitalWrite(reset,HIGH);
  
  SPI.begin();
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));

  initialisierung_lcd();
  
  pinMode(3, INPUT_PULLUP);
  attachInterrupt(3,tasterChange, LOW);
}

void loop() {
  lcd_clear();

  switch (sensor)
  {
    case 1:
    sprintf(text,"S1: Temp.=20,8");
    lcd_write(text);
    lcd_gradc();
    break;
    
    case 2:
    sprintf(text,"S2: Temp.=20,8");
    lcd_write(text);
    lcd_gradc();

    lcd_home2();

    sprintf(text,"Humidity=41,6");
    lcd_write(text);
    lcd_prozent();
    break;

    case 3:
    sprintf(text,"S2: Gas=36,1k");
    lcd_write(text);
    lcd_Ohm();

    lcd_home2();

    sprintf(text,"Press.=1004,6hPa");
    lcd_write(text);
    break;
  }
  delay(1000);
}

void tasterChange()
{
  if (millis()-alteZeit > 20)
  {
    if (sensor != 3)
    {
      sensor++;
    }
    else
    {
      sensor = 1;
    }
    alteZeit = millis(); // letzte Schaltzeit merken
  }
}

void initialisierung_lcd()
{  
   digitalWrite(csb,HIGH);    // eadog aus
   delay(50);
  
   digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,LOW);      // instruction
   delay(50);
  
   SPI.transfer(0x39);     // FunctSet: 2Zeilen(1), DoubleHeight(0), InstrTab1(0,1)
   delayMicroseconds(30);
   SPI.transfer(0x14);     // BiasSet: Bias1/4(1)
   delayMicroseconds(30);
   SPI.transfer(0x55);     // PowerControl
   delayMicroseconds(30);
   SPI.transfer(0x6D);     // FollowerControl
   delayMicroseconds(30);
   SPI.transfer(0x78);     // Contrast set
   delayMicroseconds(30);
   SPI.transfer(0x38);     // FunctSet: InstrTab0(0,0)
   delayMicroseconds(30);
   SPI.transfer(0x0F);     // Display ON, Cursor ON, blinken
   delayMicroseconds(30);
   SPI.transfer(0x01);     // Clear display
   //delay(1);
   //SPI.transfer(0x06);
   //delayMicroseconds(30);
  
   delay(1);
   digitalWrite(csb,HIGH);    // eadog aus
}


// String schreiben
// Bsp.1: char text[16]; strcpy(text,"Hallo!"); lcd_write(text);
// Bsp.2: char text[16]; sprintf(text,"%5.1f",123.4); lcd_write(text);
void lcd_write(char* str)    //bis Stringende 0
{  int jj = 0;
   digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,HIGH);     // data
   while(str[jj]!=0)
   {  SPI.transfer(str[jj]);
      delayMicroseconds(30);
      jj=jj+1;
   }
   digitalWrite(csb,HIGH);    // eadog aus
}

// Cursor links in Zeile 1
void lcd_home1()
{  digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,LOW);      // instruction
   SPI.transfer(0x02);     // Return home (Zeile 1)
   delay(1);
   digitalWrite(csb,HIGH);    // eadog aus
}

// Cursor links in Zeile 2
void lcd_home2()
{  digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,LOW);      // instruction
   SPI.transfer(0xC0);     // Set DDRAM Adress to 40 (Zeile 2)
   delay(1);
   digitalWrite(csb,HIGH);    // eadog aus
}

// Display löschen
void lcd_clear()
{  digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,LOW);      // instruction
   SPI.transfer(0x01);     // Clear display
   delay(1);
   digitalWrite(csb,HIGH);    // eadog aus
}

// Ausgabe Sonderzeichen "°C"
void lcd_gradc()
{  digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,HIGH);     // data
   SPI.transfer(0xdf);
   delayMicroseconds(30);
   SPI.transfer(0x43);
   delayMicroseconds(30);
   digitalWrite(csb,HIGH);    // eadog aus
}

// Ausgabe Sonderzeichen "%"
void lcd_prozent()
{  digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,HIGH);     // data
   SPI.transfer(0x25);
   delayMicroseconds(30);
   digitalWrite(csb,HIGH);    // eadog aus
}

// Ausgabe Sonderzeichen "Ohm"
void lcd_Ohm()
{  digitalWrite(csb,LOW);     // eadog ein
   digitalWrite(rs,HIGH);     // data
   SPI.transfer(0x1E);
   delayMicroseconds(30);
   digitalWrite(csb,HIGH);    // eadog aus
}

Thanks in advanceSmile

Viewing all articles
Browse latest Browse all 473

Trending Articles