I have written a simple little sketch involving 3 LED's and A Push Button.
It works fine on the Bread Board hooked up to the Arduino UNO. But when I put the code on a atTiny85 it wont run. I know I am programming the chip right. I have tested it with the Blink sketch.
I think it has something to do with the way I have it set up. I noticed pin 2 on the Arduino when sent as Analog input give out about 2 vdc, Pin 2(3) on the Tiny85 puts out 5. Not sure if I am on the right track with that. all so please keep in mind I am very new to all this, just over a week old.
Attached is my code.
Thanks
/*
* Night Lite, final version
*/
int switchPin = 3; // switch is connected to pin 3 (pin 2 on Arduino)
int led1Pin = 0; // Blue LED on Pin 8 on Arduino
int led2Pin = 1; // Green LED on Pin 9 on Arduino
int led3Pin = 2; // Red LED on Pin 10 on Arduino
int val; // variable for reading the pin status
int val2; // variable for reading the delayed status
int buttonState; // variable to hold the button state
int lightMode = 0; // What mode is the light in?
void setup() {
pinMode(switchPin, INPUT); // Set the switch pin as input
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
}
void loop(){
val = digitalRead(switchPin); // read input value and store it in val
delay(10); // 10 milliseconds is a good amount of time
val2 = digitalRead(switchPin); // read the input again to check for bounces
if (val == val2) { // make sure we got 2 consistant readings!
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
if (lightMode == 0) { // if its off
lightMode = 1; // turn lights on!
}
else {
if (lightMode == 1) { // if its all-on
lightMode = 2; // make it blink!
}
else {
if (lightMode == 2) { // if its blinking
lightMode = 3; // make it wave!
}
else {
if (lightMode == 3) { // if its waving,
lightMode = 4;
}
else{
if (lightMode == 4){
lightMode =0;
} // turn light off!
}
}
}
}
}
buttonState = val; // save the new state in our variable
}
// Now do whatever the lightMode indicates
if (lightMode == 0) { // all-off
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW);
}
if (lightMode == 1) { // Blue On
digitalWrite(led1Pin, HIGH);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW);
}
if (lightMode == 2) { // Blue off, Green On
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, HIGH);
digitalWrite(led1Pin, LOW);
}
if (lightMode == 3) { // Red On Green Off
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, HIGH);
}
if (lightMode == 4) { // Flame
analogWrite(led1Pin, random(120)+135);
analogWrite(led2Pin, random(120)+135);
analogWrite(led3Pin, random(120)+135);
delay(random(100));
}
}
}
Just to check your connections,
int switchPin = 3; // leg 3 on the ATTiny85
int led1Pin = 0; // leg 5
int led2Pin = 1; // leg 6
int led3Pin = 2; // leg 7 but it's NOT PWM capable, so your analogWrites won't work; suggest you move this one to leg 2 or 3 (D3 or D4 if you still need to analogWrite)
Leg 1 Reset
Leg 2 PIN 3( Analog input 3)
Leg 3 PIN 4( Analog input 2)
Leg 4 GND
Leg 5 PIN 0 (PWM)
Leg 6 PIN 3 (PWM)
Leg 7 PIN 2 (Analog Input 1)
Leg 8 VCC
strykeroz:
int switchPin = 3; // leg 3 on the ATTiny85
So the PWM remark still stands. Suggest using the internal pull-up on your switch pin to simplify, and swap switch and LED pins so you get PWM for analog write on that 3rd LED.
In around an hour if you like I'll be able to load this up on an ATTiny85 if you don't find what's breaking it first.
No need to do that to fix anything, but a suggestion. Simply setMode to output as you would, but then digitalWrite that pin to high. Wire the pin to yor switch then ground. When not pressed the pin will digitalread high, and when pressed it will be low. But it means your switch circuit will be much simplified.
Regardless it is working the way you have it so I think just move LED3 to a pin that supports PWM, and lose the initiation of Serial...and i think it should run as it did for you on the arduino.
kculm:
There are only 2 PWM pins PIN 0 (5)
and PIN 1 (6)
This is a common misconception. ATTiny85 has 4 pins capable of PWM, with two sharing the same clock source. I routinely use this little uC to run RGB LEDs.
Sorry still stuck on this iPad or would post an example.
Also, it is possible to drive any of the pins by software PWM if the application is lighting or anything else where accuracy or high frequencies aren't a requirement.
kculm:
There are only 2 PWM pins PIN 0 (5)
and PIN 1 (6)
This is a common misconception. ATTiny85 has 4 pins capable of PWM, with two sharing the same clock source. I routinely use this little uC to run RGB LEDs.
Sorry still stuck on this iPad or would post an example.
Also, it is possible to drive any of the pins by software PWM if the application is lighting or anything else where accuracy or high frequencies aren't a requirement.
Cheers! Geoff
Really! if i had of known this 2 weeks ago, you'd have saved me about 30 bucks!
Which pins use PWM on the attiny85, i'll update my schematic - Thanks