Hello
So, I've made an Arduino clock/HVAC screen using some instructions on a Honda forum but I've made a few tweaks to the code as my steering while switches did not work properly.
Everything still works except for setting the time for the RTC using a resistive ladder set of momentary push buttons.
It's supposed to be that if button 1 is held for 4 seconds then the clock will go into setting mode, button 2 increases the hour, 3 decreases the hour, 4 increases the minutes and 5 decreases the minutes.
As it is at the moment, I can't get it to go into setting mode.
I think I'm close because something I did, just by moving lines of code around made it work but in the process, I broke several other things (almost everything in the void loop). I then reverted to an old backup of the code and forgot what I did to make it work.
here's the code
#include "Wire.h"
#include "ds3231.h"
#define CLK 2 // Red wire, pin #4 (DISP CLK)
#define DAT 3 // Yellow wire, pin #5 (AC SO)
#define INPUT_PIN A0
volatile byte climat_data[7];
int val,mode;
struct ts t;
unsigned long previousMillis = 0;
const long interval = 60000;
unsigned long buttonTimer = 0;
const long longPressTime = 3000;
boolean buttonActive = false;
boolean longPressActive = false;
void setup() {
pinMode(CLK, OUTPUT);
digitalWrite(CLK, LOW);
pinMode(DAT, INPUT_PULLUP);
pinMode(INPUT_PIN, INPUT);
Wire.begin();
Serial.begin(115200);
mode=0;
DS3231_init(DS3231_INTCN);
delay(500);
DS3231_get(&t);
Serial.write("n0.val=");
Serial.print(t.hour);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n1.val=");
Serial.print(t.min);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
void Climat_Read(uint8_t *dataPin, uint8_t *clockPin){
for (uint8_t b = 0; b < 7; b++ ) {
for (uint8_t i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
delayMicroseconds(50);
digitalWrite(clockPin, LOW);
delayMicroseconds(50);
switch (digitalRead(dataPin)){
case 0:
climat_data[b] |= 1 << i;
break;
case 1:
climat_data[b] &= ~(1 << i);
break;
}
}
}
}
void Check_Mode(){
if(analogRead(INPUT_PIN)==1){
if (buttonActive == false){
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)){
longPressActive = true;
if(mode){
mode=0;
DS3231_set(t);
Serial.write("p5.pic=17");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("p3.pic=17");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("p4.pic=17");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}else{
mode=1;
DS3231_get(&t);
Serial.write("p5.pic=18");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("p3.pic=15");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("p4.pic=16");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
}
}else{
if(buttonActive == true){
if(longPressActive == true){
longPressActive = false;
}
buttonActive = false;
}
}
}
void Update_Time(){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
DS3231_get(&t);
Serial.write("n0.val=");
Serial.print(t.hour);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n1.val=");
Serial.print(t.min);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
}
int readAnalogButton() {
int button = analogRead(INPUT_PIN);
if (button > 921) return 0;
if (button < 256) return 1;
if (button < 598) return 2;
if (button < 726) return 3;
if (button < 794) return 4;
if (button < 921) return 5;
}
void Set_Time(){
DS3231_get(&t);
val = analogRead(INPUT_PIN);
if(val==4){ // MINUTE UP
if(t.min==59){
t.min = 0;
}else{
t.min = t.min+1;
}
Serial.write("n1.val=");
Serial.print(t.min);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
DS3231_set(t);
}
if(val==5){ // MINUTE DOWN
if(t.min==0){
t.min = 59;
}else{
t.min = t.min-1;
}
Serial.write("n1.val=");
Serial.print(t.min);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
DS3231_set(t);
}
if(val==2){ // HOUR UP
if(t.hour==23){
t.hour = 0;
}else{
t.hour = t.hour+1;
}
Serial.write("n0.val=");
Serial.print(t.hour);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
DS3231_set(t);
}
if(val==3){ // HOUR DOWN
if(t.hour==0){
t.hour = 23;
}else{
t.hour = t.hour-1;
}
Serial.write("n0.val=");
Serial.print(t.hour);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
DS3231_set(t);
}
}
void loop(){
{int result = readAnalogButton();
Serial.println(result);
}
{
Update_Time();
Check_Mode();
if(mode){
Set_Time();
}
Climat_Read(DAT, CLK);
//Temp1
switch ( ((climat_data[4]) & B11110) >> 1 ){
case 0:
Serial.write("vis n3,0");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 1:
Serial.write("vis n3,1");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n3.val=15");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 0xf:
Serial.write("vis n3,1");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n3.val=29");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
default:
byte i = (((climat_data[4]) & B11110) >> 1);
Serial.write("vis n3,1");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n3.val=");
Serial.print(i+14);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
}
//Temp2 please change n2 to the appropriate object number on nextion lcd
switch ( ((climat_data[5]) & B11110) >> 1 ){
case 0:
Serial.write("vis n2,0");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 1:
Serial.write("vis n2,1");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n2.val=15");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 0xf:
Serial.write("vis n2,1");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n2.val=29");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
default:
byte i = (((climat_data[5]) & B11110) >> 1);
Serial.write("vis n2,1");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.write("n2.val=");
Serial.print(i+14);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
}
// Fan speed
switch( (climat_data[1] & B1110) >> 1 ){
case 0:
Serial.write("p2.pic=7");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 1:
Serial.write("p2.pic=8");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 2:
Serial.write("p2.pic=9");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 3:
Serial.write("p2.pic=10");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 4:
Serial.write("p2.pic=11");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 5:
Serial.write("p2.pic=12");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 6:
Serial.write("p2.pic=13");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 7:
Serial.write("p2.pic=14");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
}
//Directions
switch ( (climat_data[2] & B1110000) >> 4 ){
case 0:
Serial.write("p1.pic=2");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 1:
Serial.write("p1.pic=6");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 2:
Serial.write("p1.pic=4");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 3:
Serial.write("p1.pic=5");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 4:
Serial.write("p1.pic=3");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
}
//AUTO mode
if ((climat_data[2]) & B10){
Serial.write("t1.txt=\"AUTO\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
} else {
Serial.write("t1.txt=\"\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
//AC mode
switch ( (climat_data[3] & B110) >> 1 ){
case 0:
Serial.write("t0.txt=\"\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 1:
Serial.write("t0.txt=\"ON\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
case 2:
Serial.write("t0.txt=\"OFF\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
break;
}
delay(100);
}
When compiling it gives no errors and it says
"Sketch uses 7412 bytes (24%) of program storage space. Maximum is 30720 bytes.
Global variables use 784 bytes (38%) of dynamic memory, leaving 1264 bytes for local variables. Maximum is 2048 bytes."
Please could anybody see what I've done wrong. I've been tearing my hair out for the last week trying to get it to work properly and I would very much like to re-assemble my dashboard