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\SPI"). Any suggestions to solve the problem?
This is my test code
Thanks in advance
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\SPI"). 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 advance
