MicroViewDemo will not compile

Problem with MicroViewDemo - would not compile

The 4th line in void setup()

“setTime(10,10,01,17,1,2014);”

gives the following error

“ ‘setTime’ was not declared in this scope “

How do I modify the sketch to make it work?

Tony Goodhew

Hi Tonygo,

Quote from [http://learn.microview.io/intro/getting-started.html

If you wish to compile and upload the MicroViewDemo from our example, there is a [3rd party Time library that is required to be installed. Download the Time library and use the same library installation method discussed above to install it into the Arduino IDE. [/quote]

Hope this helps.

Cheers

JP](http://www.pjrc.com/teensy/arduino_libraries/Time.zip)

](http://learn.microview.io/intro/getting-started.html)

Thanks. I’ve re-installed Time library and it now works.

Regards

Tony

Hello having exact same problem … Time library is there but sketch won’t compile.

The learn.microview.io server link dead.

Error is:

Arduino: 1.8.2 (Mac OS X), Board: “Arduino/Genuino Uno”

MicroViewDemo:29: error: ‘setTime’ was not declared in this scope

setTime(10,10,01,17,1,2014);

^

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino: In function ‘void doJumper(int, int)’:

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:153:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

displayConnect(“”,“jumper”);

^

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:153:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:172:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

displayRemove(“jumper”);

^

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino: In function ‘void doResistor(int, int, int, int)’:

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:206:36: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

displayConnect(resvalue,“resistor”);

^

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:228:27: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

displayRemove(“resistor”);

^

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:250:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

displayConnect(“”,“LED”);

^

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino:250:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

/Users/pd/Documents/Arduino/libraries/SparkFun_MicroView/examples/MicroViewDemo/MicroViewDemo.ino: In function ‘void loop()’:

MicroViewDemo:380: error: ‘second’ was not declared in this scope

while ((second() % 11 )!=0) {

^

MicroViewDemo:388: error: ‘hour’ was not declared in this scope

degresshour = (((hour() * 360) / 12) + 270) * (PI / 180);

^

MicroViewDemo:389: error: ‘minute’ was not declared in this scope

degressmin = (((minute() * 360) / 60) + 270) * (PI / 180);

^

exit status 1

‘setTime’ was not declared in this scope

/Users/pd/Documents/Arduino/libraries/Time/examples/TimeTeensy3/TimeTeensy3.ino

This report would have more information with

“Show verbose output during compilation”

option enabled in File → Preferences.

/*
	MicroView Arduino Library
	Copyright (C) 2014 GeekAmmo

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <MicroView.h>
#include <Time.h>

#define clocksize 24

uint16_t 	onDelay=5;		// this is the on delay in milliseconds, if there is no on delay, the erase will be too fast to clean up the screen.

void setup() {
	uView.begin();		// begin of MicroView
	uView.clear(ALL);	// erase hardware memory inside the OLED controller
	uView.display();	// display the content in the buffer memory, by default it is the MicroView logo
	setTime(10,10,01,17,1,2014);
	delay(700);
	uView.clear(PAGE);	// erase the memory buffer, when next uView.display() is called, the OLED will be cleared.
}

void displayConnect(char * value, char * text) {
	int y=0;
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("Connect a");
	if (strlen(value)>0) {
		uView.setCursor(0,y+10);
		uView.print(value); 
		uView.setCursor(0,y+20);
	}
	else
	uView.setCursor(0,y+10);
	uView.print(text);
	uView.display();
}

void displayRemove(char * text) {
	int y=0;
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("Well done!");
	uView.setCursor(0,y+9);
	uView.print("Remove the");
	uView.setCursor(0,y+18);
	uView.print(text);
	uView.setCursor(0,y+27);
	uView.print("to proceed");
	uView.display();
}

int getXpos(int pin) {
	byte xpos[] = {0,0,8,17,26,34,42,51,59,59,51,42,34,26,17,8,0};
	return xpos[pin];
}

int getYpos(int pin) {
	if ((pin >0) && (pin <9))  {
		return 41;
	}
	else {
		return 6;
	}
}

void drawPin(int pin) {
	int x,y, dir;
	int color=WHITE;

	if ((pin >0) && (pin <9))  {
		dir=0;
	}
	else {
		dir=1;
	}

	x=getXpos(pin);
	y=getYpos(pin);

	if (dir==0) {
		uView.drawChar(x,y-10,pin+48,color,XOR);

		uView.line(x,y,x,y+4,color,XOR);
		x++;
		uView.line(x,y,x,y+5,color,XOR);
		x++;
		uView.line(x,y,x,y+6,color,XOR);
		x++;
		uView.line(x,y,x,y+5,color,XOR);
		x++;
		uView.line(x,y,x,y+4,color,XOR);
	}
	else {
		if (pin<10)
		uView.drawChar(x,y+3,pin+48,color,XOR);
		else {
			char str[5];
			sprintf(str, "%d", pin);
			uView.drawChar(x,y+3,str[0],color,XOR);
			uView.drawChar(x,y+11, str[1],color,XOR);
		}

		uView.line(x,y,x,y-4,color,XOR);
		x++;
		uView.line(x,y,x,y-5,color,XOR);
		x++;
		uView.line(x,y,x,y-6,color,XOR);
		x++;
		uView.line(x,y,x,y-5,color,XOR);
		x++;
		uView.line(x,y,x,y-4,color,XOR);

	}
	uView.display();
}

void fromPinToPin(int pin1, int pin2) {
	int x1,y1,x2,y2;
	x1=getXpos(pin1);
	y1=getYpos(pin1);
	x2=getXpos(pin2);
	uView.line(x1+6,y1-6, x2-1, y1-6);
	uView.display();
	drawPin(pin1);
	drawPin(pin2);
}

void doJumper(int pin1, int pin2) {
	int result;
	int sense;

	switch(pin1) {
	case 7: sense=A0; break;
	case 6: sense=A1; break;
	case 5: sense=A2; break;
	case 4: sense=A3; break;
	case 3: sense=A4; break;
	case 2: sense=A5; break;
	default: return;
	}
	displayConnect("","jumper"); 

	pinMode(sense,INPUT);
	digitalWrite(sense,HIGH);

	result=digitalRead(sense);
	while(result==1) {
		fromPinToPin(pin1,pin2);  // on
		delay(300);
		fromPinToPin(pin1,pin2);  // off
		delay(300);    
		fromPinToPin(pin1,pin2);  // on
		delay(300);
		result=digitalRead(sense);

	}

	uView.clear(PAGE);

	displayRemove("jumper");

	result=digitalRead(sense);
	while(result==0) {
		result=digitalRead(sense);
	}
	uView.clear(PAGE);
	uView.display();
}

void doResistor(int pin1, int pin2, int value, int LED) {
	int result,result2;
	int sense;
	int analogValue;
	int ledout;
	char resvalue[20];

	if (value==330)
	analogValue=25;
	else
	analogValue=230;

	switch(pin1) {
	case 7: sense=A0; break;
	case 6: sense=A1; break;
	case 5: sense=A2; break;
	case 4: sense=A3; break;
	case 3: sense=A4; break;
	case 2: sense=A5; break;
	default: return;
	}

	sprintf(resvalue,"%d",value);
	strcat(resvalue," ohm");
	displayConnect(resvalue,"resistor"); 

	pinMode(sense,INPUT);
	digitalWrite(sense,HIGH);

	while(1) {
		fromPinToPin(pin1,pin2);  // on
		delay(300);
		fromPinToPin(pin1,pin2);  // off
		delay(300);    
		fromPinToPin(pin1,pin2);  // on
		delay(300);
		result=analogRead(sense);
		Serial.println(result);
		if ((result>(analogValue-20)) && (result<(analogValue+20))) {
			break;
		}
	}

	uView.clear(PAGE);

	if (LED==0) {
		displayRemove("resistor");
		result=analogRead(sense);
		while(1) {
			result=analogRead(sense);
			if(result>(analogValue+20))
			break;
		}
	}
	else {
		uView.clear(PAGE);

		int outpin=pin1-1;
		switch(outpin) {
		case 7: ledout=A0; break;
		case 6: ledout=A1; break;
		case 5: ledout=A2; break;
		case 4: ledout=A3; break;
		case 3: ledout=A4; break;
		case 2: ledout=A5; break;
		default: return;
		}    
		pinMode(ledout,OUTPUT);
		displayConnect("","LED");
		fromPinToPin(pin1,pin2);
		drawPin(pin1);
		uView.display();
		while(1) {
			digitalWrite(ledout,HIGH);
			fromPinToPin(pin1-1,pin1);  // on
			delay(300);
			digitalWrite(ledout,LOW);
			fromPinToPin(pin1-1,pin1);  // off
			delay(300);
			result=analogRead(sense);
			digitalWrite(ledout,HIGH);
			fromPinToPin(pin1-1,pin1);  // on
			delay(300);
			result2=analogRead(sense);
			Serial.print(result);
			Serial.print(",");
			Serial.println(result2);
			if ((result2-result)>400) {
				Serial.println("LED is blinking...");
				break;
			}
		}
		uView.clear(PAGE);
		uView.setCursor(0,0);
		uView.print("Well done!");
		uView.setCursor(0,10);
		uView.print("The LED is");
		uView.setCursor(0,20);
		uView.print("BLINKING!");

		uView.setCursor(0,40);
		uView.print("Thanks.");
		uView.display();

		long longdly=millis();

		while(1) {
			digitalWrite(ledout,HIGH);
			delay(300);
			digitalWrite(ledout,LOW);
			delay(300);
			if ((millis()-longdly)>6000)
			break;
		}
	}
}

void displayTry() {
	int y=0;
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("Now you");
	uView.setCursor(0,y+10);
	uView.print("have seen");
	uView.setCursor(0,y+20);
	uView.print("our demo.");
	uView.display();
	delay(onDelay);
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("Let's try");
	uView.setCursor(0,y+10);
	uView.print("our");
	uView.setCursor(0,y+20);
	uView.print("built-in");
	uView.setCursor(0,y+30);
	uView.print("tutorials.");
	uView.display();
	delay(onDelay);
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("When you");
	uView.setCursor(0,y+10);
	uView.print("see PINs");
	uView.setCursor(0,y+20);
	uView.print("blinking,");
	uView.setCursor(0,y+30);
	uView.print("connect");
	uView.setCursor(0,y+40);
	uView.print("the PINs");
	uView.display();
	delay(onDelay);
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("to the");
	uView.setCursor(0,y+10);
	uView.print("component");
	uView.setCursor(0,y+20);
	uView.print("mentioned.");
	uView.display();
	delay(onDelay);

}  

void displayEnd() {
	int y=0;
	uView.clear(PAGE);
	uView.setCursor(0,y);
	uView.print("Please");
	uView.setCursor(0,y+10);
	uView.print("proceed to");
	uView.setCursor(0,y+20);
	uView.print("MicroView");
	uView.setCursor(0,y+30);
	uView.print("website.");
	uView.display();
	delay(onDelay);
}

void loop() {
	int i;
	static double counter=99999;
	static unsigned long mSec=millis()+1000;
	static uint8_t x0,y0,x1,y1;
	static float degresshour,degressmin,degresssec,hourx,houry,minx,miny,secx,secy;
	static boolean drawnFirst=false;

	uView.setFontType(0); 		// set font type 0, please see declaration in MicroView.cpp
	uView.setCursor(27,0);		// points cursor to x=27 y=0
	uView.print(12);			
	uView.setCursor(30,uView.getLCDHeight()-uView.getFontHeight());
	uView.print(6);
	uView.setCursor(0,uView.getLCDHeight() /2-(uView.getFontHeight()/2));
	uView.print(9);
	uView.setCursor(uView.getLCDWidth()-uView.getFontWidth(),uView.getLCDHeight()/2-(uView.getFontHeight()/2));
	uView.print(3);
	uView.display();			// display the memory buffer drawn

	while ((second() % 11 )!=0) {
		if (mSec!=(unsigned long)second()) {
			if (drawnFirst) {
				uView.line(32,24,32+hourx,24+houry,WHITE,XOR);
				uView.line(32,24,32+minx,24+miny,WHITE,XOR);
				uView.line(32,24,32+secx,24+secy,WHITE,XOR);
			} 
			
			degresshour = (((hour() * 360) / 12) + 270) * (PI / 180);
			degressmin = (((minute() * 360) / 60) + 270) * (PI / 180);
			degresssec = (((second() * 360) / 60) + 270) * (PI / 180);
			
			hourx = cos(degresshour) * (clocksize / 2.5);
			houry = sin(degresshour) * (clocksize / 2.5);

			minx = cos(degressmin) * (clocksize / 1.4);
			miny = sin(degressmin) * (clocksize / 1.4);

			secx = cos(degresssec) * (clocksize / 1.1);
			secy = sin(degresssec) * (clocksize / 1.1);
			

			uView.line(32,24,32+hourx,24+houry,WHITE,XOR);
			uView.line(32,24,32+minx,24+miny,WHITE,XOR);
			uView.line(32,24,32+secx,24+secy,WHITE,XOR);
			drawnFirst=true;
			uView.display();
			
			mSec=second();
		}
	}
	drawnFirst=false;
	uView.clear(PAGE);

	int maxX=40;
	onDelay=30;
	uView.setFontType(0);
	uView.setCursor(0,40);
	uView.print("  SPRITE  ");
	for (int x=0; x<maxX;x+=2) {
		uView.setFontType(4);    
		uView.drawChar(x,0,48,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(maxX-x,10,48,WHITE,XOR);

		uView.setFontType(6);
		uView.drawChar(x,32,48,WHITE,XOR);

		uView.display();
		delay(onDelay);
		uView.setFontType(4);
		uView.drawChar(x,0,48,WHITE, XOR);
		uView.setFontType(5); 
		uView.drawChar(maxX-x,10,48,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,48,WHITE,XOR);

		uView.display();
		uView.setFontType(4);
		uView.drawChar(x,0,49,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(maxX-x,10,49,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,49,WHITE,XOR);

		uView.display();
		delay(onDelay);
		uView.setFontType(4);
		uView.drawChar(x,0,49,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(maxX-x,10,49,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,49,WHITE,XOR);
		uView.display();
	}

	for (int x=maxX; x>0;x-=2) {
		uView.setFontType(4);
		uView.drawChar(x,10,48,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(40-x,0,48,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,48,WHITE,XOR);

		uView.display();
		delay(onDelay);
		uView.setFontType(4);
		uView.drawChar(x,10,48,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(40-x,0,48,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,48,WHITE,XOR);

		uView.display();
		uView.setFontType(4);
		uView.drawChar(x,10,49,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(40-x,0,49,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,49,WHITE,XOR);

		uView.display();
		delay(onDelay);
		uView.setFontType(4);
		uView.drawChar(x,10,49,WHITE, XOR);
		uView.setFontType(5);
		uView.drawChar(40-x,0,49,WHITE,XOR);
		uView.setFontType(6);
		uView.drawChar(x,32,49,WHITE,XOR);

		uView.display();
	}

	onDelay=5;
	uView.setFontType(0);
	uView.setCursor(0,40);
	uView.print("   LINE   ");    
	uView.display();
	delay(500);
	
	for (i=0; i<150;i++) {
		x0=random(64);
		x1=random(64);
		y0=random(48);
		y1=random(48);
		
		uView.line(x0,y0,x1,y1, WHITE, XOR);		// draw line from x0,y0 to x1,y1 using WHITE color and XOR draw mode
		uView.display();
		delay(onDelay);    
		uView.line(x0,y0,x1,y1, WHITE,XOR);
		uView.display();
	}

	uView.setCursor(0,40);
	uView.print("RECTANGLE ");    
	uView.display();
	delay(500);

	x0=0;y0=0;x1=0;y1=0;
	for (i=1; i<64;i++) {
		y1=i;
		if (y1>47) y1=47;
		uView.rect(x0,y0,i,y1,WHITE,XOR);			// draw rectangle from x0,y0 with width of i and height of y1 using WHITE color and XOR draw mode
		uView.display();
		delay(onDelay);
		uView.rect(x0,y0,i,y1,WHITE,XOR);
		uView.display();
	}

	uView.setCursor(0,40);
	uView.print("  CIRCLE  ");    
	uView.display();
	delay(500);
	
	x0=32;y0=24;
	for (i=0;i<32;i++) {
		uView.circle(x0,y0,i,WHITE,XOR);			// draw circle at x0,y0 with radius of i using WHITE color and XOR draw mode
		uView.display();
		delay(onDelay);
		uView.circle(x0,y0,i,WHITE,XOR);
		uView.display();
		delay(onDelay);
		
	}
	delay(500);
	
	uView.clear(PAGE);
	uView.setCursor(0,40);
	uView.print("  Font 0  ");    
	uView.display();

	uView.setFontType(0);
	uView.setCursor(0,0);
	uView.print("01234567890ABCDabcd01234567890ABCDabcd");
	uView.display();
	delay(1500);

	uView.clear(PAGE);
	uView.setCursor(0,40);
	uView.print("  Font 1  ");    
	uView.display();

	uView.setFontType(1);
	uView.setCursor(0,0);
	uView.print("0123ABCDabcd");
	uView.display();
	delay(1500);
	uView.clear(PAGE);
	
	counter=99999;
	while (counter>99970) {
		
		if (millis()>=mSec) {
			
			uView.setFontType(3);
			uView.setCursor(0,0);
			uView.print(counter);

			counter--;
			uView.display();
			mSec=millis()+100;
		}
	}
	uView.clear(PAGE);
	
	counter=19.99;
	while (counter<20.2) {
		
		if (millis()>=mSec) {
			
			uView.setFontType(2);
			uView.setCursor(0,0);
			uView.print(counter + ((int)(counter*100)%20));
			
			uView.setCursor(0,uView.getFontHeight());
			uView.print(50-counter);
			
			uView.setCursor(0,(uView.getFontHeight()*2));
			uView.print(75+counter+0.02);
			
			counter+=0.01;
			uView.display();
			mSec=millis()+100;
		}
	}
	uView.clear(PAGE);

	// Simple Tutorial 
	uView.setFontType(0);
	onDelay=3500;			// set 3.5 second between each message
	displayTry();			// show please try our tutorial
	doJumper(5,8);			// jumper tutorial
	doJumper(3,8);			// jumper 
	doJumper(2,8);
	doResistor(4,8,330,0);    
	doResistor(4,8,10000,0);
	doResistor(5,8,330,1);    // Do resistor with LED ends the tutorial.
	displayEnd();
	uView.clear(PAGE);
}

OK so for Arduino IDE 1.8.2 on Macintosh (if that matters) solution is:

Get new Time library from Github (or get the entire Teensy thing from https://www.pjrc.com/teensy/td_libs_Time.html )

The Github link is https://github.com/PaulStoffregen/Time

I got the zip Time-master.zip and it became Time-master folder.

The Time library version appears to be 1.5

Replaced contents of Documents/Arduino/libraries/Time with contents of Time-master

In MicroViewDemo replaced #include <Time.h> with #include <TimeLib.h>

This solution also works for MicroViewAnalogClock. Used an external editor to make permanent change to the example code (the Time.h to TimeLib.h mod).